TCP之「3次握手,4次揮手」問題 例項分析

2022-06-26 08:09:16 字數 3064 閱讀 8831

我們可以通過網路抓包的檢視具體的流程:

比如我們伺服器開啟9502的埠。使用tcpdump來抓包:

一、 三次握手連線過程分析

tcpdump -iany tcp port 9502

然後我們使用 telnet 127.0.0.1 9502 開連線.:

telnet 127.0.0.1 9502

14:12:45.104687 ip localhost.39870 > localhost.9502: flags [s], seq 2927179378, win 32792, options [mss 16396,sackok,ts val 255474104 ecr 0,nop,wscale 3], length 0(1)

14:12:45.104701 ip localhost.9502 > localhost.39870: flags [s.], seq 1721825043, ack 2927179379, win 32768, options [mss 16396,sackok,ts val 255474104 ecr 255474104,nop,wscale 3], length 0 (2)

14:12:45.104711 ip localhost.39870 > localhost.9502: flags [.], ack 1, win 4099, options [nop,nop,ts val 255474104 ecr 255474104], length 0 (3)

資料傳送:

14:13:01.415407 ip localhost.39870 > localhost.9502: flags [p.], seq 1:8, ack 1, win 4099, options [nop,nop,ts val 255478182 ecr 255474104], length 7

14:13:01.415432 ip localhost.9502 > localhost.39870: flags [.], ack 8, win 4096, options [nop,nop,ts val 255478182 ecr 255478182], length 0

14:13:01.415747 ip localhost.9502 > localhost.39870: flags [p.], seq 1:19, ack 8, win 4096, options [nop,nop,ts val 255478182 ecr 255478182], length 18

14:13:01.415757 ip localhost.39870 > localhost.9502: flags [.], ack 19, win 4097, options [nop,nop,ts val 255478182 ecr 255478182], length 0

【注釋】

1.1、鏈結(無資料傳輸)分析

三步是建立tcp:

第一次握手:

14:12:45.104687 ip localhost.39870 > localhost.9502: flags [s], seq 2927179378

客戶端ip localhost.39870 (客戶端的埠一般是自動分配的) 向伺服器localhost.9502 傳送syn包(syn=j)到伺服器》

syn包(syn=j) : syn的seq= 2927179378  (j=2927179378)

第二次握手:

14:12:45.104701 ip localhost.9502 > localhost.39870: flags [s.], seq 1721825043, ack 2927179379,

收到請求並確認:伺服器收到syn包,並必須確認客戶的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包:

此時伺服器主機自己的syn:seq:y= syn seq 1721825043。

ack為j+1 =(ack=j+1)=ack 2927179379 

第三次握手:

14:12:45.104711 ip localhost.39870 > localhost.9502: flags [.], ack 1,

客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1)

客戶端和伺服器進入established狀態後,可以進行通訊資料互動。此時和accept介面沒有關係,即使沒有accepte,也進行3次握手完成。

連線出現連線不上的問題,一般是網路出現問題或者網絡卡超負荷或者是連線數已經滿啦。

1.2、資料傳送分析

ip localhost.39870 > localhost.9502: flags [p.], seq 1:8, ack 1, win 4099, options [nop,nop,ts val 255478182 ecr 255474104], length 7

客戶端向伺服器傳送長度為7個位元組的資料,

ip localhost.9502 > localhost.39870: flags [.], ack 8, win 4096, options [nop,nop,ts val 255478182 ecr 255478182], length 0

伺服器向客戶確認已經收到資料

ip localhost.9502 > localhost.39870: flags [p.], seq 1:19, ack 8, win 4096, options [nop,nop,ts val 255478182 ecr 255478182], length 18

然後伺服器同時向客戶端寫入資料。

ip localhost.39870 > localhost.9502: flags [.], ack 19, win 4097, options [nop,nop,ts val 255478182 ecr 255478182], length 0

客戶端向伺服器確認已經收到資料

這個就是tcp可靠的連線,每次通訊都需要對方來確認。

over...

參考:1. linux的socket程式設計詳解

TCP協議3次握手和4次揮手

一 tcp通訊過程 tcp是tcp ip體系中面對連線的傳輸層協議,採用多種機制來確保資料的可靠性。其中為了確保tcp成功連線和斷開,tcp採用了一種三次握手和四次揮手的機制。過程如下所示 三次握手成功後,成功建立連線,然後開始傳輸資料資訊,最後斷開連線。這是tcp傳輸的步驟!二 tcp三次握手 t...

TCP的3次握手與4次揮手

三次握手建立連線 如上圖 黑框 所示,在最初兩端的tcp程序都處於closed狀態。host1主動開啟連線,而host2被動開啟連線。四次揮手取消連線 如上圖中藍色框的所示,在資料傳輸完畢後,host1和host2都處於established狀態,每個伺服器都能發出釋放鏈結的訊號,我們在這以host...

TCP的3次握手和4次揮手

三次握手建立連線 如上圖 黑框 所示,在最初兩端的tcp程序都處於closed狀態。host1主動開啟連線,而host2被動開啟連線。host2的tcp伺服器程序優先建立傳輸控制塊tcb,準備接受客戶程序的連線請求,然後將自己的狀態有colsed改為listen 收聽 狀態,等待客戶的連線請求 ho...