TCP四次揮手中TIME WAIT的作用及危害

2021-10-05 08:46:46 字數 781 閱讀 1723

(1)為實現tcp連線的可靠釋放

保證最後乙個ack能到達伺服器,如果伺服器沒有收到客戶端的確認報文,它會重新進行第四次揮手,這樣客戶端在2msl內能收到重發的報文,並給出回應,重置2msl計時器(msl是maximum segment lifetime英文的縮寫,中文可以譯為「報文最大生存時間」)

(2)為使舊的重複資料報在網路中因過期而消失

服務端傳送給客戶端的一些報文在傳輸過程中由於網路擁堵而導致嚴重推遲,而在它到達客戶端之前服務端已經重發了該報文,並完成其任務。如果在被推遲的報文未抵達前客戶端就斷開了連線,隨後又建立了乙個與之前相同ip、port的連線,而之前被推遲的報文在這時恰好到達,而此時此新連線非彼連線,從而會發生資料錯亂,進而導致無法預知的情況。因此必須維持一段等待時間,使遲到的報文在網路中完全消失。這個時間可以時所有網路中的報文到達應該到的位置,新的連線中不會出現舊的連線的報文

在高並發短連線的tcp伺服器上,當伺服器處理完請求後主動請求關閉連線,這樣伺服器上會有大量的連線處於time_wait狀態,伺服器維護每乙個連線需要乙個socket,也就是每個連線會占用乙個檔案描述符,而檔案描述符的使用是有上限的,如果持續高併發,會導致一些連線失敗。

設定套接字選項為so_reuseaddr,告訴作業系統,如果埠忙,但占用該埠tcp連線處於time_wait狀態,並且套接字選項為so_reuseaddr,則該埠可被重用。如果tcp連線處於其他狀態,依然返回埠被占用。該選項對服務程式重啟非常有用。

tcp 四次揮手 TCP四次揮手

tcp斷開連線的過程 客戶端傳送fin報文,表明客戶端將不在傳送資料。具體過程 把fin標誌位改為1,序號seq u,之前傳送的資料加1,這裡規定即使不攜帶資料序號也要 1。該過程中客戶端通過close系統呼叫從established狀態進入fin wait 1狀態。第二次揮手 服務端收到客戶端發來...

聊聊TCP四次揮手中的timewait

一句話總結 保證雙方正常關閉 廢棄存在於路由上的舊資訊。下面假設a是主動關閉方,b是被動關閉方。1 time wait什麼時候出現 當a主動關閉傳送fin給b時,進入fin wait 1,b接收到fin後發給a乙個ack,進入close wait 當a接收到b的ack後進入fin wait 2 b進...

TCP四次揮手中的TIME WAIT狀態存在的理由

1 第一次揮手 client傳送乙個fin,用來關閉client到server的資料傳送,client進入fin wait 1狀態。2 第二次揮手 server收到fin後,傳送乙個ack給client,確認序號為收到序號 1 與syn相同,乙個fin占用乙個序號 server進入close wai...