MTU = MSS + TCP頭 + IP頭 TCP頭:20字節 IP頭:20字節 MTU:1500字節(以太網決定)採用巨幀(Jumbo Frame)能達到9000字節。
Seq:該數據段的序號 Len:該數據段的長度 Ack:接收方的確認號(各自維護) Seq = 上一個Seq + Len Ack = Seq + Len 理論上,接收方回覆的Ack = 下一個發送方的Seq SYN:正在發起鏈接請求(由於鏈接是雙向的,因此雙方都要發一個SYN) FIN:正在請求終止鏈接 RST:重置混亂鏈接或拒絕無效請求
A --> B: [SYN] Seq=x B --> A: [SYN, ACK] Seq=y, Ack=x+1 A --> B: [ACK] Seq=x+1, Ack=y+1
* 咱們提到滑動窗口(slide window) 指的是發送方維護的窗口 * 窗口的左側是:「成功發送、並已經被接收方確認的字節序列號」 * 窗口的右側是:「發送方目前能夠發送的最大字節序列號」 * Window size = 窗口右側 - 窗口左側 * 當滑動窗口的左側與右側徹底重合,則意味着接收方通告發送方 window size = 0 ,發送方就要暫時中止數據的發送。直到對方TCP buffer有空餘的空間,告訴發送方新的 window size,或者發送方主動去查詢是否能夠發送數據。 # window size: * 接收方向發送方聲明本身的接收窗口(若接收方處理緩慢,緩存佔滿,此時WIN=0) * 接收方告訴發送方本身還有多少緩衝區能夠接收數據 * TCP傳輸速率不能大於應用的數據處理速率
實際窗口的大小是接收窗口和擁塞窗口的較小值
TCP引入了RTT——Round Trip Time,也就是一個數據包從發出去到回來的時間。這樣發送端就大約知道須要多少的時間,從而能夠方便地設置Timeout——RTO(Retransmission TimeOut),以讓咱們的重傳機制更高效。
臨界窗口值:數組
超時重傳:發送方在發送後一段時間內沒收到確認,則須要從新傳輸。緩存
快速重傳:網絡
Wireshark -> Analyze -> Expert Info Composite #能夠查看重傳包丟包對小文件的影響大於大文件。小文件可能湊不到3個Dup Ack,致使超時重傳。tcp
SACK(RFC2018定義):ide
接收方經過「More fragments」參數組裝包;性能
易遭受黑客攻擊,黑客快速發送flag=1的UDP包,使發送方一直沒法將包組裝起來,致使內存耗盡。