TCP,一個(gè)大家都熟悉的協(xié)議,對(duì)于技術(shù)人員來說,透徹的理解他,就到代表咱們的半只腳已經(jīng)踏進(jìn)了IT的大門。
目前創(chuàng)新互聯(lián)已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、友誼網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
TCP的特點(diǎn)
TCP提供一種面向連接的、可靠的字節(jié)流服務(wù)。面向連接意味著是一對(duì)一的連接(通常是一個(gè)客戶端連接一個(gè)服務(wù)端),在交換數(shù)據(jù)之前,需要先建立連接。在TCP的連接中,僅有一對(duì)一的雙方建立連接,多播和廣播不屬于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)和,目的是檢測(cè)數(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á)可能會(huì)失序,因此 TCP報(bào)文段的到達(dá)也可能會(huì)失序。如果必要,TCP將對(duì)收到的數(shù)據(jù)進(jìn)行重新排序,將收到的數(shù)據(jù)以正確的順序交給應(yīng)用層。
既然IP數(shù)據(jù)報(bào)會(huì)發(fā)生重復(fù),TCP的接收端必須丟棄重復(fù)的數(shù)據(jù)。
TCP還能提供流量控制。 TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù)。這將防止較快主機(jī)致使較慢主機(jī)的緩沖區(qū)溢出。
(可參見《TCP/IP詳解卷一》)
TCP一些屬性說明
端口號(hào):
每個(gè)TCP段都包含源端和目的端的端口號(hào),用于尋找發(fā)端和收端應(yīng)用進(jìn)程。這兩個(gè)值加
上IP首部中的源端IP地址和目的端IP地址唯一確定一個(gè)TCP連接。
網(wǎng)絡(luò)套接字(socket):
一個(gè)IP地址和一個(gè)端口號(hào)也稱為一個(gè)socket。它也作為表示伯克利版的編程接口,socket包含客戶IP地址、客戶端口號(hào)、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: 同步序號(hào)連接標(biāo)示,用來發(fā)起一個(gè)連接。 ACK: 應(yīng)答標(biāo)示,用來確認(rèn)同步序號(hào)有效。 FIN:結(jié)束連接標(biāo)示。 TCP三次握手過程 TCP的三次握手過程其實(shí)可以用一個(gè)簡(jiǎn)單的圖表示: 連接過程: 請(qǐng)求端(通常為客戶端)發(fā)送一個(gè)SYN段的請(qǐng)求,指明了客戶端打算連接的服務(wù)的端口以及初始序號(hào)ISN,假設(shè)這個(gè)把報(bào)文段為SYN0. 服務(wù)器發(fā)回包含服務(wù)端的初始序號(hào)的SYN報(bào)文段(SYN1)作為應(yīng)答,同時(shí)在請(qǐng)求端發(fā)送的SYN上加1,以ACK的方式返回進(jìn)行確認(rèn)。之所以會(huì)加1是因?yàn)橐粋€(gè)SYN將占用一個(gè)序號(hào)。 客戶端必須將確認(rèn)序號(hào)設(shè)置為服務(wù)端的ISN加1返回一個(gè)ACK,以對(duì)服務(wù)器端SYN報(bào)文進(jìn)行確認(rèn). 這樣就建立了連接。 這一個(gè)簡(jiǎn)單的過程可以理解為,你去商店買東西. 你向服務(wù)員發(fā)起一個(gè)請(qǐng)求,說:我要xxx,請(qǐng)你把它給我(SYN0); 服務(wù)員說:好的我已經(jīng)收到你的請(qǐng)求(SYN1)您要的是xxx對(duì)吧(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é)果。 四次斷開的圖示如下: 斷開的過程: 當(dāng)有一方要終止連接時(shí),會(huì)向?qū)Ψ桨l(fā)送一個(gè)FIN的信號(hào)n. 接受方收到信息后,會(huì)回復(fù)一個(gè)ACK(n+1)表示已經(jīng)收到請(qǐng)求,但此時(shí)并不會(huì)立即中斷連接,而是去嘗試關(guān)閉自身的連接。 當(dāng)響應(yīng)客戶端關(guān)閉本地的TCP連接之后,會(huì)向請(qǐng)求端重新發(fā)送一個(gè)新的FIN m,表示此事響應(yīng)端可以關(guān)閉。 請(qǐng)求端接受到FIN m的信號(hào)后,回復(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)的變化: 其實(shí)這些內(nèi)容只是TCP協(xié)議的冰山一角,在這個(gè)交互過程中還有很多算法和協(xié)議規(guī)則,具體的細(xì)節(jié)大家可以參考TCP/IP協(xié)議卷。
名稱欄目:TCP三次握手和四次斷開
URL分享:http://weahome.cn/article/jedhii.html