2013-12-15 23 views
0

我有一個tcp客戶端向TCP服務器發送HTTP POST請求。一旦連接建立,數據就會從服務器傳輸到客戶端。最後,服務器向客戶端發送[FIN,ACK]。客戶端發送一個ACK。 37秒後,客戶端發送一個[FIN,ACK],但客戶端沒有從服務器獲得ACK,因此客戶端不斷在指數計時器上重新發送[FIN,ACK]。問:客戶端是否允許發送[FIN,ACK]延遲37秒?在這種情況下是否有任何標準的計時器值?客戶的預期行爲是什麼?在這種情況下服務器的預期行爲是什麼?fin/ack終止序列的tcp計時器值

回答

0

服務器發送FIN與發送客戶端FIN之間的時間沒有限制。在TCP中,連接的兩個方向基本上是獨立的,並且連接可以在這個「半開」狀態下保持任意時間長度。

服務器不應該爲客戶端的FIN/ACK發送ACK沒有很好的理由。如果由於某種原因銷燬了TCB(可能服務器進程關閉了套接字和/或退出,所以沒有什麼可以從客戶端接收更多的數據),它應該發送RST而不是ACK,但應該是作爲接收FIN/ACK的結果返回。如果沒有被返回,這是服務器的TCP實現中的一個錯誤。