1、作為接收方,有接收窗口,也就是接收緩沖區,win=xxx 告訴對方,我的接收窗口大小。
2、當我的接收窗口滿了,也就是win=0,Wireshark顯示【TCP ZeroWindow】,這個時候,對方不能再發送數據。
3、作為發送方,有發送窗口,發送窗口可以理解為,一口氣可以發送多少數據。發送窗口不光要考慮對方的接收窗口,還要考慮網絡情況,也就是擁塞窗口,等於它們的最小值。
發送窗口數據分為三類: 發送了已經被確認,發送了還沒有被確認,待發送的數據
當待發送的數據為0,也就是發了出去,但是都沒有確認,允許發送的大小為0,
也就是說,在途字節數等於對方的接收窗口,這個時候,Wireshark打上【TCP window Full】標記,表示我不能再發送數據了。
4、在途字節數,是站在發送者的角度,表示的概念是,我已經發了多少,減去對方最近的一次確認,確認了多少。
也就是 Seq + Len - Ack【最近的一次Ack】
5、正常情況下,后一個包的Seq = 前一個包的Seq+Len
6、正常情況下,對方的Ack = 我剛發的Seq+Len
7、但是,三次握手和四次揮手是例外,syn和fin標志,Len是0,但是序號都加1,因為為了保證可靠性。ack標志,序號不加1,否則變成了死循環,我的ack你確認,你的ack我再確認,無法完成揮手。
