TCP-IP詳解筆記8: TCP傳輸控制協議
阿新 • • 發佈:2018-12-18
TCP提供一種面向連線的、可靠的位元組流服務。
TCP將使用者資料打包構成報文段;它傳送資料後啟動一個定時器;另一端對收到的資料進行確認,對失序的資料重新排序,丟棄重複資料;TCP提供端到端的流量控制,並計算和驗證一個強制性的端到端檢驗和
TCP首部
- TCP為應用層提供全雙工服務,因此,資料能在兩個方向上獨立地傳輸。連線的每一段都必須保持每個方向上的傳輸資料序號。
- 首部長度: 多少個32bit的數目, 因此,4位首部長度標識了TCP首部最多(2<<4 - 1) * 4B = 60B。沒有選項的話,長度是20位元組。
-
- URG 緊急指標
- ACK 確認序號有效
- PSH 接收方要儘快交報文給應用層
- RST 重建連線
- 同步序號,用來發起一個連線。
- FIN 傳送端完成傳送任務。
TCP連線的建立和終止
curl baidu.com <html> <meta http-equiv="refresh" content="0;url=http://www.baidu.com/"> </html> tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 14:28:24.750037 IP own.38186 > 123.125.115.110.http: Flags [S], seq 2832499680, win 14600, options [mss 1460,sackOK,TS val 1537447629 ecr 0,nop,wscale 6], length 0 14:28:24.791235 IP 123.125.115.110.http > own.38186: Flags [S.], seq 1751808781, ack 2832499681, win 8192, options [mss 1452,sackOK,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,wscale 5], length 0 14:28:24.791286 IP own.38186 > 123.125.115.110.http: Flags [.], ack 1, win 229, length 0 14:28:24.791687 IP own.38186 > 123.125.115.110.http: Flags [P.], seq 1:163, ack 1, win 229, length 162 14:28:24.836821 IP 123.125.115.110.http > own.38186: Flags [.], ack 163, win 808, length 0 14:28:24.836866 IP 123.125.115.110.http > own.38186: Flags [P.], seq 1:306, ack 163, win 808, length 305 14:28:24.836876 IP own.38186 > 123.125.115.110.http: Flags [.], ack 306, win 245, length 0 14:28:24.836883 IP 123.125.115.110.http > own.38186: Flags [P.], seq 306:387, ack 163, win 808, length 81 14:28:24.836889 IP own.38186 > 123.125.115.110.http: Flags [.], ack 387, win 245, length 0 14:28:24.837176 IP own.38186 > 123.125.115.110.http: Flags [F.], seq 163, ack 387, win 245, length 0 14:28:24.880084 IP 123.125.115.110.http > own.38186: Flags [.], ack 164, win 808, length 0 14:28:24.880115 IP 123.125.115.110.http > own.38186: Flags [F.], seq 387, ack 164, win 808, length 0 14:28:24.880133 IP own.38186 > 123.125.115.110.http: Flags [.], ack 388, win 245, length 0 14:28:27.920615 IP 123.125.115.110.http > own.38186: Flags [R], seq 1751809169, win 0, length 0
過程如圖:
終止協議, 4次握手
TCP全雙工,所以,每個方向必須單獨地關閉。
最大報文長度
- MMS, 建立連線時,互相告知自己的MSS. 例子中的
[mss 1460,sackOK,TS val 1537447629 ecr 0,nop,wscale 6]
, MMS為1460 - MMS選項只能在SYN報文段中出現。
- MMS值可以設定為MTU減去固定的IP首部、TCP首部長度。
- 限制另一端傳送資料報的長度。使用較小的MTU。
TCP半關閉
為了資料傳輸完成
TCP狀態遷移圖
MSL
MSL 報文最大生存時間(Maximum segment lifetime)
TIME_WAIT狀態也稱為 2MSL等待狀態。
TCP選項
時延確認, 時延必須小於500
Nagle演算法, 每次只能有一個未確認的報文段。
滑動視窗協議
該協議允許傳送方在停止並等待確認前可以連續傳送多個分組。
傳送方不必每發一個分組就停下來等待確認, 因此,可以加速資料的傳輸。
滑動視窗例子:
停止等待協議
滑動視窗大小為1,通道中每次只能有一個分組或是一個確認。
序號和確認號:
確認號總是宣告接收方預期接收的下一個分組序號。如0號分組已經安全到達, 接收方傳送一個確認號為1的ACK
傳送視窗
三個變數定義了視窗的大小和位置。Sf(未完成的分組),Sn(下一個待發送分組),S(size, 大小)
差錯控制
- 校驗和
- 確認
- 選擇性確認
- 重傳。
擁塞控制
cwnd 擁塞視窗
TCP傳送方使用一種反饋從另一端檢測擁塞: ACK。
- 沒有周期性的及時的接收到ACK,則是嚴重擁塞
- 接到三次重複的ACK,是輕微擁塞。
處理擁塞的方法:慢啟動,擁塞避免和快速恢復。
慢啟動:
指數增加:
- cwnd = 1
- 1 + 1 = 2
- 2 + 2 = 4
通過觀察到新分組進入網路的速率應該與另一端返回確認的速率相同而進行工作。 慢啟動,指數級增長。
擁塞避免
加性增加
- cwnd = i
- cwnd = i+1
- cwnd = i+2
快速恢復
cwnd = cwnd + (1/cwnd)
流量控制
接收方TCP控制傳送方TCP, 傳送方TCP控制傳送方程序。反向控制。
TCP堅持定時器
意義
一個ACK丟失,傳送方和接收方可能因為等待對方而使連線終止:接收方等待接受資料, 傳送方等待允許它繼續傳送資料的視窗更新。
為了防止出現這種死鎖情況, 傳送方使用一個堅持定時器,週期性的向接收方查詢視窗,以便發現視窗是否增大。
報文段稱為視窗探查。