面試高頻:大牛口中頻出的HTTP到底怎麼學?一份乾貨文檔助你掃盲

程序員掌握 HTTP 有多重要?

1:瞭解Http協議,可以瞭解Web應用程序前後端的交互

2:可以模仿Http的post和get的請求方式,寫一個類似HttpClient的工具,然後爬蟲。

3:可以自己寫一個瀏覽器,對於深入瀏覽器原理很有幫助。

4:可以替代Webservice和dubbo這類的遠程連接工具,直接通過http的post和get的方式,通過json來交換數據。

在本文中列出了十三道HTTP常見的“疑難雜症”,也是各個大廠面試官基本上都會問到的一些難點和考點,要是你能從容的答出來,那麼你的面試官一定會對你刮目相看

怎麼學HTTP?怎麼學好HTTP?文末我已給出了我的建議,希望能對廣大讀者能起到一定的幫助!

一、OSI與TCP/IP各層的結構與功能,都有哪些協議?

學習計算機網絡時我們一般採用折中的辦法,也就是中和 OSI 和 TCP/IP 的優點,採用一種只有五層協議的體系結構,這樣既簡潔又能將概念闡述清楚。

面試高頻:大牛口中頻出的HTTP到底怎麼學?一份乾貨文檔助你掃盲

結合互聯網的情況,自上而下地,非常簡要的介紹一下各層的作用。

1.1 應用層

應用層(application-layer)的任務是通過應用進程間的交互來完成特定網絡應用。應用層協議定義的是應用進程(進程:主機中正在運行的程序)間的通信和交互的規則。對於不同的網絡應用需要不同的應用層協議。在互聯網中應用層協議很多,如域名系統DNS,支持萬維網應用的 HTTP協議,支持電子郵件的 SMTP協議等等。我們把應用層交互的數據單元稱為報文。

1.2 運輸層

運輸層(transport layer)的主要任務就是負責向兩臺主機進程之間的通信提供通用的數據傳輸服務。應用進程利用該服務傳送應用層報文。“通用的”是指並不針對某一個特定的網絡應用,而是多種應用可以使用同一個運輸層服務。由於一臺主機可同時運行多個線程,因此運輸層有複用和分用的功能。所謂複用就是指多個應用層進程可同時使用下面運輸層的服務,分用和複用相反,是運輸層把收到的信息分別交付上面應用層中的相應進程。

TCP 與 UDP 的對比見問題三。

1.3 網絡層

在計算機網絡中進行通信的兩個計算機之間可能會經過很多個數據鏈路,也可能還要經過很多通信子網。網絡層的任務就是選擇合適的網間路由和交換結點, 確保數據及時傳送。 在發送數據時,網絡層把運輸層產生的報文段或用戶數據報封裝成分組和包進行傳送。在 TCP/IP 體系結構中,由於網絡層使用 IP 協議,因此分組也叫 IP 數據報 ,簡稱 數據報

1.4 數據鏈路層

數據鏈路層(data link layer)通常簡稱為鏈路層。兩臺主機之間的數據傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專門的鏈路層的協議。 在兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層交下來的 IP 數據報組裝成幀,在兩個相鄰節點間的鏈路上傳送幀。每一幀包括數據和必要的控制信息(如同步信息,地址信息,差錯控制等)。

1.5 物理層

在物理層上所傳送的數據單位是比特。 物理層(physical layer)的作用是實現相鄰計算機節點之間比特流的透明傳送,儘可能屏蔽掉具體傳輸介質和物理設備的差異。 使其上面的數據鏈路層不必考慮網絡的具體傳輸介質是什麼。“透明傳送比特流”表示經實際電路傳送後的比特流沒有發生變化,對傳送的比特流來說,這個電路好像是看不見的。

1.6 總結一下

上面我們對計算機網絡的五層體系結構有了初步的瞭解,下面附送一張七層體系結構圖總結一下。

面試高頻:大牛口中頻出的HTTP到底怎麼學?一份乾貨文檔助你掃盲

二、TCP 三次握手和四次揮手(面試常客)

為了準確無誤地把數據送達目標處,TCP協議採用了三次握手策略。

2.1 TCP 三次握手漫畫圖解

如下圖所示,下面的兩個機器人通過3次握手確定了對方能正確接收和發送消息(圖片來源:《圖解HTTP》)。

面試高頻:大牛口中頻出的HTTP到底怎麼學?一份乾貨文檔助你掃盲

簡單示意圖:

面試高頻:大牛口中頻出的HTTP到底怎麼學?一份乾貨文檔助你掃盲

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

2.2 為什麼要三次握手

三次握手的目的是建立可靠的通信信道,說到通訊,簡單來說就是數據的發送與接收,而三次握手最主要的目的就是雙方確認自己與對方的發送與接收是正常的。

第一次握手:Client 什麼都不能確認;Server 確認了對方發送正常,自己接收正常

第二次握手:Client 確認了:自己發送、接收正常,對方發送、接收正常;Server 確認了:對方發送正常,自己接收正常

第三次握手:Client 確認了:自己發送、接收正常,對方發送、接收正常;Server 確認了:自己發送、接收正常,對方發送、接收正常

所以三次握手就能確認雙發收發功能都正常,缺一不可。

2.3 為什麼要傳回 SYN

接收端傳回發送端所發送的 SYN 是為了告訴發送端,我接收到的信息確實就是你所發送的信號了。

2.4 傳了 SYN,為啥還要傳 ACK

雙方通信無誤必須是兩者互相發送信息都無誤。傳了 SYN,證明發送方到接收方的通道沒有問題,但是接收方到發送方的通道還需要 ACK 信號來進行驗證。

面試高頻:大牛口中頻出的HTTP到底怎麼學?一份乾貨文檔助你掃盲

斷開一個 TCP 連接則需要“四次揮手”:

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

2.5 為什麼要四次揮手

任何一方都可以在數據傳送結束後發出連接釋放的通知,待對方確認後進入半關閉狀態。當另一方也沒有數據再發送的時候,則發出連接釋放通知,對方確認後就完全關閉了TCP連接。

三、TCP,UDP 協議的區別

面試高頻:大牛口中頻出的HTTP到底怎麼學?一份乾貨文檔助你掃盲

UDP 在傳送數據之前不需要先建立連接,遠地主機在收到 UDP 報文後,不需要給出任何確認。雖然 UDP 不提供可靠交付,但在某些情況下 UDP 確是一種最有效的工作方式(一般用於即時通信),比如: QQ 語音、 QQ 視頻 、直播等等

四、TCP 協議如何保證可靠傳輸?

  1. 應用數據被分割成 TCP 認為最適合發送的數據塊。
  2. TCP 給發送的每一個包進行編號,接收方對數據包進行排序,把有序數據傳送給應用層。
  3. 校驗和: TCP 將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP 將丟棄這個報文段和不確認收到此報文段。
  4. TCP 的接收端會丟棄重複的數據。
  5. 流量控制: TCP 連接的每一方都有固定大小的緩衝空間,TCP的接收端只允許發送端發送接收端緩衝區能接納的數據。當接收方來不及處理發送方的數據,能提示發送方降低發送的速率,防止包丟失。TCP 使用的流量控制協議是可變大小的滑動窗口協議。 (TCP 利用滑動窗口實現流量控制)
  6. 擁塞控制: 當網絡擁塞時,減少數據的發送。
  7. ARQ協議: 也是為了實現可靠傳輸的,它的基本原理就是每發完一個分組就停止發送,等待對方確認。在收到確認後再發下一個分組。
  8. 超時重傳: 當 TCP 發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。

五、在瀏覽器中輸入url地址 ->> 顯示主頁的過程(面試常客)

打開一個網頁,整個過程會使用哪些協議

圖解(圖片來源:《圖解HTTP》):

面試高頻:大牛口中頻出的HTTP到底怎麼學?一份乾貨文檔助你掃盲

總體來說分為以下幾個過程:

  1. DNS解析
  2. TCP連接
  3. 發送HTTP請求
  4. 服務器處理請求並返回HTTP報文
  5. 瀏覽器解析渲染頁面
  6. 連接結束

六、各種協議與HTTP協議之間的關係

一般面試官會通過這樣的問題來考察你對計算機網絡知識體系的理解。

面試高頻:大牛口中頻出的HTTP到底怎麼學?一份乾貨文檔助你掃盲


建議

非常推薦大家看一下 《圖解HTTP》 這本書,這本書頁數不多,但是內容很是充實,不管是用來系統的掌握網絡方面的一些知識還是說純粹為了應付面試都有很大幫助。是一本不可多得的純乾貨好書!

面試高頻:大牛口中頻出的HTTP到底怎麼學?一份乾貨文檔助你掃盲

找不到哪裡有這本書?不用擔心,小編肯定已經準備好了在這裡,需要這份《圖解HTTP》電子檔的朋友可以後臺私信我“資料”即可免費獲取~


分享到:


相關文章: