TCP三次握手 && 為什么是三次握手

三次握手在正式情況下都做了什么呢??

第一次握手:

客戶端發(fā)送一個TCP的SYN標志位置1的包指明客戶打算連接的服務器的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段里

發(fā)送完成,客戶端進入SYN_SENT狀態(tài),等待服務端確認;

第二次握手?:

服務器發(fā)回確認包(ACK)應答。即SYN標志位和ACK標志位均為1同時,將確認序號(Acknowledgement Number)設置為客戶的I S N加1以.即X+1。

數(shù)據(jù)包發(fā)送給客戶端A以確認連接請求,服務端B進入SYN_RCVD狀態(tài)。


第三次握手

客戶端再次發(fā)送確認包(ACK) SYN標志位為0,ACK標志位為1.并且把服務器發(fā)來ACK的序號字段+1,放在確定字段中發(fā)送給對方.并且在數(shù)據(jù)段放寫ISN的+1

服務端檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,客戶端A和服務端B進入ESTABLISHED狀態(tài),完成三次握手,隨后客戶端與服務端之間可以開始傳輸數(shù)據(jù)了。


為何三次握手,而不是二次或者四次哪

想明白這一點,必須首先明白,三次握手的分別意義是什么

首先第一次握手,客戶端發(fā)送SYN(同步序列編號Synchronize Sequence Numbers),其實是一個隨機的數(shù)字,其意義就在于確認

服務端是否可以接受到客戶端發(fā)送的消息。

第二次握手,服務端發(fā)送SYN+ACK(確認字符Acknowledge character)數(shù)據(jù)到客戶端,注意這個數(shù)據(jù)包的名字叫SYN/ACK,只所以叫這個名字,就是因為它包含了兩個數(shù)據(jù),

并且兩個數(shù)據(jù)所起到的作用不同,SYN是作為同步序號請求確認,ACK則是回復客戶端請求確認信息。

第三次握手,客戶端發(fā)送ACK數(shù)據(jù),在發(fā)送數(shù)據(jù)之前,客戶端至少要做兩件事,一件事是檢查收到ACK數(shù)據(jù)是否正常,如果正常則回復服務端

的請求確認數(shù)據(jù)SYN一個ACK,這個數(shù)據(jù)值也就是SYN值+1,雙方確認完畢,則表示已經(jīng)建立起了可靠的連接,可以相互傳送數(shù)據(jù)。

雙向通信協(xié)議:

除了以上三次握手的意義,還需要了解一點,TCP是一個雙向通訊協(xié)議,也就是不單單客戶端可以主動發(fā)送消息,服務端也可以主動發(fā)送消息,

這就需要做到一點,就是消息確認是雙向的,不能只是單向的。

解釋:

為什么不是二次或者四次握手

當只有兩次握手時,客戶端已經(jīng)確認了消息可以發(fā)送到服務端,并且可以接收到了服務端的消息。但是對于服務端來說,它并不能確認,

自己主動發(fā)出的消息,能不能被客戶端收到。因此不能兩次握手,因為服務端主動發(fā)送消息,不可靠。

當是四次握手時,就會造成不必要的資源浪費,影響傳輸?shù)男?,三次握手已?jīng)可以保證信息傳輸?shù)目煽啃粤?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容