溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

TCP三次握手和四次斷開

發(fā)布時(shí)間:2020-07-13 10:26:12 來源:網(wǎng)絡(luò) 閱讀:854 作者:酥心糖 欄目:網(wǎng)絡(luò)安全

TCP,一個(gè)大家都熟悉的協(xié)議,對于技術(shù)人員來說,透徹的理解他,就到代表咱們的半只腳已經(jīng)踏進(jìn)了IT的大門。


TCP的特點(diǎn)

TCP提供一種面向連接的、可靠的字節(jié)流服務(wù)。面向連接意味著是一對一的連接(通常是一個(gè)客戶端連接一個(gè)服務(wù)端),在交換數(shù)據(jù)之前,需要先建立連接。在TCP的連接中,僅有一對一的雙方建立連接,多播和廣播不屬于TCP的連接。


TCP保證其可靠性的機(jī)制

  • 應(yīng)用數(shù)據(jù)被分割成TCP認(rèn)為最適合發(fā)送的數(shù)據(jù)塊。由TCP傳遞給IP的信息單位稱為報(bào)文段或段(segment。

  • 超時(shí)重傳策略。當(dāng)TCP發(fā)出一個(gè)段后,它啟動(dòng)一個(gè)定時(shí)器,等待目的端確認(rèn)收到這個(gè)報(bào)文段。如果不能及時(shí)收到一個(gè)確認(rèn),將重發(fā)這個(gè)報(bào)文段。

  • 當(dāng)TCP收到發(fā)自TCP連接另一端的數(shù)據(jù),它將發(fā)送一個(gè)確認(rèn)。這個(gè)確認(rèn)不是立即發(fā)送,通常將推遲幾分之一秒.

  • TCP將保持它首部和數(shù)據(jù)的檢驗(yàn)和。這是一個(gè)端到端的檢驗(yàn)和,目的是檢測數(shù)據(jù)在傳輸過程中的任何變化。

  • 如果收到段的檢驗(yàn)和有差錯(cuò), TCP將丟棄這個(gè)報(bào)文段和不確認(rèn)收到此報(bào)文段(希望發(fā)端超時(shí)并重發(fā))。

  • 既然TCP報(bào)文段作為IP數(shù)據(jù)報(bào)來傳輸,而 IP數(shù)據(jù)報(bào)的到達(dá)可能會失序,因此 TCP報(bào)文段的到達(dá)也可能會失序。如果必要,TCP將對收到的數(shù)據(jù)進(jìn)行重新排序,將收到的數(shù)據(jù)以正確的順序交給應(yīng)用層。

  • 既然IP數(shù)據(jù)報(bào)會發(fā)生重復(fù),TCP的接收端必須丟棄重復(fù)的數(shù)據(jù)。

  • TCP還能提供流量控制。 TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù)。這將防止較快主機(jī)致使較慢主機(jī)的緩沖區(qū)溢出。


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




TCP一些屬性說明

  • 端口號:

    每個(gè)TCP段都包含源端和目的端的端口號,用于尋找發(fā)端和收端應(yīng)用進(jìn)程。這兩個(gè)值加

    上IP首部中的源端IP地址和目的端IP地址唯一確定一個(gè)TCP連接。


  • 網(wǎng)絡(luò)套接字(socket):

    一個(gè)IP地址和一個(gè)端口號也稱為一個(gè)socket。它也作為表示伯克利版的編程接口,socket包含客戶IP地址、客戶端口號、服務(wù)器IP地址和服務(wù)器端口號的四元組,可唯一確定互聯(lián)網(wǎng)絡(luò)中每個(gè)TCP連接的雙方。


  • 全雙工:

    TCP為應(yīng)用層提供全雙工服務(wù)。這意味數(shù)據(jù)能在兩個(gè)方向上獨(dú)立地進(jìn)行傳輸。因此,連

    接的每一端必須保持每個(gè)方向上的傳輸數(shù)據(jù)序號。


當(dāng)我們在Linux系統(tǒng)中使用tcpdump時(shí)可以看到一些數(shù)據(jù)的傳輸信息,這包含了TCP數(shù)據(jù)包的一些報(bào)頭信息:

# tcpdump -i eth0 '(( host 192.168.1.210) and ( port 80))'
13:30:19.078214 IP 192.168.1.106.53190 >192.168.1.210.http: Flags [S], seq 1725365454, win 8192, options [mss1460,nop,wscale 8,nop,nop,sackOK], length 0
13:30:19.078342 IP 192.168.1.210.http >192.168.1.106.53190: Flags [S.], seq 4163517334, ack 1725365455, win 14600,options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0
13:30:19.078649 IP 192.168.1.106.53190 >192.168.1.210.http: Flags [.], ack 1, win 68, length 0


上面為一次三次握手建立連接的過程。

其中,格式為: 原地址 > 目的地址 : 標(biāo)示,[S]標(biāo)示SYN, 其中win表示窗口大小,也就是數(shù)據(jù)量的大小,可以用于流量控制,默認(rèn)為4096,最大為65535,它是由一個(gè)16bit的字段表示的。

SYN: 同步序號連接標(biāo)示,用來發(fā)起一個(gè)連接。

ACK: 應(yīng)答標(biāo)示,用來確認(rèn)同步序號有效。

FIN:結(jié)束連接標(biāo)示。


TCP三次握手過程

TCP的三次握手過程其實(shí)可以用一個(gè)簡單的圖表示:


TCP三次握手和四次斷開


連接過程:

  1. 請求端(通常為客戶端)發(fā)送一個(gè)SYN段的請求,指明了客戶端打算連接的服務(wù)的端口以及初始序號ISN,假設(shè)這個(gè)把報(bào)文段為SYN0.

  2. 服務(wù)器發(fā)回包含服務(wù)端的初始序號的SYN報(bào)文段(SYN1)作為應(yīng)答,同時(shí)在請求端發(fā)送的SYN上加1,以ACK的方式返回進(jìn)行確認(rèn)。之所以會加1是因?yàn)橐粋€(gè)SYN將占用一個(gè)序號。

  3. 客戶端必須將確認(rèn)序號設(shè)置為服務(wù)端的ISN加1返回一個(gè)ACK,以對服務(wù)器端SYN報(bào)文進(jìn)行確認(rèn).

這樣就建立了連接。

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

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

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

你說:是的(Ack).

然后你們就開始進(jìn)行交易。


TCP 四次斷開過程

建立一個(gè)連接需要三次握手,而終止一個(gè)連接要經(jīng)過4次握手。這由TCP的半關(guān)閉(HALF-CLOSE)造成的。既然一個(gè)TCP連接是全雙工(即數(shù)據(jù)在兩個(gè)方向上能同時(shí)傳遞),因此每個(gè)方

向必須單獨(dú)地進(jìn)行關(guān)閉。這原則就是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN來終止

這個(gè)方向連接。當(dāng)一端收到一個(gè)FIN,它必須通知應(yīng)用層另一端幾經(jīng)終止了那個(gè)方向的數(shù)據(jù)傳

送。發(fā)送FIN通常是應(yīng)用層進(jìn)行關(guān)閉的結(jié)果。

四次斷開的圖示如下:


TCP三次握手和四次斷開

斷開的過程:

  1. 當(dāng)有一方要終止連接時(shí),會向?qū)Ψ桨l(fā)送一個(gè)FIN的信號n.

  2. 接受方收到信息后,會回復(fù)一個(gè)ACK(n+1)表示已經(jīng)收到請求,但此時(shí)并不會立即中斷連接,而是去嘗試關(guān)閉自身的連接。

  3. 當(dāng)響應(yīng)客戶端關(guān)閉本地的TCP連接之后,會向請求端重新發(fā)送一個(gè)新的FIN m,表示此事響應(yīng)端可以關(guān)閉。

  4. 請求端接受到FIN m的信號后,回復(fù)一個(gè)ACK,同時(shí)自己也進(jìn)入TIME_WAIT狀態(tài),而響應(yīng)端進(jìn)入close狀態(tài)。



這里應(yīng)用TCP/IP協(xié)議卷的一張圖,說明了主機(jī)在TCP交互過程中狀態(tài)的變化:

TCP三次握手和四次斷開

其實(shí)這些內(nèi)容只是TCP協(xié)議的冰山一角,在這個(gè)交互過程中還有很多算法和協(xié)議規(guī)則,具體的細(xì)節(jié)大家可以參考TCP/IP協(xié)議卷。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI