1、TCP三次握手(1)第一次握手:客戶端的端口為57063,服務(wù)器端口為80;
客戶端向服務(wù)器請求建立連接,發(fā)送其TCP數(shù)據(jù)報,數(shù)據(jù)方向 57063 -> 80;
數(shù)據(jù)報中,SYN=1,是一個建立連接的信號;ACK=0,沒有開啟序號確認;
客戶端的Sequence number為一個隨機值x=1926459878,其上面一行為相對序號;Acknowledgment number :0;
(2)第二次握手:服務(wù)器收到請求,回復(fù)客戶端,數(shù)據(jù)方向 80 -> 57063;
SYN=1,服務(wù)器連接允許;
ACK=1,客戶端收到之后要驗證(x+1)=Acknowledgment number;
服務(wù)器表示已經(jīng)接收到x=1926459878,并說明下次要收到(x+1),即Acknowledgment number=1926459879;
服務(wù)器發(fā)送自己的Sequence number,也是一個隨機值,y=980795485;
(3)第三次握手:客戶端驗證 自己的Sequence number+1=1926459879,和ACK=1;
若驗證成功,向服務(wù)器發(fā)送數(shù)據(jù)報,數(shù)據(jù)方向 57063 -> 80;
數(shù)據(jù)報中,SYN=0,表明最后的確認;
ACK=1,服務(wù)器收到報之后要驗證,驗證值(y+1)=980795486=Acknowledgment number;
客戶端回復(fù)服務(wù)器期望值Sequence number=(x+1)=1926459879;
服務(wù)器收到報之后,確認 自己的Sequence number+1=980795486,ACK=1;
若驗證成功,則一次TCP連接建立,可以通信了。
2、四次揮手圖中,客戶端的IP地址為:192.168.99.30;服務(wù)器的地址為:154.8.190.35。
一次TCP連接斷開以后,再次連接同一個服務(wù)器需要重新握手連接,并且重新分配端口號。
下面對圖中第一次斷開進行分析,第一個FIN前,客戶端向服務(wù)器發(fā)了最后一個包。
包中,Sequence number=1392,Acknowledgment number=607(為了方便均取相對值)。
(1)第一次揮手:客戶端申請斷開連接,向服務(wù)器發(fā)送數(shù)據(jù)報;
FIN=0,客戶端表明自己沒有數(shù)據(jù)要發(fā)了,申請斷開連接;
ACK=1,服務(wù)器收到包之后要驗證Acknowledgment number;
Sequence number=1392,因為上一個包Seq=1392,Len=0;
Acknowledgment number=607,因為上一個Ack=607,期間又沒有收到服務(wù)器的數(shù)據(jù);
(2)第二、三次揮手:服務(wù)器回復(fù)客戶端;
第二次揮手是服務(wù)器告訴客戶端我收到了你要斷開的請求,但我可能還有數(shù)據(jù)沒發(fā)完,你等我后面通知,F(xiàn)IN=0;
第三次揮手是服務(wù)器也完成了數(shù)據(jù)傳送,告知客戶端我也完事了,F(xiàn)IN=1;
圖中客戶端申請斷開時、恰好服務(wù)器也沒有數(shù)據(jù)要發(fā),于是第二、三次揮手的包合并了。
服務(wù)器收到包,驗證ACK=1,自己要發(fā)的下一個包的序號=607;
驗證成功,答復(fù)客戶端:
Sequence number=607;
Acknowledgment number=1393,ACK=1;表明客戶端收到之后也要驗證要發(fā)的下一個包序為1393;
FIN=0。
(4)第四次揮手:客戶端收到包,驗證ACK=1,自己要發(fā)的下一個包序=1393;
驗證成功,答復(fù)服務(wù)器:
Sequence number=1393;
Acknowledgment number=608,ACK=1;表示服務(wù)器收到之后要驗證自己下一個包序=608;
FIN=0;
客戶端發(fā)送完等待一段時間后關(guān)閉;
服務(wù)器收到包驗證ACK=1、下一個包序=608,驗證成功,服務(wù)器關(guān)閉。