在TCP的四次分手當中,被動關閉方是如何知道資料已經接收完了

時間 2021-05-10 18:13:22

1樓:車小胖

既然被動關閉方B(passive shutdown)已經接收到主動關閉方A(active shutdown)FIN,大體有以下三種不同的場景:

1 TCP資料 ,FIN順序到達

這是正常情況,B接收到含有FIN標誌位的報文,該報文有sequence number,假定其為10000,B就會知道A的最後乙個位元組資料序列號為10000,任何大於此序列號的資料即為非法,所以B可以知道資料接收完畢。

退一步說,A傳送FIN之後也不會再傳送資料給B。

2 TCP資料丟

B接收到A的FIN,根據其sequence number發現有資料丟失,最好的方法是B立馬傳送ACK,ACK number 為成功接收資料 sequence number + 1,這樣可以觸發A的 Fast Retransmit,A立刻重傳,當B接收到,根據序列號發現資料已經完全接收,可以知道A的資料傳送完畢,可以提交給應用程式。

3 FIN先到,TCP資料後到

此為亂序,B會意識到亂序,在TCP資料還沒有到達之前,會傳送ACK觸發A快速重傳,也許B的ACK還沒有到達A,B已經接收到姍姍來遲的資料,B將亂序的資料重新按序排列好。這時A可能還會傳送乙個duplicated TCP segment ( 快速重傳),到達B,B根據序列號知道其為duplicated,將其丟棄即可,至此,B知道A傳送的資料已經結束,並提交給應用程式。

TCP 為什麼是三次握手,而不是兩次或四次?

xuanweiace 一些簡單好記的結論 首先明確一點,傳送方傳送的資料報包含資料,才需要進行ack確認 且必須進行ack確認 而如果傳送方傳送的只是ack確認而無資料,則無需再次確認 不然就會無限迴圈 所有的重傳,都由傳送方負責,接收方不負責。何時觸發重傳?傳送方在超時器計時結束後仍然沒有收到ac...

TCP四次揮手中間兩次會合併成一次嗎?

守護 服務端完成資料的處理和發生通常是分開的,不是同時完成的,所以一般情況下服務端的ack和fin是分開發的,而不是像三次握手那樣在第二次握手同時傳送sys ack 一般傳送FIN端是告訴對端,我這邊不會再發資料了,對端收到FIN後會回乙個ACK表示我知道了 當兩端都說不會發資料並相互確認後,最後再...

被女朋友扇耳光四次,該分手嗎?

小怪物 分手後的回憶對於我們來說總是很困難的事情,所以在這裡我想盡可能的把這件事說的簡單通俗易懂一點。愛情是互相磨合的乙個過程,兩個人相處包容,理解是必不可少的,祝你早日挽回愛情,加油!別把自己當成別人的附屬,你也可以擁有你的驕傲。看看對於自己來說值不值,其實每個人談戀愛都會在內心給對方乙個價值的評...