TCP通過三次握手建立連接,四次揮手釋放連接,確保連接建立和連接釋放的可靠。
序列號、檢驗和、確認應答信號、重發機制、連接管理、窗口控制、流量控制、擁塞控制 標準回答 可靠傳輸就是通過TCP連接傳送的數據是沒有差錯、不會丟失、不重復并且按序到達的。TCP是通過序列號、檢驗和、確認應答信號、重發機制、連接管理、窗口控制、流量控制、擁塞控制一起保證TCP傳輸的可靠性的。 加分回答 可靠傳輸的具體實現是:
- 應用層的數據會被分割成TCP認為最適合發送的數據塊。
- 序列號:TCP給發送的每一個包都進行編號,接收方對數據包進行排序,把有序數據傳送給應用層,TCP的接收端會丟棄重復的數據。
- 檢驗和:TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。
- 確認應答:如果收到的數據報報文段的檢驗和沒有差錯,就確認收到,如果有差錯,TCP就丟棄這個報文段和不確認收到此報文段。
- 流量控制:TCP 連接的每一方都有固定大小的緩沖空間,TCP的接收端只允許發送端發送接收端緩沖區能接納的數據。當接收方來不及處理發送方的數據,能提示發送方降低發送的速率,防止包丟失。TCP 使用的流量控制協議是可變大小的滑動窗口協議。
- 擁塞控制:當網絡擁塞時,減少數據的發送。
- 停止等待協議:它的基本原理就是每發完一個分組就停止發送,等待對方確認。在收到確認后再發下一個分組。
- 超時重傳: 當 TCP 發出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
目錄
1. 三次握手和四次揮手
2.?流量控制
3. 擁塞控制
4.?序列號
5.?超時重傳
6. 停止等待協議
1. 三次握手和四次揮手
TCP通過三次握手建立連接,四次揮手釋放連接,確保連接建立和連接釋放的可靠。
【三次握手詳細過程】
能否使用兩次握手建立連接呢?
不行。如果TCP客戶發起的請求滯留到達,此時TCP服務器會進入連接已建立狀態,而TCP客戶端仍為關閉狀態,會導致TCP服務器的資源浪費。
【四次揮手詳細過程】
2.?流量控制
流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收。(發送過快接收方來不及接受,可能導致數據丟失)
使用滑動窗口機制實現。
【以字節為單位的滑動窗口】
【問題】對于主機B發送的消息丟失,主機A遲遲收不到主機B的消息,雙方會陷入死鎖局面。
解決:設置持續計時器,超過則主機A發送0窗口探測報文(帶有1字節),即使主機B的接收窗口為0規定也要接收0窗口探測報文。
【問題】0窗口探測報文(帶有1字節)丟失怎么辦?
解決:對于0窗口探測報文(帶有1字節)也設置超時計時器,超時則重傳。
3. 擁塞控制
擁塞:在某段時間,若對網絡中某一資源的需求超過了該資源所能提供的可用部分,網絡性能就要變壞。
四種擁塞控制算法?:
- 慢開始
- 擁塞避免?
- 快重傳
- 快恢復
【慢開始+擁塞避免】
當 cwnd < ssthresh 時,使用慢開始算法。
當 cwnd > ssthresh 時,停止使用慢開始算法,改用擁塞避免算法。
當 cwnd = ssthresh 時,既可使用慢開始算法,也可使用擁塞避免算法。【快重傳+快恢復】
解決個別丟失但未擁塞,發生的超時重傳而導致調用擁塞避免算法
快重傳,就是使發送方盡快進行重傳,而不是等超時重傳計時器超時再重傳。
- 要求接收方不要等待自己發送數據時才進行捎帶確認,而是要立即發送確認;即使收到了失序的報文段也要立即發出對已收到的報文段的重復確認
- 發送方一旦收到3個連續的重復確認,就將相應的報文段立即重傳,而不是等該報文段的超時重傳計時器超時再重傳
快恢復:ssthresh=cwnd/2,cwnd=ssthresh
【慢開始結合擁塞避免】示例
【慢開始】:指數增長
【擁塞避免?】:當cwnd=ssthresh時,每次加1
【慢開始】:當發送超時重傳,將ssthresh=cwnd/2,cwnd=1
【快重傳+快恢復】示例
4.?序列號
序列號:TCP給發送的每一個包都進行編號,接收方對數據包進行排序,把有序數據傳送給應用層,TCP的接收端會丟棄重復的數據。
5.?超時重傳
問題:A給B發送數據,A 如何知道 B 是否正確收到了 M1 呢?
解決方法:超時重傳
- A 為每一個已發送的分組設置一個超時計時器。
- A 只要在超時計時器到期之前收到了相應的確認,就撤銷該超時計時器,繼續發送下一個分組 M2 。
- 若 A 在超時計時器規定時間內沒有收到 B 的確認,就認為分組錯誤或丟失,就重發該分組。
6. 停止等待協議
它的基本原理就是每發完一個分組就停止發送,等待對方確認。在收到確認后再發下一個分組。