TCP為什么要三次握手,而不是兩次或四次?
TCP連接時用于保證可靠性和流量控制維護的某些狀態(tài)信息,這些信息的組合,包括Socket,序列號和窗口大小稱為連接。
以上三個方面分析三次握手原因:
三次握手才可以阻止重復歷史連接的初始化(主要原因)
首要原因為了防止舊的重復連接初始化造成混亂
網絡堵塞情況下,如果一個舊的SYN報文比新的SYN報文早到達了服務端,那么此時服務端就會回一個SYN+ACK報文給客戶端,此時報文中的確認號是91(90+1).
客戶端收到后發(fā)現(xiàn)自己期望收到的確認號應該是100+1而不是91,于是就會回RST報文。
服務端收到RST報文后就會釋放連接。
后續(xù)最新的SYN抵達服務端后就完成正常的三次握手。
舊的SYN報文成為歷史連接,TCP三次握手最主要的原因就是防止歷史連接初始化了連接。
兩次握手情況下,服務端沒有中間狀態(tài)給客戶端阻止歷史連接,導致服務端可能建立一個歷史連接造成資源浪費。
上圖可見,服務端在向客戶端發(fā)送數(shù)據(jù)前并沒有阻止歷史連接,導致服務端建立了一個歷史連接,又白白發(fā)送數(shù)據(jù),浪費了服務端資源。
因此解決這種現(xiàn)象最好的就是在服務端發(fā)送數(shù)據(jù)前也就是建立連接前組織掉歷史連接,要是實現(xiàn)這個功能就要三次握手
同步雙方初始序列號
序列號作用:接收方可以去除重復數(shù)據(jù),接收方可以根據(jù)數(shù)據(jù)包的序列號按序接受,可以標識發(fā)送出去的數(shù)據(jù)包那些已經被對方收到了(ACK)
四次握手也能夠可靠的同步雙方的初始化序號,但第二步和第三步可以優(yōu)化成異步,所以成了三次握手。
而兩次握手只保證了一方的初始序列號能被對方成功接收。
避免資源浪費
兩次握手,如果客戶端發(fā)送的SYN報文在網絡堵塞了,重復發(fā)送多次SYN報文,那么服務端在收到請求后就會建立多個冗余的無效鏈接,重復分配資源,造成不必要的資源浪費。文章來源:http://www.zghlxwxcb.cn/news/detail-425789.html
小結
TCP建立連接,通過三次握手能防止歷史連接的建立,減少雙方不必要的資源開銷,能幫助雙方同步初始化序列號。序列號能保證數(shù)據(jù)包不重復,不丟序和按序傳輸。
不使用「兩次握手」和「四次握手」的原因:文章來源地址http://www.zghlxwxcb.cn/news/detail-425789.html
- 「兩次握手」:無法防止歷史連接的建立,會造成雙方資源的浪費,也無法可靠的同步雙方序列號;
- 「四次握手」:三次握手就已經理論上最少可靠連接建立,所以不需要使用更多的通信次數(shù)。
到了這里,關于TCP為什么要三次握手,而不是兩次或四次?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!