TCP的被動關閉端為什麼不需要類似TIME WAIT的狀態?

時間 2021-05-31 09:16:31

1樓:

問題1那被動關閉端也有可能發出了ACK對端沒收到,為什麼不需要進入類似TIME_WAIT的狀態,而是直接CLOSED了呢?

TIME_WAIT 正是被動關閉端發起後才出現的。遇到這個情況通過超時重傳,如果還是不行,對方傳送rst的包。直接放棄。

問題2 這種情況下,對端也即主動關閉端是否會一直停留在CLOSING狀態?

這個情況存在,會同時進入CLOSING狀態並且自動轉換time_wait狀態,然後變成closed狀態

針對你問題:

tcp建立乙個建立伺服器端口是固定的,乙個服務連線更多客戶端,消耗客戶端更多埠號。TIMEWAIT 意義是什麼這個文章解釋很清楚了,在異常情況下,RST包來處理異常的。因此伺服器處理失敗之後,自動 last_ack狀態,切換到closd狀態

徹底搞定:手繪TCP狀態機

There are two reasons for the TIME_WAIT state:

一、保證TCP協議的全雙工連線能夠可靠關閉

To implement TCP's full-duplex connection termination reliably

二、保證這次連線的重複資料段從網路中消失

To allow old duplicate segments to expire in the network

在第二點上,伺服器固定ip,固定埠,相同連線只能在客戶端傳送。不可能在伺服器上發生。

2樓:靈劍

被動方傳送FIN是在ACK對方FIN之後,而且這個FIN也捎帶著同樣的ACK,對方已經ACK了你的FIN,那FIN都收到了捎帶著的ACK自然也收到了。

雙方TIME_WAIT的情況是存在的,雙方不約而同傳送了FIN的時候都是主動方。

3樓:2拾1

本來瞟了一眼劃過了,但看著回答在一本正經的講TCP狀態機,答主也完全沒get到,跑回來屁顛屁顛答一下吧。

首先,題主的問題不成立,被動關閉端不是沒有等,而是在一直等,這個狀態是LAST-ACK,沒有等到就一直等。那為什麼主動端要給乙個時間而不是一直等呢?因為按照正常互動是不會再有包回來了!!!

這個時間剛好是資料報往返時間,解決兩個問題,乙個是答主說的避免對端無法正常關閉,另乙個是避免網路抖動造成的錯誤連線復用。

在嘮叨一句,核心可以針對這個時間做出很多優化。

4樓:項籍

"那被動關閉端也有可能發出了ACK對端沒收到,為什麼不需要進入類似TIME_WAIT的狀態"

有啊怎麼沒有被動關閉端發出了ACK(對主動關閉端FIN的確認) 以及發出了自己這一端的FIN之後

被動關閉端自身狀態就會從CLOSE_WAIT變遷到LAST_ACK狀態. 這個LAST_ACK狀態就是你說的"被動關閉端也有可能發出了ACK對端沒收到" 而進入了乙個"類似TIMEWAIT的狀態", 用以等待對端(主動關閉端)來確認自己(被動關閉端)發出FIN的ACK.

被動關閉端只有收到了對端的ACK, 才會從LAST_ACK狀態變遷到CLOSED狀態, 而並非被動關閉端發了ACK自己直接從CLOSEWAIT變遷到CLOSED

為什麼UDP需要有長度字段,而TCP不需要長度欄位呢?

whoami TCP頭部大小是可變的,到TCP頭部有4bit用來表示資料偏移 單位是4位元組 其實也就是頭部的大小,這樣上層協議就知道TCP資料部分的開始位置,知道怎麼去重整資料。UDP頭部確實是多餘的,他是固定的八字節,很明顯8位元組後面的就是UDP資料部分,這樣上層應用就可以得到這些資料,後續由...

TCP協議關閉時為什麼需要TIME WAIT

l7dpi 1.協議沒有按你說的那有設計,如果按你這個思路設計,會有什麼弊端?前者在一定時間內time wait後進入close狀態,會話結束,後者會話結束時間不確定。2.本地埠會重複使用,如果有舊會話報文,收到亂序序列號,可能以為包丟了,會觸發快速重傳機制,造成一定干擾。 胡俊飛 如果是主機對主機...

為什麼DQN不需要off policy correction

已登出 從第乙個公式,可以看出1 step的Q值估計和策略 無關。展開後面的V s 引入n step的估計函式,就和 s,a 有關了。如果這個軌跡不是當前的 取樣的,而是過去的 old取樣的,那麼這個估計就是錯誤的。 李子牛 雖然俞老師已經親自回答了,但還是想談談我的理解。我們知道 是上面方程的唯一...