小哥哥,小姐姐,我有一份tcp、http面試指南你要嗎?

來來來

對,我就是騙你進來的。嘿嘿嘿... 既然來了就看看再走嘛html

做爲一個學通訊出身的前端,說道http、tcp什麼的,算是到了個人領域了。(我會告訴你我上課淨睡覺了,啥也沒學到嗎?)此次給你們講講http,提升水平、豐富知識。(要不是爲了面試,誰會管什麼ttp呀,對我是就這麼膚淺)前端

TCP

要說http就繞不開tcp,TCP協議對應於傳輸層,而HTTP協議對應於應用層,從本質上來講,兩者沒有可比性。可是,http是基於tcp協議的。web

TCP/IP 協議分層模型

  • 物理層將二進制的0和1和電壓高低,光的閃滅和電波的強弱信號進行轉換
  • 鏈路層表明驅動
  • 網絡層
    • 使用 IP 協議,IP 協議基於 IP 轉發分包數據
    • IP 協議是個不可靠協議,不會重發
    • IP 協議發送失敗會使用ICMP 協議通知失敗
    • ARP 解析 IP 中的 MAC 地址,MAC 地址由網卡出廠提供
    • IP 還隱含鏈路層的功能,無論雙方底層的鏈路層是啥,都能通訊
  • 傳輸層
    • 通用的 TCP 和 UDP 協議
      • TCP 協議面向有鏈接,能正確處理丟包,傳輸順序錯亂的問題,可是爲了創建與斷開鏈接,須要至少7次的發包收包,資源浪費
      • UDP 面向無鏈接,無論對方有沒有收到,若是要獲得通知,須要經過應用層
  • 會話層以上分層
    • TCP/IP 分層中,會話層,表示層,應用層集中在一塊兒
    • 網絡管理經過 SNMP 協議

劃重點了啊(面試最常問的啊)

TCP三次握手和四次揮手?面試

被問爛了的問題了,這裏不詳細講了,三次握手:瀏覽器

  • 客戶端–發送帶有SYN標誌的數據包–一次握手–服務端
  • 服務端–發送帶有SYN/ACK標誌的數據包–二次握手–客戶端
  • 客戶端–發送帶有帶有ACK標誌的數據包–三次握手–服務端

四次揮手:緩存

  • 客戶端-發送一個FIN,用來關閉客戶端到服務器的數據傳送
  • 服務器-收到這個FIN,它發回一個ACK,確認序號爲收到的序號加1 。和SYN同樣,一個FIN將佔用一個序號
  • 服務器-關閉與客戶端的鏈接,發送一個FIN給客戶端
  • 客戶端-發回ACK報文確認,並將確認序號設置爲收到序號加1

還不懂的童鞋,去找別人的文章好好看看!服務器

TCP和UDP的區別?微信

仔細閱讀上面傳輸層裏寫的內容,懂了嗎?(不懂?不懂背下來啊,混蛋!) markdown

舉個例子
咱們微信聊天時候常常會有這種狀況。
是否是感同身受,這種狀況就是對方用了TCP協議來聊天,要通過--在嗎?--在--巴拉巴拉,才能成功的傳遞信息。 而若是對方使用UDP,則會有事直接說,無論我收沒收到。(之後找我請用UDP協議,着急直接打電話!)

HTTP

Http協議是創建在TCP協議基礎之上的,當瀏覽器須要從服務器獲取網頁數據的時候,會發出一次Http請求。Http會經過TCP創建起一個到服務器的鏈接通道,當本次請求須要的數據完畢後,Http會當即將TCP鏈接斷開,這個過程是很短的。因此Http鏈接是一種短鏈接,是一種無狀態的鏈接。網絡

所謂的無狀態,是指瀏覽器每次向服務器發起請求的時候,不是經過一個鏈接,而是每次都創建一個新的鏈接。若是是一個鏈接的話,服務器進程中就能保持住這個鏈接而且在內存中記住一些信息狀態。而每次請求結束後,鏈接就關閉,相關的內容就釋放了,因此記不住任何狀態,成爲無狀態鏈接。

http傳輸流

無恥盜圖

發送端在層與層間傳輸數據時,沒通過一層都會被加上首部信息,接收端每通過一層都會刪除一條首部

又來劃重點了啊

HTTP的英文全稱?

開玩笑的,這個顯然不是重點,可是不排除有人會去問,仍是要知道的: 超文本傳輸協議(HyperText Transfer Protocol)

狀態碼?

狀態碼就那些,經常使用的記住就好了:

2XX 成功

  • 200 OK,表示從客戶端發來的請求在服務器端被正確處理
  • 204 No content,表示請求成功,但響應報文不含實體的主體部分
  • 206 Partial Content,進行範圍請求

3XX 重定向

  • 301 moved permanently,永久性重定向,表示資源已被分配了新的 URL
  • 302 found,臨時性重定向,表示資源臨時被分配了新的 URL
  • 303 see other,表示資源存在着另外一個 URL,應使用 GET 方法丁香獲取資源
  • 304 not modified,表示服務器容許訪問資源,但因發生請求未知足條件的狀況
  • 307 temporary redirect,臨時重定向,和302含義相同

4XX 客戶端錯誤

  • 400 bad request,請求報文存在語法錯誤
  • 401 unauthorized,表示發送的請求須要有經過 HTTP 認證的認證信息
  • 403 forbidden,表示對請求資源的訪問被服務器拒絕
  • 404 not found,表示在服務器上沒有找到請求的資源

5XX 服務器錯誤

  • 500 internal sever error,表示服務器端在執行請求時發生了錯誤
  • 503 service unavailable,代表服務器暫時處於超負載或正在停機維護,沒法處理請求

HTTP協議格式?

HTTP的請求和響應的消息協議是同樣的,分爲三個部分,起始行、消息頭和消息體。這三個部分以CRLF做爲分隔符。最後一個消息頭有兩個CRLF,用來表示消息頭部的結束。

HTTP請求的起始行稱爲請求行,形如GET /index.html HTTP/1.1

HTTP響應的起始行稱爲狀態行,形如200 ok

消息頭部有不少鍵值對組成,多個鍵值對之間使用CRLF做爲分隔符,也能夠徹底沒有鍵值對。形如Content-Encoding: gzip 消息體是一個字符串,字符串的長度是由消息頭部的Content-Length鍵指定的。若是沒有Content-Length字段說明沒有消息體,譬如GET請求就是沒有消息體的,POST請求的消息體通常用來放置表單數據。GET請求的響應返回的頁面內容也是放在消息體裏面的。咱們平時調用API返回的JSON內容都是放在消息體裏面的。

HTTP的無狀態性?

所謂HTTP協議的無狀態性是指服務器的協議層無需爲不一樣的請求之間創建任何相關關係,它特指的是協議層的無狀態性。可是這並不表明創建在HTTP協議之上的應用程序就沒法維持狀態。應用層能夠經過會話Session來跟蹤用戶請求之間的相關性,服務器會爲每一個會話對象綁定一個惟一的會話ID,瀏覽器能夠將會話ID記錄在本地緩存LocalStorage或者Cookie,在後續的請求都帶上這個會話ID,服務器就能夠爲每一個請求找到相應的會話狀態。

輸入url到頁面加載都發生了什麼事情?(最最常問的來了)

  • 輸入地址
  • 瀏覽器查找域名的 IP 地址 這一步包括 DNS 具體的查找過程,包括:瀏覽器緩存->系統緩存->路由器緩存...
  • 瀏覽器向 web 服務器發送一個 HTTP 請求
  • 服務器的永久重定向響應(從 http://example.com 到 http://www.example.com)
  • 瀏覽器跟蹤重定向地址
  • 服務器處理請求
  • 服務器返回一個 HTTP 響應
  • 瀏覽器顯示 HTML
  • 瀏覽器發送請求獲取嵌入在 HTML 中的資源(如圖片、音頻、視頻、CSS、JS等等)
  • . 瀏覽器發送異步請求

仍是要注重一下版權的,本文部份內容來源於大佬碼洞,更全更深刻的知識在那裏,還不快去關注,而後感謝大佬對個人寬容。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息