1. 程式人生 > >TCP連線過程可能出現的錯誤

TCP連線過程可能出現的錯誤

連線過程可能出現的錯誤情況有:

(1) 如果客戶機TCP協議沒有接收到對它的SYN資料段的確認,函式以錯誤返回,錯誤型別為ETIMEOUT。通常TCP協議在傳送SYN資料段失敗之後,會多次傳送SYN資料段,在所有的傳送都高中失敗之後,函式以錯誤返回。

注:SYN(synchronize)位:請求連線。TCP用這種資料段向對方TCP協議請求建立連線。在這個資料段中,TCP協議將它選擇的初始序列號通知對方,並且與對方協議協商最大資料段大小。SYN資料段的序列號為初始序列號,這個SYN資料段能夠被確認。當協議接收到對這個資料段的確認之後,建立TCP連線。

(2) 如果遠端TCP協議返回一個RST資料段,函式立即以錯誤返回,錯誤型別為ECONNREFUSED。當遠端機器在SYN資料段指定的目的埠號處沒有服務程序在等待連線時,遠端機器的TCP協議將傳送一個RST資料段,向客戶機報告這個錯誤。客戶機的TCP協議在接收到RST資料段後不再繼續傳送SYN資料段,函式立即以錯誤返回。

注:RST(reset)位:表示請求重置連線。當TCP協議接收到一個不能處理的資料段時,向對方TCP協議傳送這種資料段,表示這個資料段所標識的連接出現了某種錯誤,請求TCP協議將這個連線清除。有3種情況可能導致TCP協議傳送RST資料段:(1)SYN資料段指定的目的埠處沒有接收程序在等待;(2)TCP協議想放棄一個已經存在的連線;(3)TCP接收到一個數據段,但是這個資料段所標識的連線不存在。接收到RST資料段的TCP協議立即將這條連線非正常地斷開,並嚮應用程式報告錯誤。

(3) 如果客戶機的SYN資料段導致某個路由器產生“目的地不可到達”型別的ICMP訊息,函式以錯誤返回,錯誤型別為EHOSTUNREACH或ENETUNREACH。通常TCP協議在接收到這個ICMP訊息之後,記錄這個訊息,然後繼續幾次傳送SYN資料段,在所有的傳送都告失敗之後,TCP協議檢查這個ICMP訊息,函式以錯誤返回。

注:ICMP:Internet 訊息控制協議。Internet的執行主要是由Internet的路由器來控制,路由器完成IP資料包的傳送和接收,如果傳送資料包時發生錯誤,路由器使用 ICMP協議來報告這些錯誤。