新聞中心

TCP/IP傳輸層協(xié)議

作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò) 收藏
傳輸控制協(xié)議TCP是在RFC793中定義的,它是一個(gè)面向連接的可靠的通信協(xié)議??偟膩?lái)說(shuō),TCP主要提
供主要提供一下服務(wù)。
面向連接的虛電路:這有些和打電話相似,在開(kāi)始傳輸之前,通信雙方要進(jìn)行三次握手來(lái)建立連接,以保
證連接的可靠性。在傳輸過(guò)程中,通信雙方的協(xié)議模塊繼續(xù)進(jìn)行通信,以確保正確到達(dá)(例如,接收會(huì)用
ACK應(yīng)答發(fā)送方的報(bào)文段,發(fā)送方對(duì)未被應(yīng)答的報(bào)文段提供重傳)。如果在傳輸過(guò)程中通信失敗了(例如傳
輸路徑上的某個(gè)網(wǎng)絡(luò)接口失效),通信雙方都會(huì)收到錯(cuò)誤報(bào)告。在通信結(jié)束時(shí),通信雙方會(huì)使用改進(jìn)的三次
握手來(lái)關(guān)閉連接。
面向流:當(dāng)通信雙方傳輸大量數(shù)據(jù)時(shí),TCP將數(shù)據(jù)流看作可分為字節(jié)的流,進(jìn)行分段(分組),接收方將收到
的報(bào)文段按原有順序復(fù)原。
流量控制,避免擁塞;為了提高傳輸效率和減少網(wǎng)絡(luò)通信量(協(xié)議之間的通信),TCP會(huì)盡量一次傳輸足夠多
的數(shù)據(jù)。
多路分解技術(shù)(多路復(fù)用技術(shù)):用端口號(hào)來(lái)實(shí)現(xiàn)。
全雙工連接:TCP提供全雙工連接,可以在一條連接上同時(shí)傳輸兩個(gè)獨(dú)立的、流向相反的數(shù)據(jù)流。
TCP頭格式

TCP頭共占用了20個(gè)字節(jié)
名稱
描述
源端口
調(diào)用的端口號(hào)
目的端口
被調(diào)用的端口號(hào)
序號(hào)
確保數(shù)據(jù)到達(dá)的序列正確的編號(hào)
應(yīng)答號(hào)
期望下一個(gè)TCP數(shù)據(jù)段
數(shù)據(jù)偏移(頭長(zhǎng)度)
以32位為單位的報(bào)頭長(zhǎng)度
保留
置為0
編碼號(hào)
開(kāi)始、終止會(huì)話之類的控制功能
窗口
用來(lái)控制流量
校驗(yàn)和
頭標(biāo)和數(shù)據(jù)域計(jì)算的校驗(yàn)和
緊急
指示緊急數(shù)據(jù)的末端
可選項(xiàng)
當(dāng)前定義項(xiàng):TCP端的最大值
數(shù)據(jù)
上層協(xié)議的數(shù)據(jù)

建立TCP連接:三次握手
TCP是面向連接的,在面向連接的環(huán)境中,開(kāi)始傳輸數(shù)據(jù)之前,在兩個(gè)終端之間必須先建立一個(gè)連接。建立
連接的過(guò)程可以卻確保通信雙方在發(fā)送應(yīng)用數(shù)據(jù)包之前靜靜準(zhǔn)備好了傳送和接收數(shù)據(jù)。對(duì)于一個(gè)要建立的連
接,通信雙方必須用彼此的初始化序列號(hào)seq和來(lái)自對(duì)方成功傳輸確認(rèn)的應(yīng)答號(hào)ack來(lái)同步。(ack號(hào)致命希望收
到的下一個(gè)八位組的編號(hào))習(xí)慣上將同步信號(hào)寫為SYN,應(yīng)答信號(hào)為ACK。整個(gè)同步的過(guò)程稱為三次握手。

1)主機(jī)A發(fā)送SYN給主機(jī)B:我的序列號(hào)seq是X。
2)主機(jī)B發(fā)送SYN、ACK給主機(jī)A:我的序列號(hào)seq是X+1,應(yīng)答號(hào)是X+1(等待接收第X+1號(hào)八位組)。
3)主機(jī)B發(fā)送SYN、ACK給主機(jī)B:我的序列號(hào)seq是X+1,應(yīng)答號(hào)是Y+1.
通過(guò)以上3個(gè)步驟(三次握手),TCP連接連接建立,開(kāi)始傳輸數(shù)據(jù)。任何機(jī)器上的TCP都能被動(dòng)地
等待握手或主動(dòng)地發(fā)起握手。一旦連接建立,數(shù)據(jù)可以對(duì)等地雙向流動(dòng)。
如果TCP使用1作為每次建立連接的初始化序列號(hào),當(dāng)本地系統(tǒng)重啟后,遠(yuǎn)程系統(tǒng)會(huì)認(rèn)為以前的連接依然存
在。所以每次連接時(shí),主機(jī)都會(huì)隨機(jī)選擇一個(gè)初始化序列號(hào),用它來(lái)辨別所傳輸?shù)陌宋唤M在數(shù)據(jù)流中的位
置。然后雙方要對(duì)各自的序列號(hào)進(jìn)行協(xié)商,因?yàn)榻邮帐盏降谝粋€(gè)SYN時(shí),他并不知道這是否一個(gè)被延遲的
舊信號(hào)。所以它必須要求發(fā)送驗(yàn)證這個(gè)SYN。
一般情況下,TCP使用最少信息的報(bào)文段來(lái)實(shí)現(xiàn)三次握手,這對(duì)減少網(wǎng)絡(luò)通信流量是有效的??傊?,三次握
手使通信雙方做好了傳輸數(shù)據(jù)的準(zhǔn)備,并且使通信通信雙方統(tǒng)一了初始化序列號(hào)。
關(guān)閉TCP連接:改進(jìn)的三次握手
對(duì)于一個(gè)已經(jīng)建立的連接,TCP使用改進(jìn)的三次握手來(lái)結(jié)束通話(使用一個(gè)帶有FIN附加標(biāo)記的報(bào)文段)。
1)當(dāng)主機(jī)A的應(yīng)用程序通知TCP數(shù)據(jù)已經(jīng)完畢時(shí),TCP向主機(jī)B發(fā)送一個(gè)帶有FIN附加標(biāo)記的報(bào)文段(FIN理解為
finish)。
2)主機(jī)B收到這個(gè)FIN報(bào)文段之后,并不立即用FIN報(bào)文段回復(fù)主機(jī)A,而是向主機(jī)A發(fā)送一個(gè)確認(rèn)ACK,同時(shí)
同時(shí)通知自己相應(yīng)的應(yīng)用程序:對(duì)方要求關(guān)閉連接(先發(fā)送ACK為了防止在這段時(shí)間內(nèi),對(duì)方重傳FIN報(bào)文段)。
3)主機(jī)B的應(yīng)用程序告訴TCP:我要徹底的關(guān)閉的關(guān)閉連接,TCP向主機(jī)A送第二個(gè)FIN報(bào)文段。
4)主機(jī)A收到第二個(gè)FIN報(bào)文段后,向主機(jī)B發(fā)送一個(gè)ACK表示連接徹底關(guān)閉。

TCP的可靠性
TCP是面向流的,即數(shù)據(jù)段被當(dāng)作字節(jié)的序列化進(jìn)行傳輸。
在通過(guò)三次握手建立連接時(shí),序列號(hào)被初始化。在傳輸過(guò)程中,TCP繼續(xù)使用這個(gè)序列號(hào)來(lái)標(biāo)記每一個(gè)發(fā)送的數(shù)據(jù)段
沒(méi)發(fā)送一個(gè)數(shù)據(jù)段,序列號(hào)加1.接收站點(diǎn)一句序列號(hào)重新組裝縮所收到數(shù)據(jù)段。為什么要依靠序列號(hào)來(lái)重組數(shù)據(jù)段呢?
例如,在一個(gè)告訴高速鏈路與低速鏈路并存的網(wǎng)絡(luò)上,可能會(huì)出現(xiàn)高速鏈路比低速鏈路上的數(shù)據(jù)段提前到達(dá)的情況,
此時(shí)就必須依靠序列號(hào)來(lái)重組數(shù)據(jù)段,這就是序列號(hào)的作用之一。
在傳輸過(guò)程中,確認(rèn)號(hào)ACK的作用是告訴發(fā)送端那些數(shù)據(jù)包已經(jīng)成功接收,并且確認(rèn)號(hào)會(huì)向發(fā)送端指出了接收端希望
收到的下一個(gè)數(shù)據(jù)段的序列號(hào),這種機(jī)制稱為預(yù)期確認(rèn),即確認(rèn)號(hào)等于下一個(gè)預(yù)期的位元組。
在TCP/IP網(wǎng)絡(luò)中,存在超時(shí)與重傳兩種現(xiàn)象。如果在傳輸過(guò)程中丟失了某個(gè)序列號(hào)的數(shù)據(jù)段,導(dǎo)致發(fā)送端在給定時(shí)間
間隔內(nèi)得不到那個(gè)數(shù)據(jù)段的應(yīng)答,那么那個(gè)丟失數(shù)據(jù)段就會(huì)被要求重發(fā)。數(shù)據(jù)段會(huì)被保存在發(fā)送端的緩沖區(qū)中,直
到發(fā)送端接收到應(yīng)答號(hào),它才會(huì)釋放這個(gè)緩沖區(qū)。這種機(jī)制被稱為肯定確認(rèn)與重新傳輸(Positive Acknowledgement and
Retransimission,PAR),他是虛脫通信協(xié)議用來(lái)確??尚哦鹊囊环N技術(shù)。
序列號(hào)的第二個(gè)作用就是消除網(wǎng)絡(luò)中的重復(fù)包(同步復(fù)制)。例如在網(wǎng)絡(luò)擁塞時(shí),發(fā)送端遲遲沒(méi)有收到接收端某個(gè)數(shù)據(jù)段
的ACK包,它可能會(huì)認(rèn)為這個(gè)序列號(hào)的數(shù)據(jù)段丟失了,于是它會(huì)重新發(fā)送,這種情況可能會(huì)導(dǎo)致接收端在網(wǎng)絡(luò)恢復(fù)正
常后收到兩個(gè)同樣序列號(hào)的數(shù)據(jù)段,此時(shí)接收端會(huì)自動(dòng)丟棄第二個(gè)一樣數(shù)據(jù)段。
序列號(hào)和應(yīng)答號(hào)為TCP提供了一種糾錯(cuò)機(jī)制,提高了TCP的可靠性。
上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: TCPIP傳輸層協(xié)

評(píng)論


技術(shù)專區(qū)

關(guān)閉