面试题:谈谈你对TCP的认识
一 TCP
1. 簡介
首先,TCP是一個傳輸層協議,提供進程到進程之間的可靠性數據傳輸服務,還提供流量控制和差錯控制等機制。
其次,TCP是面向連接的,其通信模式是全雙工的;面向連接是指:
- 在發送數據之前必須建立連接;
- 連接狀態只在兩端維護,沿途節點不維護;
連接建立需要進行三次握手,關閉連接需要進行四次揮手;
接下來面試官會問可靠性數據傳輸的原理、流量控制、差錯控制、三次握手和四次揮手等;
二 TCP的可靠性傳輸
1. TCP的可靠性傳輸原理
- 流水線機制;
- 累計確認;
- TCP使用單一重傳定時器,當超時或收到重復的ACK會觸發重傳事件;
- 其它的還有使用序列號對TCP報文段進行排序和丟掉重復的報文段;使用校驗和檢查錯誤的報文段;
2. 流水線機制
流水線機制,允許發送方在收到ACK之前,可以連續的發送多個分組,發送方和接收方需要更大的存儲空間以緩存分組。
3. 累計確認
接收方收到序列號1、2、3、4和5的包,不必每個都確認,只需確認第5個就行,當發送方收到接收方對5的確認ACK后,就明白接收方前5個都已經正確接收。
4. 超時重傳和快速重傳
超時重傳:發送端發送報文后,由于長時間沒有收到ACK(該分組還在路上或者丟失),所以會重傳當前分組;同時定時器RTO(Retransmission Timeout)會加倍。如果再次超時,定時器會再次加倍。
快速重傳:如果發生超時,TCP的定時器的時間會設置到很大,重發丟失分組之前要等很長時間。因此需要通過重復的ACK檢測分組丟失,如果發送方收到同一個數據的3個ACK,則會假定該分組已經丟失,會立即重傳。
三 流量控制和擁塞控制
流量控制是接收方和發送方的問題,而擁塞控制是整個網絡的問題。
1. 流量控制
在TCP的報頭中,有一個receive window的字段,接收方會通過設置該字段存儲自己緩沖區的可用空間。這樣發送方將會限制自己已發送但還未收到ACK的數據不超過接收方的可用空間。當RecvWindow為0時,為了避免死鎖,發送方還是會發送很小的數據段。
2. 擁塞控制
通過限制發送發的發送速率來進行擁塞控制:
CongWin(congest window)被稱作擁塞窗口,最后一個發送的字節減去最后一個被確認過的字節序列號,要小于等于CongWin。發送速率:
rate≈CongWin/RTT (Bytes/sec)動態調整CongWin以改變發送速率。
注:在早期版本,當發生擁塞后直接將CongWin置為1,現在是將其置為原來的一半;
如何動態調整發送速率,可以總結為:
**加性增-乘性減;
慢啟動;**
慢啟動并不是指增長速度慢,而是指初始速率低,初始速率為1,然后每收到一個ACK,就將CongWin翻倍,直到達到閾值的一半;
加性增是指到達閾值的一半后,每次讓CongWin增加1,而乘性減是當發生loss事件后,將CongWin減為原來的一半(也可能置為1);
lose事件:收到3個重復的ACK或者超時;
總結:
當CongWin低于閾值的時候,發送者處于慢啟動階段,CongWin指數增長;
當CongWin高于閾值,發送者處于擁塞避免階段,CongWin線性增長;
當收到3個重復的ACK,閾值設置為CongWin的一半,CongWin設置為閾值,然后進行線性增長;
當超時發生,閾值設置為CongWin的一半,CongWin設置為1,然后進行指數增長;
最后三次握手和四次揮手請參考:https://blog.csdn.net/qq_38038480/article/details/80569651
總結
以上是生活随笔為你收集整理的面试题:谈谈你对TCP的认识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server大量数据秒级插入/新
- 下一篇: 计算机ppt文字1是什么原因,ppt让答