部落格278 TCP連線異常關閉的幾種情況

2021-10-06 16:34:25 字數 629 閱讀 2771

內容:記錄tcp連線異常關閉的幾種情況

一、伺服器程序異常終止:

服務程序提前終止了,系統進行程序善後處理:將所有開啟的檔案描述符關閉,這導致傳送fin給

客戶端,客戶端tcp響應ack。客戶端此時正阻塞在輸入io函式,這導致客戶端不知道服務端tcp已經

關閉連線。客戶端在接收輸入的io呼叫返回後呼叫write向服務端發資料,由於服務端已經終止,

所以服務端tcp會傳送乙個rst給客戶端tcp。如果客戶端在傳送完資料後立即呼叫read讀取資料,由於

有第一步的fin,read立即返回0

(表示eof

),便知道連線已經終止了。但是如果客戶端沒有呼叫read,

那麼此時是不知道服務端已經終止,也不知道這個連線現在處於什麼狀態;繼續往服務端發資料,此時

將會收到sigpipe訊號,若沒有設定處理方法,那麼會異常終止。原因:向接收到rst的套介面寫資料

都會收到此訊號.

問題的本質 :客戶端同時處理兩個描述字--套介面和使用者輸入,程式被單純地阻塞在乙個源上

解決方法:為阻塞io設定超時

二、伺服器主機奔潰:

關閉TCP連線的學問

從tcp協議角度來看,乙個已建立的tcp連線有兩種關閉方式,一種是正常關閉,即四次揮手關閉連線 還有一種則是異常關閉,我們通常稱之為連線重置 reset 首先說一下正常關閉時四次揮手的狀態變遷,關閉連線的主動方狀態變遷是fin wait 1 fin wait 2 time wait,而關閉連線的被動...

關閉TCP連線的學問

從tcp協議角度來看,乙個已建立的tcp連線有兩種關閉方式,一種是正常關閉,即四次揮手關閉連線 還有一種則是異常關閉,我們通常稱之為連線重置 reset 首先說一下正常關閉時四次揮手的狀態變遷,關閉連線的主動方狀態變遷是fin wait 1 fin wait 2 time wait,而關閉連線的被動...

關閉TCP連線的學問

從tcp協議角度來看,乙個已建立的tcp連線有兩種關閉方式,一種是正常關閉,即四次揮手關閉連線 還有一種則是異常關閉,我們通常稱之為連線重置 reset 首先說一下正常關閉時四次揮手的狀態變遷,關閉連線的主動方狀態變遷是fin wait 1 fin wait 2 time wait,而關閉連線的被動...