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

白偉業發表於2018-04-17

來來來

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

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

TCP

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

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的區別?

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

舉個例子
我們微信聊天時候經常會有這種情況。
小哥哥,小姐姐,我有一份tcp、http面試指南你要嗎?
是不是感同身受,這種情況就是對方用了TCP協議來聊天,要經過--在嗎?--在--巴拉巴拉,才能成功的傳遞資訊。 而如果對方使用UDP,則會有事直接說,不管我收沒收到。(以後找我請用UDP協議,著急直接打電話!)

HTTP

Http協議是建立在TCP協議基礎之上的,當瀏覽器需要從伺服器獲取網頁資料的時候,會發出一次Http請求。Http會通過TCP建立起一個到伺服器的連線通道,當本次請求需要的資料完畢後,Http會立即將TCP連線斷開,這個過程是很短的。所以Http連線是一種短連線,是一種無狀態的連線。

所謂的無狀態,是指瀏覽器每次向伺服器發起請求的時候,不是通過一個連線,而是每次都建立一個新的連線。如果是一個連線的話,伺服器程式中就能保持住這個連線並且在記憶體中記住一些資訊狀態。而每次請求結束後,連線就關閉,相關的內容就釋放了,所以記不住任何狀態,成為無狀態連線。

http傳輸流

無恥盜圖

小哥哥,小姐姐,我有一份tcp、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,用來表示訊息頭部的結束。

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

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等等)
  • . 瀏覽器傳送非同步請求

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

還是要注重一下版權的,本文部分內容來源於大佬碼洞,更全更深入的知識在那裡,還不快去關注,然後感謝大佬對我的寬容。

相關文章