在學習 TCP 連接之前,還要學習一下 TCP 頭部格式。因為 TCP 連接建立,需要用 TCP 包來交換和管理數據,下面看一下 TCP頭部格式。
TCP 頭部里每個字段都為管理 TCP 連接和控制數據流起了重要作用。
16 位端口號:告知主機該報文段是來自哪里(源端口)以及傳給哪個上層協議或應用程序(目的端口)的。
進行 TCP 通信時,客戶端通常使用系統自動選擇的臨時端口號,而服務器則使用知名服務端口號。所有知名服務使用的端口號都定義在/etc/services 文件中。
32 位序號(sequence number):一次 TCP 通信(從 TCP 連接建立到斷開)過程中個傳輸方向上的字節流的每個字節的編號。
32 位確認號(acknowledgement number):用作對另一方發送來的 TCP 報文段的響應其值是收到的 TCP 報文段的序號值加1。
4 位頭部長度(header length):標識該 TCP 頭部有多少個 32bit ( 4 Byte 因為最大能表示 15 ,所以 TCP頭部最長是 60 Byte。
6 位標志位包含如下幾項:
URG 標志,表示緊急指針是否有效。
ACK 標志,表示確認號是否有效,一般稱攜帶 ACK 標志的 TCP 報文段為“確認報文段”。
PSH 標志,提示接收端應用程序應該立即從 TCP 接收緩沖區中讀走數據,為接收后續數據騰出空間(如果應用程序不將接收到的數據讀走,它們就會直停留在TCP 接收緩沖區中)。
RST 標志,表示要求對方重新建立連接,一般稱攜帶 RST 標志的 TCP 報文段為“復位報文段”。
SYN 標志,表示請求建立 個連接,一般稱攜帶 SYN 標志的 TCP 報文段為“同步報文段”。FIN 標志,表示通知對方本端要關閉連接了,一般稱攜帶FIN 標志的 TCP 報文段為“結束報文段”。
16 位窗口大?。╳indow size):是 TCP 流量控制的一個手段。這里說的窗口,指的是接收通告窗口( Receiver Window,RWND)。它告訴對方本端的 TCP 接收緩沖區還能容納多少字節的數據,這樣方就可以控制發送數據的速度。
16 位校驗和(TCP checksum):由發送端填充,接收端對 TCP 報文段執行 CRC 算法,以檢驗 TCP 報文段在傳輸過程中是否損壞。注意,這個校驗不僅包括 TCP 頭部,也包括數據部分。這也是 TCP 可靠傳輸的一個重要保障。
16 位緊急指針(urgent pointer):是一個正的偏移量。它和序號字段的值相加表示最后一個緊急數據的下一字節的序號。確切地說,這個字段是緊急指針相對當前序號的偏移,不妨稱之為“緊急偏移”。TCP 的緊急指針是發送端向接收端發送緊急數據的方法。
綜上,你需要注意如下幾點:
TCP 的包是沒有 IP 地址的,那是 IP 層上的事,但是有源端口和目的端口。
一個TCP 連接需要四元組( src_ip,src_port,dst_ip,dst_port )來表示是同一個連接 準確說是五元組,還有一個是協議但因為這里只是強調 TCP 協議,所以,只說四元組。
Sequence Number 是包的序號,用來解決網絡包亂序(reordering )問題。
Acknowledgement Number 就是 ACK ,用于確認收到,用來解決不丟包的問題。
Window Advertised Window ,也就是著名 的滑動窗口 Sliding Window ),用于解決流量控制問題。
TCP Flag ,也就是包的類型,主要是用于操控 TCP 的狀態機的。
-
通信
+關注
關注
18文章
6042瀏覽量
136142 -
網絡
+關注
關注
14文章
7580瀏覽量
88942 -
TCP
+關注
關注
8文章
1372瀏覽量
79142 -
接收端
+關注
關注
0文章
20瀏覽量
8516
發布評論請先 登錄
相關推薦
評論