TCP 報文是 TCP 層傳輸的數據單元,也叫報文段。 TCP 報文的格式如下圖所示
我們從 TCP 的報文格式中能看到 6 個标志位:URG ACK PSH RST SYN FIN,每一個标志位表示一個控制功能。
TCP 的連接和斷開的過程和這幾個标志位有關
TCP分段中6個編碼位的含義
當值設為1時,表示分段中包含相應的控制信息 | |
編碼位(從左到右)的标識 |
該位置“為1”的含義 |
URG |
表示啟用了緊急指針字段 |
ACK |
表示确認字段是有效的 |
PSH |
請求急迫操作,即分段一到馬上送應用程序而不等到接收緩沖區滿時才送應用程序 |
RST |
連接複位。複位因主機崩潰或其他原因而出現錯誤的連接,也可用于拒絕非法的分段或拒絕連接請求 |
SYN |
與ACK合用以建立TCP連接。如SYN=1, ACK=0表示連接請求;而SYN=1,ACK=1表示同意建立連接 |
FIN |
表示發送方已無數據要發送從而釋放連接,但接收方仍可繼續接收發送方此前發送的數據 |
實驗所需工具:
在客戶機上連接服務器的 FTP 服務:在客戶機上啟動 Sniffer, 然後在 DOS 命令下使用 FTP 指令連接服務器的 FTP 服務器,如圖
默認情況下,FTP 服務器支持匿名訪問,輸入的用戶命是 ftp,密碼是 ftp。退出對方 的 ftp 使用的命令是 bye。停止 Sniffer,查看抓取的 FTP 會話過程
觀察抓取到的 TCP 的三次握手的過程
第 1 次握手:由客戶機的應用層進程向其傳輸層 TCP 協議發出建立連接的命令,則客戶 機 TCP 向服務器上提供某特定服務的端口發送一個請求建立連接的報文段,該報文段中 SYN 被置 1,同時包含一個初始序列号 x(系統保持着一個随時間變化的計數器,建立連接時該 計數器的值即為初始序列号,因此不同的連接初始序列号不同)
第 2 次握手:服務器收到建立連接的請求報文段後,發送一個包含服務器初始序号 y,SYN 被置 1,确認号(ACK)置為 x 1 的報文段作為應答。确認号加 1 是為了說明服務器已正确收到一個 客戶連接請求報文段,因此從邏輯上來說,一個連接請求占用了一個序号
第 3 次握手:客戶機收到服務器的應答報文段後,也必須向服務器發送确認号(ACK)為 y 1 的 報文段進行确認。同時客戶機的 TCP 協議層通知應用層進程,連接已建立,可以進行數據傳輸了。 完成三次握手,客戶端與服務器開始傳送數據
TCP三次握手如圖所示
觀察抓取到的 TCP 的四次揮手的過程
第 1 次揮手:由客戶機的應用進程向其 TCP 協議層發出終止連接的命令,則客戶 TCP 協議層向服務器 TCP 協議層發送一個 FIN 被置 1 的關閉連接的 TCP 報文段
第 2 次揮手:服務器的 TCP 協議層收到關閉連接的報文段後,就發出确認,确認号為 已收到的最後一個字節的序列号加 1,同時把關閉的連接通知其應用進程,告訴它客戶機已經終止了數據傳送。在發送完确認後,服務器如果有數據要發送,則客戶機仍然可以繼續接收數據,因此把這種狀态叫半關閉(Half-close)狀态,因為服務器仍然可以發送數據,并 且可以收到客戶機的确認,隻是客戶方已無數據發向服務器了
第 3 次揮手:如果服務器應用進程也沒有要發送給客戶方的數據了,就通告其 TCP 協議層關閉連接。這時服務器的 TCP 協議層向客戶機的 TCP 協議層發送一個 FIN 置 1 的 報文段,要求關閉連接。
第 4 次揮手:同樣,客戶機收到關閉連接的報文段後,向服務器發送一個确認,确認号為已 收到數據的序列号加 1。當服務器收到确認後,整個連接被完全關閉。
如下圖所示,這就是 TCP 的四次揮手
知識補充
TCP連接的拒絕建立
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!