TCP建立連線後會一直保持連線狀態嗎?

時間 2022-01-10 22:25:06

1樓:

從理論上講,開啟TCP/IP連線需要3次握手,關閉連線需要4次揮手。但是,只要建立了連線,如果任何一方都沒有傳送任何資料(資料報停止傳送),連線可以永遠保持開放的狀態。TCP是乙個空閒的協議,它假設所有的連線處於活動狀態。

直到後來證明不是如此。

TCP這麼設計是希望提高彈性和效率,這種設計能夠從不穩定的網路環境或者路由器的crash中優雅的恢復回來。

有個相似的場景:

客戶端連線伺服器,中間經過的路由器可能因為crash而重新啟動,在路由器恢復後,原始的socket連線還是存在的。這種設計是高效且彈性的。設計沒有通過網路傳送『輪詢』資料報來檢查連線是否仍然存在,背後減少了不必要的網路流量。

但是,當路由器crash期間,客戶端通過TCP連線傳送資料報給伺服器,客戶端希望收到ACK確認訊息。因為中間路由器不可用,如果一段時間內ACK確認訊息沒有回到客戶端,則客戶端會重新傳輸資料。

客戶端將重新傳輸資料,再次等待來自伺服器的ACK確認訊息,直到發生超時後申明TCP連線結束,釋放為此次連線分配的緩衝區和記憶體資源。

2樓:

會, 直到你關閉;

這就導致, 一端如果掉線了, 另外一端還會處於 ESTABLISHED 狀態; 可以開啟 keepalive 選項, 定時檢測對方時不時重啟過, 重啟過的主機上, socket 被釋放了, 這時候對發過來的探測包, 會回覆 RST, 探測方的 TCP 收到 RST之後關掉 socket, 應用層讀取 socket 的時候就會觸發 connection reset by peer 錯誤

請問 TCP 斷開連線為何比建立連線多一次握手?

薄荷紅茶 回答這個問題,咋們發散思維下。假如tcp握手是四次,即syn,ack,syn,ack。客戶端首先傳送syn,告訴伺服器,建立乙個從客戶端到伺服器的連線。伺服器收到資料後,根據確認機制,需要回覆ack 不是syn ack 表示收到對方的syn包。按道理,這時候客戶端就可以往伺服器傳送資料了,...

MacBook Pro 一直保持電源連線,對電池有不好的影響嗎?

胖五叔 事實證明長期插電使用,嚴重影響電池壽命。2018年初買的2017款Mackbook Pro 13寸,常年插電使用,2020年初就提醒我的電池要去維修了。 noopsphere 這要看情況,一直連著電源本身可能也有問題,但是你如果不是把筆記本當台式電腦使用的壞,那屬於正常使用,因為你總會有下班...

TCP建立連線過程為什麼會有4個包?

攻城獅 另外,關於圖示顯示的第四個包的問題。這個包不屬於握手階段,但因為ack是對方seq 1,這一點容易被認為屬於握手階段。因為window size有改變 變大 應該是通知作用的視窗更新包。視窗更新包可以是跟隨包含payload的TCP segment一起發 也就是在包含payload的包的wi...