我們先來回顧一下TCP的完整協議,通過上面兩張圖我們就能知道,首先是創建連接傳送數據。
三次握手
- 發起連接的是客戶端
- 接收連接的是服務端
- 服務端處於監聽狀態,當有連接過來,狀態就變爲SYN_RCVD
- 回覆一個SYN、ACK消息,客戶端收到消息後狀態變爲ESTABLISHED
- 再回復一個ACK消息,服務端接收到消息後服務端也處於ESTABLISHED
- 在這之後客戶端與服務器直接就可以進行消息的收發了。
消息收發
- 客戶端通過write()進行向服務器發送數據
- 服務器通過read()進行數據的讀取。
四次揮手
- 斷開連接的一方稱爲客戶端
- 被斷開的一方稱爲服務端
- 客戶端調用close(),發送FIN到服務端
- 服務端收到FIN後,調用close(),狀態變爲Close_WAIT,同時發送ACK消息到客戶端。
- 客戶端收到FIN消息後,狀態變爲FIN_WAIT_2,狀態變爲WAIT_TIME