TCP三向交握和四次斷開

來源:互聯網
上載者:User

標籤:tcp 協議 三向交握

TCP,一個大家都熟悉的協議,對於技術人員來說,透徹的理解他,就到代表咱們的半隻腳已經踏進了IT的大門。


TCP的特點

TCP提供一種連線導向的、可靠的位元組流服務。連線導向意味著是一對一的串連(通常是一個用戶端串連一個服務端),在交換資料之前,需要先建立串連。在TCP的串連中,僅有一對一的雙方建立串連,多播和廣播不屬於TCP的串連。


TCP保證其可靠性的機制

  • 應用資料被分割成TCP認為最適合發送的資料區塊。由TCP傳遞給IP的資訊單位稱為報文段或段(segment)。

  • 逾時重傳策略。當TCP發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。

  • 當TCP收到發自TCP串連另一端的資料,它將發送一個確認。這個確認不是立即發送,通常將延遲幾分之一秒.

  • TCP將保持它首部和資料的檢驗和。這是一個端到端的檢驗和,目的是檢測資料在傳輸過程中的任何變化。

  • 如果收到段的檢驗和有差錯, TCP將丟棄這個報文段和不確認收到此報文段(希望發端逾時並重發)。

  • 既然TCP報文段作為IP資料報來傳輸,而 IP資料報的到達可能會失序,因此 TCP報文段的到達也可能會失序。如果必要,TCP將對收到的資料進行重新排序,將收到的資料以正確的順序交給應用程式層。

  • 既然IP資料報會發生重複,TCP的接收端必須丟棄重複的資料。

  • TCP還能提供流量控制。 TCP串連的每一方都有固定大小的緩衝空間。TCP的接收端只允許另一端發送接收端緩衝區所能接納的資料。這將防止較快主機致使較慢主機的緩衝區溢位。


    (可參見《TCP/IP詳解卷一》)




TCP一些屬性說明

  • 連接埠號碼:

    每個TCP段都包含源端和目的端的連接埠號碼,用於尋找發端和收端應用進程。這兩個值加

    上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP串連。


  • 網路通訊端(socket):

    一個IP地址和一個連接埠號碼也稱為一個socket。它也作為表示伯克利版的編程介面,socket包含客戶IP地址、用戶端口號、伺服器IP地址和伺服器連接埠號碼的四元組,可唯一確定互連網絡中每個TCP串連的雙方。


  • 全雙工系統:

    TCP為應用程式層提供全雙工系統服務。這意味資料能在兩個方向上獨立地進行傳輸。因此,連

    接的每一端必須保持每個方向上的傳輸資料序號。


當我們在Linux系統中使用tcpdump時可以看到一些資料的傳輸資訊,這包含了TCP資料包的一些前序資訊:

[[email protected] ~]# tcpdump22:45:12.325568 IP 192.168.1.106.53021 > 192.168.1.210.ssh: Flags [.], ack 285080, win 62, length 022:45:12.325909 IP 192.168.1.210.ssh > 192.168.1.106.53021: Flags [P.], seq 285080:285340, ack 105, win 369, length 260

其中,格式為: 原地址 > 目的地址 : 標示,其中win表示視窗大小,也就是資料量的大小,可以用於流量控制,預設為4096,最大為65535,它是由一個16bit的欄位表示的。

SYN: 同步序號串連標示,用來發起一個串連。

ACK: 應答標示,用來確認同步序號有效。

FIN:結束串連標示。


TCP三向交握過程

TCP的三向交握過程其實可以用一個簡單的圖表示:


650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/83/9C/wKioL1d36NjSl8QZAABnWE_I3B4738.jpg-wh_500x0-wm_3-wmp_4-s_3904652823.jpg" title="TCP三向交握.jpg" alt="wKioL1d36NjSl8QZAABnWE_I3B4738.jpg-wh_50" />


串連過程:

  1. 請求端(通常為用戶端)發送一個SYN段的請求,指明了用戶端打算已連線的服務的連接埠以及初始序號ISN,假設這個把報文段為SYN0.

  2. 伺服器發回包含服務端的初始序號的SYN報文段(SYN1)作為應答,同時在請求端發送的SYN上加1,以ACK的方式返回進行確認。之所以會加1是因為一個SYN將佔用一個序號。

  3. 用戶端必須將確認序號設定為服務端的ISN加1返回一個ACK,以對伺服器端SYN報文進行確認.

這樣就建立了串連。

這一個簡單的過程可以理解為,你去商店買東西.

你向服務員發起一個請求,說:我要xxx,請你把它給我(SYN0);

服務員說:好的我已經收到你的請求(SYN1)您要的是xxx對吧(ACK=SYN0+1);

你說:是的(Ack).

然後你們就開始進行交易。


TCP 四次斷開過程

建立一個串連需要三向交握,而終止一個串連要經過4次握手。這由TCP的半關閉(HALF-CLOSE)造成的。既然一個TCP串連是全雙工系統(即資料在兩個方向上能同時傳遞),因此每個方

向必須單獨地進行關閉。這原則就是當一方完成它的資料發送任務後就能發送一個FIN來終止

這個方向串連。當一端收到一個FIN,它必須通知應用程式層另一端幾經終止了那個方向的資料傳

送。發送FIN通常是應用程式層進行關閉的結果。

四次斷開的圖示如下:


650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/83/A4/wKiom1d5NPDhJkEYAADm1N_loes166.jpg" title="TCP四次斷開.jpg" alt="wKiom1d5NPDhJkEYAADm1N_loes166.jpg" />

斷開的過程:

  1. 當有一方要終止串連時,會向對方發送一個FIN的訊號n.

  2. 接受方收到資訊後,會回複一個ACK(n+1)表示已經收到請求,但此時並不會立即中斷串連,而是去嘗試關閉自身的串連。

  3. 當響應用戶端關閉本地的TCP串連之後,會向請求端重新發送一個新的FIN m,表示此事響應端可以關閉。

  4. 請求端接受到FIN m的訊號後,回複一個ACK,同時自己也進入TIME_WAIT狀態,而響應端進入close狀態。



這裡應用TCP/IP協議卷的一張圖,說明了主機在TCP互動過程中狀態的變化:

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/83/A3/wKioL1d5OfXjrel7AACtNzWU-M8554.jpg" title="1350996969_2313.jpg" alt="wKioL1d5OfXjrel7AACtNzWU-M8554.jpg" />

其實這些內容只是TCP協議的冰山一角,在這個互動過程中還有很多演算法和協議規則,具體的細節大家可以參考TCP/IP協議卷。

本文出自 “Trying” 部落格,請務必保留此出處http://tryingstuff.blog.51cto.com/4603492/1795450

TCP三向交握和四次斷開

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.