TCP的建立連接和關閉連接

TCP(TransmissionControl Protocol傳輸控制協議 )是一種面向連接(連接導向)的、可靠的、基於IP的傳輸層協議。

1、TCP建立數據連接

TCP是因特網中的傳輸層協議,使用三次握手協議建立連接。當客戶端向服務器發出SYN連接請求後,等待對方應答SYN+ACK,最終服務器方的SYN執行ACK確認。這種建立的連接可以防止產生錯誤的連接,TCP使用的流量控制協議時可變大小的滑動窗口協議。

TCP的三次握手如下:

【1】、客戶端發送SYN(假設序列號SEQ=x)報文交給服務器端,進入SYN_SEND狀態。

【2】、服務器端收到SYN報文,迴應一個SYN(假設序列號爲SEQ=y),ACK(ACK=x+1)報文,進入SYN_RECV狀態。

【3】、客戶端接收到服務器端的SYN報文,迴應一個ACK(ACK=y+1)報文,進入ESTABLISHED狀態。

TCP的三次握手完成,客戶端和服務器端成功建立連接,可以進行數據的傳輸。

 

2、TCP關閉數據連接(四次揮手)

TCP的連接是全雙工的(可以同時發送和接收)連接,因此在關閉連接時候,必須關閉發送和接收兩個方向的連接。收到一個FIN之意味着這一個方向上沒有數據流動,另一方仍然發送數據。一方主動關閉爲主動方,一方被動關閉爲被動方。

TCP的四次揮手過程如下:

【1】主動方A發送一個FIN,序列號SEQ=u,用來關閉主動方到被動方B的數據連接。

【2】被動方B收到這個FIN,它發回一個ACK,(確認序列號ack=u+1)。

【5】被動方B關閉與主動方A的連接,發送一個FIN給主動方A,序列號爲SEQ=w。

【4】主動方發回ACK報文確認,確認序號設置爲收到序號加1.


3、那麼爲什麼TCP在建立連接採用三次握手,而在關閉連接時採用四次揮手呢?

  這是因爲服務端的LISTEN狀態下的SOCKET當收到SYN報文的建連請求後,它可以把ACK和SYN(ACK起應答作用,而SYN起同步作用)放在一個報文裏來發送。但關閉連接時,當收到對方的FIN報文通知時,它僅僅表示對方沒有數據發送給你了;但未必你所有的數據都全部發送給對方了,所以你可以未必會馬上會關閉SOCKET,也即你可能還需要發送一些數據給對方之後,再發送FIN報文給對方來表示你同意現在可以關閉連接了,所以它這裏的ACK報文和FIN報文多數情況下都是分開發送的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章