TCP的三次握手及為什麼要有三次握手

2021-09-28 22:42:32 字數 1443 閱讀 9319

tcp有6種標示位,即位碼,syn(synchronous建立聯機),ack(acknowledgement 確認),psh(push 傳送),fin(finish 結束),rst(reset 重置),urg(urgent緊急),sequence number(順序號),acknowledge number(確認號)

第一次握手:主機a向主機b傳送syn=1和隨機產生的seq number = 12441234的資料報

第二次握手:主機b收到請求後確認建立聯機資訊,然後向a傳送ack number = (主機a的seq+1), syn=1,ack = 1,隨機產生seq = 7654321的包

第三次握手:主機a收到後檢查主機b返回的ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機a會再次傳送ack number = (主機b seq number+1), ack = 1,主機b收到後確認seq值與ack=1則連線建立成功

最後完成連線

例項:

ip 192.168.1.116.3337 > 192.168.1.123.7788: s 3626544836:3626544836

ip 192.168.1.123.7788 > 192.168.1.116.3337: s 1739326486:1739326486 ack 3626544837

ip 192.168.1.116.3337 > 192.168.1.123.7788: ack 1739326487,ack 1

第一次握手:192.168.1.116的主機傳送syn=1發出建立聯機的請求,同時產生為3626544836的seq number

第二次握手:192.168.1.123的主機收到192.168.1.116發出的聯機請求,向192.168.1.116傳送ack number為3626544837,ack = 1,syn = 1,隨機產生的seq 1739326486的包

第三次握手:192.168.1.116主機收到192.168.1.123主機返回的ack number是否正確及第一次傳送的seq number+1,以及位碼ack是否為1,若正確,則繼續向192.168.1.123傳送ack number = 1739326487,ack = 1的包,192.168.1.123收到包後確認seq = seq+1,ack = 1則建立連線成功

如果只有兩次握手的話,中間連線請求的資料報丟失,導致client要重發一次請求; 這時servlet端僅收到乙個連線請求,因此可以正常連線; 但如果不是因為資料報丟失,而是因為阻塞了,這個情況下server端將先後收到兩次請求,並持續等待兩個2個client端請求向他傳送資料,因此,client端實際上只有一次請求,而server端卻有兩個響應,這種情況可能導致client端多次傳送請求而導致server端建立n多個響應在等待,因而造成極大資源浪費

為什麼要四次揮手

什麼是TCP 三次握手及為什麼進行三次握手?

tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個 syn置位的 tcp報文,其中包含連線的初始序列號 x和乙個視窗大小 表示客戶端上用來儲存從伺服器...

TCP為什麼三次握手

tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個 syn置位的 tcp報文,其中包含連線的初始序列號 x和乙個視窗大小 表示客戶端上用來儲存從伺服器...

TCP為什麼三次握手

1 第一次握手 客戶端向伺服器端傳送tcp報文請求建立連線,其中 標記位為syn 1 序號為seq x 2 第二次握手 服務端收到資訊後知道自己與客戶端是可以連線成功的,但此時客戶端並不知道服務端是否已經接收到了它的請求,所以服務端接收到訊息後進行應答,這就是第二次握手,其中 標記位為syn 1,a...