
上面的圖是阻塞式socket進行通信的程序,阻塞的時候是作業系統內核網路協議堆疊在作業
呼叫 connect 函式將激發 TCP 的三次握手程序,而且僅在連接建立成功或出錯時才回傳,其中出錯回傳可能有以下幾種情況:
1、三次握手無法建立,客戶端發出的 SYN 包沒有任何回應,于是回傳 TIMEOUT 錯誤,這可能是對應的服務端 IP 寫錯
2、客戶端收到了 RST(復位)回答,這時候客戶端會立即回傳 CONNECTION REFUSED 錯誤,,這可能是客戶端發送連接請求時的請求埠寫錯,
產生 RST 的三個條件是:
目的地為某埠的 SYN 到達,然而該埠上沒有正在監聽的服務器,
TCP 想取消一個已有連接,
TCP 接收到一個根本不存在的連接上的分節,
3、客戶發出的 SYN 包在網路上引起了"destination unreachable",即目的不可達的錯誤,這可能是客戶端和服務器端路由不通
關于三次握手問題的本質是, 信道不可靠, 但是通信雙發需要就某個問題達成一致. 而要解決這個問題, 無論你在訊息中包含什么資訊, 三次通信是理論上的最小值. 所以三次握手不是TCP本身的要求, 而是為了滿足"在不可靠信道上可靠地傳輸資訊"這一需求所導致的,
客戶端第一次發送握手訊息到服務端,
服務端接收到握手訊息后把ack和自己的syn一同發送給客戶端,這是第二次握手,
當客戶端接收到服務端發送來的第二次握手訊息后,客戶端可以確認“服務端的收發能力OK,客戶端的收發能力OK”,但是服務端只能確認“客戶端的發送OK,服務端的接收OK”,
所以還需要第三次握手,客戶端收到服務端的第二次握手訊息后,發起第三次握手訊息,服務端收到客戶端發送的第三次握手訊息后,就能夠確定“服務端的發送OK,客戶端的接收OK”,
至此,客戶端和服務端都能夠確認自己和對方的收發能力OK,,tcp連接建立完成,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404106.html
標籤:其他
上一篇:計算機網路復習(自頂向下)知識點總結【1~3章】(還在更新)
下一篇:計網期末復習
