1. 程式人生 > 其它 >linux高效能伺服器程式設計---第三章 TCP協議詳解

linux高效能伺服器程式設計---第三章 TCP協議詳解

Tcp讀寫都是針對緩衝區來說, 所以沒有固定的讀寫次數對應關係.

UDP沒有緩衝區, 必須及時接受資料否則會丟包, 或者接收緩衝區過小就會造成資料報截斷

ISN-初始序號值 32位序號 後續的TCP報文段中序號值 seq = ISN + 報文段首位元組在整個位元組流中的偏移 32位確認號 收到的TCP報文序號值+1. 這個32位確認號每次傳送的是上一次的應答

ACK標誌: 表示確認號是否有效. 攜帶ACK標誌的報文段稱為確認報文段 PSH標誌: 提示接收端應用程式從TCP接受緩衝區中讀走資料, 為後續資料騰出空間 RST標誌: 要求對方重新建立連線 攜帶......復位報文段 SYN標誌: 標誌請求建立一個連線 攜帶......同步報文段

 FIN標誌: 通知對方本端連線要關閉了, 攜帶..結束報文段

16位視窗大小: 視窗指的是接收通告視窗, 告訴對方本端的TCP 接收緩衝區還能容納多少位元組的資料 16位校驗和: 可靠傳輸的重要保障傳送端填充, 接收端執行CRC演算法校驗是否損壞, 同時校驗TCP頭部資料部分

TCP連線的建立和關閉

# 三次握手
# 客戶端傳送請求連線 ISN=seq + 0 = 3683340920
# mss 最大資料載量1460
IP 192.168.80.1.7467 > ubuntu.8000: 
Flags [S], seq 3683340920, win 64240, 
options [mss 1460
,nop,wscale 8,nop,nop,sackOK], length 0 # 同意客戶端連線 # ack = 客戶端傳送 seq + 1 # 同時傳送服務端的seq IP ubuntu.8000 > 192.168.80.1.7467: Flags [S.], seq 938535101, ack 3683340921, win 64240, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 # 雖然這個報文段沒有位元組 但由於是同步報文段 需要佔用一個序號值 # 這裡是tcpdump的處理 ack顯示相對值 即 3683340921
- 3683340920 = 1 IP 192.168.80.1.7467 > ubuntu.8000: Flags [.], ack 938535102, win 4106, length 0 # 包含FIN標誌 說明要求結束連線 也需要佔用一個序號值 IP 192.168.80.1.7467 > ubuntu.8000: Flags [F.], seq 1, ack 1, win 4106, length 0 # 服務端確認關閉連線 IP ubuntu.8000 > 192.168.80.1.7467: Flags [.], ack 2, win 502, length 0 # 服務端傳送關閉連線 IP ubuntu.8000 > 192.168.80.1.7467: Flags [F.], seq 1, ack 2, win 4105, length 0 # 客戶端確認 IP 192.168.80.1.7467 > ubuntu.8000: Flags [.], ack 2, win 503, length 0