一、做爲接收方,有接收窗口,也就是接收緩衝區,win=xxx 告訴對方,個人接收窗口大小。網絡
二、當個人接收窗口滿了,也就是win=0,Wireshark顯示【TCP ZeroWindow】,這個時候,對方不能再發送數據。spa
三、做爲發送方,有發送窗口,發送窗口能夠理解爲,一口氣能夠發送多少數據。發送窗口不光要考慮對方的接收窗口,還要考慮網絡狀況,也就是擁塞窗口,等於它們的最小值。循環
發送窗口數據分爲三類: 發送了已經被確認,發送了尚未被確認,待發送的數據數據
當待發送的數據爲0,也就是發了出去,可是都沒有確認,容許發送的大小爲0,
也就是說,在途字節數等於對方的接收窗口,這個時候,Wireshark打上【TCP window Full】標記,表示我不能再發送數據了。
四、在途字節數,是站在發送者的角度,表示的概念是,我已經發了多少,減去對方最近的一次確認,確認了多少。
也就是 Seq + Len - Ack【最近的一次Ack】
五、正常狀況下,後一個包的Seq = 前一個包的Seq+Len
六、正常狀況下,對方的Ack = 我剛發的Seq+Len
七、可是,三次握手和四次揮手是例外,syn和fin標誌,Len是0,可是序號都加1,由於爲了保證可靠性。ack標誌,序號不加1,不然變成了死循環,個人ack你確認,你的ack我再確認,沒法完成揮手。