TCP建立連接為什么是三次握手,為什么不是兩次或四次?


什么是三次握手

學過網絡編程的人,應該都知道TCP建立連接的三次握手,下面簡單描述一下這個過程。
這里寫圖片描述

如圖所示
第一次握手:客戶端發送TCP包,置SYN標志位為1,將初始序號X,保存在包頭的序列號(Seq)里。
第二次握手:服務端回應確認包,置SYN標志位為1,置ACK為X+1,將初始序列號Y,保存在包頭的序列號里。
第三次握手:客戶端對服務端的確認包進行確認,置SYN標志位為0,置ACK為Y+1,置序列號為Z。

為什么不是兩次

我們先來將三次握手這個過程捋一遍。(S-服務端,C-客戶端)

第一次握手后,S可以確認自己收報文與C發報文的功能都正常,而C呢,它什么都不能確認。
第二次握手后,C可以確認自己的收發報文與S的收發報文功能都正常,也就是認為連接已建立。
那么第三次呢,S也可以確認雙方能夠正常通信。

假想一下,如果我們去掉了第三次呢?
因為我們不進行第三次握手,所以在S對C的請求進行回應(第二次握手)后,就會理所當然的認為連接已建立,而如果C並沒有收到S的回應呢?此時,C仍認為連接未建立,S會對已建立的連接保存必要的資源,如果大量的這種情況,S會崩潰。
因此第三次握手是必要的。

為什么不是四次

首先,如果樂於思考的同學應該會對上面有這樣的疑問:

既然沒法確認第二次的握手,C是否可以收到,
那么怎么確定第三次握手S就可以收到呢?

不錯,這根本沒法確定,因為完全可靠的通信協議是根本不存在的,我們任何的通信協議都是在接受這樣的現實情況之上進行的。
而三次握手后,C和S至少可以確認之前的通信情況,但無法確認之后的情況。
在這個道理上說,無論是四次還是五次或是更多次都是徒勞的

本文轉載於:https://blog.csdn.net/to_be_better/article/details/54885684


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM