前言
本文是網路基礎的最后一篇,決議常見的TCP面試高頻詞匯,
1、TCP/UDP的區別
- 用戶資料報協議 UDP(User Datagram Protocol)是無連接的,沒有擁塞控制,面向資料報文段,提供非可靠性傳輸,傳輸效率高,一般用于即時通信,
- 傳輸控制協議 TCP(Transmission Control Protocol)是面向連接的,有流量控制,擁塞控制,面向位元組流,提供可靠性傳輸,傳輸效率相對UDP較低,一般用于檔案傳輸、發送和接收郵件等場景,
2、TCP三次握手/四次揮手
2.1、三次握手策略
如果面試說到網路這塊,這道題目幾乎是必問,我們日常用到最多的應用層HTTP協議,傳輸層使用的就是TCP協議,為了準確無誤地把資料送達目標處,TCP 協議采用了三次握手策略:
- 客戶端給服務端發送帶有 SYN 標志、序號seq = J(J是亂數)、確認號 = 0的資料包完成一次握手
- 服務端給客戶端發送帶有 SYN/ACK 標志、序號seq = K(K是亂數), 確認號 = J + 1(SYN請求本身需要占用一個序號 )的資料包完成二次握手
- 客戶端給服務端發送帶有 ACK 標志、序號seq = J + 1,確認號 = K + 1的資料包完成三次握手
2.2、為什么需要三次握手
三次握手的目的是建立可靠的通信信道,目的是雙方確認自己與對方的發送與接收是正常的:
- 第一次握手,服務端確認自己接收正常、確認客戶端發送正常
- 第二次握手,客戶端確認自己發送正常、接收正常,確認服務端發送正常、接收正常
- 第三次握手,服務端確認自己發送正常、接收正常,確認客戶端發送正常、接收正常
2.3、四次揮手的策略
四次揮手是在斷開TCP連接的時候,資料傳輸完畢后,雙方都可釋放連接,一般由客戶端主動關閉,服務器被動關閉,我們將客戶端用A代替,服務端用B代替,簡單描述下四次握手的程序:
- A發出連接釋放報文段,首部 FIN = 1,序號 seq = i,等待B確認,
- B發出確認報文段,確認號 ack = i+1,序號 seq = k,
- A收到B的確認報文,A到B方向的連接就釋放了,TCP 連接處于半關閉狀態,A不能向B發送資料;B若發送資料,A仍要接收,
- 當B不再需要連接時,發送連接釋放請求報文段,FIN=1,
- A收到后發出確認,進入 TIME-WAIT 狀態,等待 2 MSL(兩個報文最大生命周期)釋放連接,
- B收到A的確認后釋放連接,
2.4、為什么要四次揮手
TCP是全雙工的,為了實作可靠的連接關閉,客戶端發出結束報文FIN,服務端收到這個報文,就進入 CLOSE-WAIT 狀態(服務端可能有未傳送完畢的資料),服務端傳送完畢之后,服務器會發送 FIN 連接釋放報文,
客戶端收到這個報文,向服務端發送確認報文,進入TIME_WAIT狀態,等待2MSL(兩個報文最大生命周期),發送設定等待時間有兩個目的:- 接收服務端重新發送連接釋放請求(可能第一次沒收到客戶端確認報文)
- 讓網路中延遲的FIN/ACK資料都消失,使得新的連接不會出現舊的連接請求報文,
2、超時重傳
TCP 使用超時重傳來實作可靠傳輸:如果一個已經發送的報文段在超時時間內沒有收到確認,那么就重傳這個報文段,
2.1、超時時間怎么確定
RTT(往返時延)表示資料包從發出去到收到對應 ACK 的時間,加權平均往返時間 RTTs 計算:
其中,0 ≤ a < 1,RTTs 隨著 a 的增加更容易受到 RTT 的影響, 超時時間 RTO 應該略大于 RTTs,TCP 使用的超時時間計算如下:
其中 RTTd 為偏差的加權平均值,想要深入的了解這個演算法,參考RFC6298
2.2、重傳機制
基于定時器的重傳
這種機制下,每個資料包都有相應的計時器,一旦超過 RTO 而沒有收到 ACK,就重發該資料包,沒收到 ACK 的資料包都會存在重傳緩沖區里,等到 ACK 后,就從緩沖區里洗掉,
快速重傳
基于計時器的重傳基于設定的超時時間,而快速重傳使用了累計確認機制:服務器如果收到亂序的包,給客戶端回復最近一次報文段的 ACK,如果相同的ACK累計達到3次就重發該資料包,
3、滑動視窗
視窗是快取的一部分,用來暫時存放位元組流,發送方和接收方各有一個視窗,發送方根據接收方視窗欄位和其它資訊設定自己的視窗大小,用來控制發送的速率,保證接收方來得及接收,
如果發送視窗左部的位元組已經發送并且收到了確認,那么就將發送視窗向右滑動一定距離,直到左部第一個位元組不是已發送并且已確認的狀態;接收視窗的滑動類似,接收視窗左部位元組已經發送確認并交付主機,就向右滑動接收視窗,
接收視窗只會對視窗內最后一個按序到達的位元組進行確認,例如接收視窗已經收到的位元組為 {16, 24, 30},其中 {24} 按序到達,而 {24, 30} 就不是,因此只對位元組 16 進行確認,發送方得到一個位元組的確認之后,就知道這個位元組之前的所有位元組都已經被接收,
4、擁塞控制
流量控制是控制發送方的發送速率,讓接收方能來得及接收;而擁塞控制是作用于網路,它是防止過多的包被發送到網路中,避免出現網路負載過大,降低整個網路的擁塞程度,TCP 主要通過四個演算法來進行擁塞控制:慢開始、擁塞避免、快重傳、快恢復,想要深入的了解這四個演算法,參考 TCP的擁塞控制(詳解)結束語
本來還想多講點內容的,但是實力限制了我的發揮……
我是夏夜涼月,咱們下篇再見
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/333662.html
標籤:其他
上一篇:滑動視窗協議(GBN, SR)
