自考計(jì)算機(jī)網(wǎng)絡(luò)原理(五)
第三章:傳輸層
一、傳輸層的基本服務(wù)
(一)傳輸層功能
傳輸層的核心任務(wù)是為應(yīng)用進(jìn)程之間提供端到端的邏輯通信服務(wù)。
傳輸層主要實(shí)現(xiàn)功能:對(duì)應(yīng)用層報(bào)文進(jìn)行分段和重組;面向應(yīng)用成實(shí)現(xiàn)復(fù)用與分解;對(duì)報(bào)文進(jìn)行差錯(cuò)檢測(cè);實(shí)現(xiàn)進(jìn)程間的端到端可靠數(shù)據(jù)傳輸控制;實(shí)現(xiàn)端到端的流量控制;擁塞控制;傳輸層尋址。
傳輸層端口號(hào)為16位整數(shù),可以編號(hào)65536個(gè)。
FTP:21端口,HTTP:80端口,SMTP:25端口,DNS:53端口,POP3:110端口
(二)無(wú)連接服務(wù)與面向連接服務(wù)
傳輸層提供的服務(wù)可以分為無(wú)連接服務(wù)和面向連接服務(wù)兩大類。
面向連接服務(wù)TCP:發(fā)送方和接收方在進(jìn)行信息傳輸時(shí),需要先建立傳輸鏈路,然后才能進(jìn)行信息傳輸,信息傳輸完畢后再拆除該傳輸鏈路。
無(wú)連接服務(wù)UDP:無(wú)需與對(duì)端進(jìn)行任何信息交換,直接構(gòu)造傳輸層報(bào)文段并向接收端發(fā)送。
二、傳輸層的復(fù)用和傳輸
多路復(fù)用與多路分解:支持眾多應(yīng)用進(jìn)程共用同一個(gè)傳輸層協(xié)議,并能夠?qū)⒔邮盏降臄?shù)據(jù)準(zhǔn)確交付給不同的應(yīng)用進(jìn)程
(一)無(wú)連接的多路復(fù)用與多路分解
Internet傳輸層提供無(wú)連接服務(wù)的傳輸層協(xié)議是UDP。UDP利用一個(gè)二元組〈目的lP地址,目的端口號(hào)〉唯一標(biāo)識(shí)一個(gè)UDP套接字,從而可以實(shí)現(xiàn)精確分解。例子:視頻直播用UDP
為UDP套接字分配端口號(hào)有兩種方法:
①創(chuàng)建一個(gè)UDP套接字時(shí),傳輸層自動(dòng)地為該套接字分配一個(gè)端口號(hào),該端口號(hào)當(dāng)前未被該主機(jī)中任何其他UDP套接字使用;
②在創(chuàng)建一個(gè)UDP套接字后,通過調(diào)用bind()函數(shù)為該套接字綁定一個(gè)特定的端口號(hào)。
(二)面向連接的多路復(fù)用與多路分解
(1)Internet傳輸層提供面向連接服務(wù)的是TCP。TCP利用**一個(gè)四元組<源IP地址、源端口號(hào)、目的lP地址、目的端口號(hào)〉**唯一標(biāo)識(shí)一個(gè)TCP套接字,即標(biāo)識(shí)一條TCP連接,從而實(shí)現(xiàn)精確分解。
(2)四元組中的源端口號(hào)和目的端口號(hào)是TCP報(bào)文段首部字段,而源地址和目的地址則是封裝TCP報(bào)文段的lP數(shù)據(jù)段的首部字段。
三、停 - 等協(xié)議與滑動(dòng)窗口協(xié)議
(一)不可靠信道可能出現(xiàn)問題
(1)比特出錯(cuò)。
(2)亂序。
(3)數(shù)據(jù)丟失。
(二)可靠數(shù)據(jù)傳輸?shù)幕驹?/p>
實(shí)現(xiàn)可靠數(shù)據(jù)傳輸?shù)拇胧┲饕ㄒ韵聨追N:
(1)差錯(cuò)檢測(cè):利用差錯(cuò)編碼實(shí)現(xiàn)數(shù)據(jù)包傳輸過程中的比特差錯(cuò)檢測(cè)。
(2)確認(rèn):接收方向發(fā)送方反饋數(shù)據(jù)接收狀態(tài)。
(3)重傳:發(fā)送方重新發(fā)送接收方?jīng)]有正確接收的數(shù)據(jù)。
(4)序號(hào):對(duì)數(shù)據(jù)包進(jìn)行編號(hào),確保數(shù)據(jù)按序提交。
(5)計(jì)時(shí)器:解決數(shù)據(jù)丟失問題,若在一定時(shí)間內(nèi)發(fā)送方未收到接受方的反饋,則重新發(fā)送數(shù)據(jù)。
實(shí)現(xiàn)可靠數(shù)據(jù)傳輸?shù)睦碚搮f(xié)議有停 - 等協(xié)議和滑動(dòng)窗口協(xié)議等。
停 - 等協(xié)議只需使用1bit編號(hào)分組,每次發(fā)送一個(gè)分組,等收到確認(rèn)后才能發(fā)送新的分組。
滑動(dòng)窗口協(xié)議可以連續(xù)發(fā)送多個(gè)未被確認(rèn)的分組。
(三)停-等協(xié)議
當(dāng)發(fā)送方向接收方發(fā)送一個(gè)報(bào)文段后,就停下來等待接收方的確認(rèn)。(發(fā)送數(shù)據(jù),等待確認(rèn))
若收到接收方的報(bào)文段已正確接收的確認(rèn)信息ACK,則繼續(xù)發(fā)送下一個(gè)報(bào)文段;若收到接收方的報(bào)文段錯(cuò)誤接收的否定信息NAK,則重新發(fā)送該報(bào)文段。(否認(rèn)確定)
若在一定時(shí)間內(nèi)(計(jì)時(shí)器計(jì)時(shí)結(jié)束)沒有收到ACK或NAK,則重新發(fā)送該報(bào)文段。(重傳數(shù)據(jù))
這種重傳機(jī)制的可靠數(shù)據(jù)傳輸協(xié)議稱為自動(dòng)重傳請(qǐng)求(ARQ)協(xié)議,最簡(jiǎn)單的ARQ協(xié)議就是停一等協(xié)議。
(四)滑動(dòng)窗口協(xié)議

最典型的流水線可靠傳輸協(xié)議是滑動(dòng)窗口協(xié)議。
滑動(dòng)窗口協(xié)議的發(fā)送方和接收方各維護(hù)一個(gè)窗口,分別稱為發(fā)送窗口Ws和接收窗口Wr。發(fā)送窗口的大小表示了發(fā)送方可以一次性發(fā)送的未被確認(rèn)分組的最大數(shù)量,接收窗口的大小則表示了接收窗口可以接收并緩存的正確達(dá)到的分組的最大數(shù)量。
若發(fā)送窗口收到接收窗口關(guān)于基序號(hào)“5”的確認(rèn)接收ACK,則發(fā)送窗口向右滑動(dòng)一位。(基序號(hào)是發(fā)送窗口中第一個(gè)等待確認(rèn)信號(hào)ACK的分組。基序號(hào)左邊是已發(fā)送并已收到接收方確認(rèn)接收ACK的分組;在發(fā)送窗口內(nèi),基序號(hào)右邊是已發(fā)送未被確認(rèn)的分組,而在發(fā)送窗口外的右邊是等待發(fā)送的分組)
兩種最具代表性的滑動(dòng)窗口協(xié)議是:回退N步(GBN)協(xié)議和選擇重傳(SR)協(xié)議。
(五)GBN協(xié)議(Go-Back-N)
發(fā)送窗口Ws>=1,接收窗口Wr=1
要求:
發(fā)送端緩存能力高,可以在沒有得到確認(rèn)前發(fā)送多個(gè)分組。
接收端緩存能力很低,只能接收一個(gè)按序到達(dá)的分組,不能緩存未按序到達(dá)的分組。
應(yīng)用:
(1)GBN發(fā)送方必須響應(yīng)的三種事件類型
①上層調(diào)用。在發(fā)送數(shù)據(jù)前先檢查發(fā)送窗口是否已滿,若未滿則用“下一個(gè)可用序號(hào)”對(duì)要發(fā)送的數(shù)據(jù)進(jìn)行編號(hào),送入發(fā)送窗口中等待發(fā)送;若窗口已滿在,發(fā)送方則暫不響應(yīng)上層調(diào)用,拒絕發(fā)送新數(shù)據(jù)。
②收到1個(gè)ACKn。GBN采用累積確認(rèn)方式,即發(fā)送方收到ACKn時(shí),表明接收方正確收序號(hào)n以及序號(hào)小于n的所有分組。
③計(jì)時(shí)器超時(shí)。發(fā)送方只使用一個(gè)計(jì)時(shí)器。
(2)GBN協(xié)議接收方
①當(dāng)正確接收到序號(hào)為n的分組時(shí),向發(fā)送方發(fā)送一個(gè)ACKn,并將該分組提交給上層,這時(shí)接收窗口滑動(dòng)到序號(hào)n+1位置,準(zhǔn)備接收序號(hào)為n+1的分組;(分組的序號(hào)在傳輸過程中可能會(huì)出錯(cuò),比如丟失或亂序)
②若這時(shí)接收的分組序號(hào)不是n或分組差錯(cuò)等,接收方丟棄該分組并向發(fā)送方發(fā)送ACK即為ACKn-1。
(六)SR協(xié)議(Selective Repeat)
發(fā)送窗口Ws>1,接收窗口Wr=1
要求:
發(fā)送端緩存能力高
接收端端緩存能力高
在GBN協(xié)議中由于只有一個(gè)定時(shí)器,所以發(fā)送方無(wú)法全部確定接收方已經(jīng)正確接收的分組序號(hào),故不得不重新發(fā)送接收方已經(jīng)正確接收的分組,而SR協(xié)議就是GBN協(xié)議的優(yōu)化改進(jìn)版。
(1)SR發(fā)送方響應(yīng)事件:
①上層調(diào)用。
②計(jì)時(shí)器超時(shí)。發(fā)送方對(duì)每個(gè)分組進(jìn)行計(jì)時(shí)。
③收到ACKn。SR協(xié)議采取逐個(gè)確認(rèn)方式。
(2)SR協(xié)議接收方主要操作分為3種情況
①正確接收到序號(hào)在接收窗口范圍內(nèi)的分組PKTn。
②正確接收到序號(hào)在接收窗口左側(cè)的分組PKTn。
③其他情況,接收方可以直接丟棄分組,不做任何響應(yīng)。
提示:滑動(dòng)窗口協(xié)議的窗口大小與序號(hào)空間需要滿足一個(gè)約束條件:發(fā)送窗口大小與接收窗口大小之和不大于分組序號(hào)空間大小。
(七)信道利用率的計(jì)算
對(duì)于停-等協(xié)議,可以看做特殊的滑動(dòng)窗口協(xié)議,即Ws=Wr=1于是有k≥1。這個(gè)結(jié)論也說明了停-等協(xié)議分組序號(hào)只需使用1位編號(hào)就足夠的原因。
事實(shí)上,停-等協(xié)議、GBN協(xié)議或是SR協(xié)議,其信道利用率都可以統(tǒng)一表示為滑動(dòng)窗口協(xié)議的信道利用率:

四、用戶數(shù)據(jù)報(bào)協(xié)議(UDP)
(一)UDP定義
UDP是Internet傳輸層協(xié)議,提供無(wú)連接、不可靠、數(shù)據(jù)報(bào)盡力傳輸服務(wù)。UDP提供一種不可靠數(shù)據(jù)傳輸,不保證將報(bào)文送達(dá)目的地,即使送到了也可能是亂序到達(dá)的。
(二)UDP傳輸協(xié)議的優(yōu)點(diǎn)
雖然UDP提供不可靠傳輸服務(wù),但通過一定的措施,使用UDP仍可以實(shí)現(xiàn)可靠數(shù)據(jù)傳輸。UDP的優(yōu)點(diǎn)如下:
應(yīng)用進(jìn)程更容易控制發(fā)送什么數(shù)據(jù)以及何時(shí)發(fā)送,實(shí)時(shí)性高。
無(wú)需建立連接,傳輸數(shù)據(jù)前不必建立連接,節(jié)省時(shí)間。
無(wú)連接狀態(tài),因不必建立連接,所以不必維護(hù)該連接鏈路,故開銷小。
首部開銷小,相比首部開銷至少有20字節(jié)的TCP報(bào)文段,UDP僅有8字節(jié)。
(三)UDP數(shù)據(jù)報(bào)結(jié)構(gòu)

UDP首部四個(gè)字段:每個(gè)字段由2個(gè)字節(jié)組成,共8個(gè)字節(jié),也就是32位(0~31)。
源端口號(hào)和目的端口號(hào):UDP實(shí)現(xiàn)復(fù)用和分解
長(zhǎng)度:知識(shí)UDP報(bào)文段中的字節(jié)數(shù)(首部和數(shù)據(jù)的總和)
校驗(yàn)和:接收方使用來檢測(cè)數(shù)據(jù)報(bào)是否出現(xiàn)差錯(cuò)
(四)UDP校驗(yàn)和(提供了差錯(cuò)檢測(cè)功能)
校驗(yàn)和計(jì)算規(guī)則:
(1)所有參與運(yùn)算的內(nèi)容按16位對(duì)齊求和.
(2)求和過程中遇到溢出(即進(jìn)位)都被回卷(即進(jìn)位與和的最低位再相加)。
(3)最后得到的和取反碼,就是UDP的校驗(yàn)和,填入U(xiǎn)DP數(shù)據(jù)報(bào)的校驗(yàn)和字段。

所有參與運(yùn)算的內(nèi)容包括3部分:UDP偽首部、UDP首部、應(yīng)用數(shù)據(jù)。

五、傳輸控制協(xié)議(TCP)
(一)TCP定義
TCP是Internet的一個(gè)重要傳輸層協(xié)議,提供面向連接、可靠、有序、字節(jié)流服務(wù)。
TCP是面向連接的傳輸層協(xié)議,并且提供全雙工通信服務(wù),即允許通信雙方的應(yīng)用進(jìn)程在任何時(shí)候都能發(fā)送和接收數(shù)據(jù)。
(二)TCP報(bào)文段結(jié)構(gòu)
特點(diǎn):
1.應(yīng)用進(jìn)程先建立連接。
2.每一條TCP鏈接只有兩個(gè)端點(diǎn)。
3.可靠交付:無(wú)差錯(cuò)、不丟失、不重復(fù)、按序到達(dá)。
4.全雙工通信。
5.面向字節(jié)流。

20字節(jié)固定首部(可選+填充)可以是0-40B
源端口號(hào)字段,目的端口號(hào)字段:占16位。復(fù)用和分解上層應(yīng)用的數(shù)據(jù)
序號(hào)字段、確認(rèn)序號(hào)字段:占32位。
序號(hào)字段:TCP的序號(hào)是對(duì)每個(gè)應(yīng)用層數(shù)據(jù)的每個(gè)字節(jié)進(jìn)行編號(hào)
確認(rèn)序號(hào)字段:期望從對(duì)方接受數(shù)據(jù)的字節(jié)序號(hào),即該序號(hào)對(duì)應(yīng)的字節(jié)尚未收到
首部長(zhǎng)度字段:占4位。指出TCP段的首部長(zhǎng)度,以4字節(jié)為計(jì)算單位
保留字段:占6位。保留為今后使用,目前值為0
URG、ACK、PSH、RST、SYN、FIN各占1位。為標(biāo)志位字段;各占1位,取值為0或1

接收窗口字段:占16位。向?qū)Ψ酵ǜ嫖曳浇邮沾翱诘拇笮?。?shí)現(xiàn)TCP的流量控制。
校驗(yàn)和字段:占16位。計(jì)算方法和UDP相同。
緊急指針字段:占16位。URG=1時(shí),才有效。指出在本TCP報(bào)文段中緊急數(shù)據(jù)共有多少字節(jié)。
選項(xiàng)字段長(zhǎng)度可變,最短0字節(jié),最長(zhǎng)40字節(jié)。
要點(diǎn):
序號(hào)字段:TCP的序號(hào)是對(duì)每個(gè)應(yīng)用層數(shù)據(jù)的每個(gè)字節(jié)進(jìn)行編號(hào)。
確認(rèn)序號(hào)字段:期望從對(duì)方接受數(shù)據(jù)的字節(jié)序號(hào),即該序號(hào)對(duì)應(yīng)的字節(jié)尚未收到。用ack_seq表示。
TCP段的首部長(zhǎng)度最短是20字節(jié)。最長(zhǎng)為60字節(jié)。
(三)TCP連接管理
TCP連接管理包括連接建立與連接拆除。
TCP連接建立通過“三次握手”過程:

(1)第一次握手:客戶端作為連接建立發(fā)起端,選擇客戶端初始序列號(hào)X,向服務(wù)器發(fā)送(SYN=1(建立連接請(qǐng)求控制段),seq=x(表示傳輸?shù)膱?bào)文段的第1個(gè)數(shù)據(jù)字節(jié)的序列號(hào)是x,此序列號(hào)代表整個(gè)報(bào)文段的序號(hào)。))的SYN段??蛻魻顟B(tài)由LISTEN進(jìn)入SYN-SEND(同步發(fā)送)狀態(tài),等待服務(wù)器確認(rèn)。
(2)第二次握手:服務(wù)器收到客戶發(fā)送的SYN段后,選擇服務(wù)器初始序列號(hào)y,向客戶發(fā)送(SYN=1(同意建立新連接的確認(rèn)段),ACK=1(確認(rèn)序號(hào)字段有效),seq=y(服務(wù)器告訴客戶確認(rèn)報(bào)文段的序列號(hào)是y),ack_seq=x+1(服務(wù)器已經(jīng)收到了序列號(hào)為x的報(bào)文段,準(zhǔn)備接受序列號(hào)為x+1的報(bào)文段))的SYNACK段。同時(shí),服務(wù)器狀態(tài)由LISTEN進(jìn)入SYN_RCVD(同步收到)狀態(tài)。
(3)第三次握手:客戶端收到服務(wù)器的SYNACK段后,向服務(wù)器發(fā)送(ACK=1(確認(rèn)序號(hào)字段有效),seq=x+1(客戶此次的報(bào)文段的序列號(hào)是x+1),ack_seq=y+1(客戶期望接受服務(wù)器序列號(hào)為y+1的報(bào)文段))的ACK段,同時(shí),客戶端進(jìn)入ESTABLISHED狀態(tài),客戶端確認(rèn)連接已建立;當(dāng)服務(wù)器收到ACK段后,也進(jìn)入ESTABLISHED狀態(tài),也確認(rèn)連接已建立。至此,雙方均確認(rèn)連接建立成功。
第三次握手克攜帶數(shù)據(jù)。
為什么需要三次握手?
第一次握手:客戶發(fā)送請(qǐng)求,此時(shí)服務(wù)器知道客戶能發(fā)。
第二次握手:服務(wù)器發(fā)送確認(rèn),此時(shí)客戶知道服務(wù)器能發(fā)能收。
第三次握手:客戶發(fā)送確認(rèn),此時(shí)服務(wù)器知道客戶能收。
建立連接過程中客戶端和服務(wù)器端的狀態(tài)名稱與含義:
(1)建立連接過程中客戶端的狀態(tài)名稱含義如下:
①關(guān)閉狀態(tài)CLOSED,處于初始狀態(tài);
②同步已發(fā)送狀態(tài)SYN_SENT;
③已建立狀態(tài)ESTABLISHED,表示可以傳送數(shù)據(jù)。
(2)建立連接過程中服務(wù)器端的狀態(tài)名稱與含義:
①關(guān)閉狀態(tài)CLOSED,處于初始狀態(tài);
②監(jiān)聽狀態(tài)LISTEN;
③同步收到狀態(tài)SYN_RCVD;
④已建立狀態(tài)ESTABLISHED,表示可以傳送數(shù)據(jù)。
TCP斷開連接的過程(四次揮手):TCP連接采用四次揮手的對(duì)稱斷連機(jī)制:

(1)第一次揮手。當(dāng)客戶向服務(wù)器發(fā)送完最后一個(gè)數(shù)據(jù)段后,可以發(fā)送一個(gè)FIN段(FIN=1(發(fā)送端數(shù)據(jù)發(fā)送完畢,請(qǐng)求釋放連接),seq=u(傳輸?shù)牡谝粋€(gè)數(shù)據(jù)字節(jié)的序號(hào)是u)),請(qǐng)求斷開連接,其狀態(tài)由ESTABLISHED進(jìn)入FIN_WAIT_1(終止等待1狀態(tài)),只能接受數(shù)據(jù),不能發(fā)送數(shù)據(jù)。(FIN段不封裝應(yīng)用層數(shù)據(jù),但是也要消耗1個(gè)序列號(hào))
(2)第二次揮手。服務(wù)器收到客戶的FIN段后,向客戶發(fā)送一個(gè)ACK段(ACK=1(確認(rèn)序號(hào)字段有效),seq=v(服務(wù)器傳輸?shù)臄?shù)據(jù)序號(hào)是v),ack_seq=u+1(服務(wù)器期望接收客戶數(shù)據(jù)序號(hào)為u+1))。服務(wù)器狀態(tài)由ESTABLISHED進(jìn)入CLOSE_WAIT(關(guān)閉等待),服務(wù)器仍然可以發(fā)送數(shù)據(jù),但不再接受數(shù)據(jù)。當(dāng)客戶收到ACK段后,其狀態(tài)由FIN_WAIT_1進(jìn)入FIN_WAIT_2,可以接受服務(wù)器的數(shù)據(jù),此時(shí)處于半關(guān)閉狀態(tài)。
(3)第三次揮手。當(dāng)服務(wù)器向客戶發(fā)送完最后一個(gè)數(shù)據(jù)段后,服務(wù)器向客戶發(fā)送FIN段(FIN=1(請(qǐng)求釋放連接),ACK=1(確認(rèn)序號(hào)字段有效),seq=w(表示自己傳輸?shù)牡谝粋€(gè)數(shù)據(jù)字節(jié)的序號(hào)是w),ack_seq=u+1(表示自己傳輸?shù)牡谝粋€(gè)數(shù)據(jù)字節(jié)的序號(hào)是u+1)),該FIN段也不攜帶應(yīng)用層數(shù)據(jù)。服務(wù)器狀態(tài)由CLOSE_WAIT進(jìn)入LAST_ACK(最后確認(rèn)狀態(tài)),此時(shí)服務(wù)器也不再發(fā)送數(shù)據(jù)。
(4)第四次揮手。當(dāng)客戶收到服務(wù)器發(fā)送的FIN段后,向服務(wù)器發(fā)送ACK段(ACK=1(確認(rèn)序號(hào)字段有效),seq=u+1(表示客戶傳輸?shù)臄?shù)據(jù)的序號(hào)是u+1),ack_seq=w+1(表示客戶期望接收服務(wù)器數(shù)據(jù)序號(hào)w+1)),其狀態(tài)由FIN_WAIT_2進(jìn)入TIME_WAIT,等待2MSL時(shí)間,進(jìn)入CLOSED狀態(tài),最終釋放連接;服務(wù)器在收到最后一次ACK段后,狀態(tài)由LAST_ACK進(jìn)入CLOSED,最終釋放連接。
斷開連接過程中,客戶端和服務(wù)器端狀態(tài)名稱與含義:
(1)斷開連接過程中,客戶端狀態(tài)名稱與含義如下:
①ESTABLISHED狀態(tài),表示可以傳送數(shù)據(jù);
②FIN_WAIT_1終止等待1狀態(tài),等待服務(wù)器端的確認(rèn);
③FIN_WAIT_2終止等待2狀態(tài),等待服務(wù)器發(fā)出的連接釋放報(bào)文段;
④TIME_WAIT時(shí)間等待狀態(tài),表示等待2倍MSL時(shí)間后進(jìn)入關(guān)閉狀態(tài)CLOSED。(MSL是最大段生存時(shí)間,是任何TCP段被丟棄前在網(wǎng)絡(luò)內(nèi)“存活”的最長(zhǎng)時(shí)間。TCP規(guī)范[RFC793]規(guī)定的MSL是2min)。
(2)斷開連接過程中,服務(wù)器端狀態(tài)名稱與含義:
①ESTABLISHED,表示可以傳送數(shù)據(jù);
②CLOSED_WAIT關(guān)閉等待狀態(tài);
③LAST_ACK最后確認(rèn)狀態(tài);
④CLOSED關(guān)閉狀態(tài)。
(四)TCP可靠數(shù)據(jù)傳輸
TCP的可靠數(shù)據(jù)傳輸服務(wù)保證了傳輸?shù)臄?shù)據(jù)流是無(wú)差錯(cuò)、無(wú)缺失、無(wú)冗余以及無(wú)亂碼的字節(jié)流,可靠數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)機(jī)制包括:差錯(cuò)編碼、確認(rèn)、序號(hào)、重傳、計(jì)時(shí)器等。重傳數(shù)據(jù)段的具體事件有計(jì)時(shí)器超時(shí)和收到三次重復(fù)ACK等。
滑動(dòng)窗口協(xié)議
1.可靠:保證接受方應(yīng)用進(jìn)程從緩沖區(qū)讀出的字節(jié)流與發(fā)送方發(fā)出的字節(jié)流是完全一樣的(無(wú)差錯(cuò)、不丟失、不重復(fù)、按序到達(dá))。
2.TCP實(shí)現(xiàn)可靠數(shù)據(jù)傳輸服務(wù)的工作機(jī)制。
分段:應(yīng)用層數(shù)據(jù)成TCP認(rèn)為最適合發(fā)送的數(shù)據(jù)塊
應(yīng)用層:報(bào)文=》傳輸層:TCP報(bào)文段
最大報(bào)文段(MSS):報(bào)文段中封裝的應(yīng)用層數(shù)據(jù)的最大長(zhǎng)度(數(shù)據(jù))
序號(hào):發(fā)送方對(duì)發(fā)送的數(shù)據(jù)包進(jìn)行編號(hào),確保數(shù)據(jù)按序提交給接收方
確認(rèn):接收方向發(fā)送方反饋接收狀態(tài),確認(rèn)是否正確接收數(shù)據(jù)
TCP通常采用的是累積確認(rèn)
查錯(cuò)檢測(cè):利用差錯(cuò)編碼實(shí)現(xiàn)數(shù)據(jù)報(bào)傳輸過程中的比特差錯(cuò)檢測(cè)(甚至糾正)
重傳:發(fā)送方重新發(fā)送接收方?jīng)]有正確接收的數(shù)據(jù)
主要針對(duì)兩類事件:三次重復(fù)確認(rèn)和計(jì)時(shí)器超時(shí)
計(jì)時(shí)器:再發(fā)送方引入計(jì)時(shí)器,解決數(shù)據(jù)丟失問題
計(jì)時(shí)器超時(shí)時(shí)間設(shè)置:
TimeoutInterval=EstimatedRTT+4*DevRTT
EstimatedRTT:抽樣RTT的加權(quán)移動(dòng)平均值
DevRTT:偏差RTT
4.流量控制
協(xié)調(diào)發(fā)送方與接收方的數(shù)據(jù)發(fā)送與接受速度
在通信過程中,接收方設(shè)置報(bào)文段的接收窗口字段來將窗口大小通知給發(fā)送方
TCP的可靠數(shù)據(jù)傳輸是基于滑動(dòng)窗口協(xié)議,根據(jù)發(fā)送窗口大小動(dòng)態(tài)變化。
(五)TCP流量控制:流量控制的目的是協(xié)調(diào)發(fā)送方與接收方間的數(shù)據(jù)發(fā)送和接收速度,避免發(fā)送方發(fā)送數(shù)據(jù)的速度太快,超出接收方的數(shù)據(jù)接收和處理能力,導(dǎo)致數(shù)據(jù)丟失等問題。實(shí)現(xiàn)流量控制的方法可以采用停 - 等協(xié)議或滑動(dòng)窗口協(xié)議來實(shí)現(xiàn)。
在通信過程中,接收方設(shè)置報(bào)文段的接收窗口字段來將窗口大小通知給發(fā)送方。
(六)TCP擁塞控制
擁塞:太多的主機(jī)以太快的速度向網(wǎng)絡(luò)中發(fā)送太多的數(shù)據(jù),超出了網(wǎng)絡(luò)處理能力,導(dǎo)致大量數(shù)據(jù)分組擁擠在中間設(shè)備隊(duì)列中等待轉(zhuǎn)發(fā),網(wǎng)絡(luò)性能顯著下降的現(xiàn)象。
擁塞控制:通過合理調(diào)度、規(guī)范、調(diào)整向網(wǎng)絡(luò)中發(fā)送數(shù)據(jù)的主機(jī)數(shù)量、發(fā)送速率、數(shù)據(jù)量,以避免擁塞或消除已發(fā)生的擁塞。
擁塞預(yù)防策略:規(guī)范主機(jī)向網(wǎng)絡(luò)發(fā)送數(shù)據(jù)的流量。
TCP的擁塞控制算法包括了慢啟動(dòng)、擁塞避免、快速重傳和快速恢復(fù)四部分。

RTT:圖表中的橫軸RTT表示時(shí)間,發(fā)送方發(fā)送數(shù)據(jù)并接收到接收方對(duì)這個(gè)數(shù)據(jù)的ACK確認(rèn)信息,這段時(shí)間稱為一個(gè)RTT;
擁塞窗口:滑動(dòng)窗口的大小,單位為MSS;
慢啟動(dòng)階段:通常擁塞窗口的初值為1,在慢啟動(dòng)階段(圖表中0~4和13~17RTT),每收到一個(gè)確認(rèn)ACK,擁塞窗口增加1MSS,每經(jīng)過一個(gè)RTT,擁塞窗口增長(zhǎng)1倍;
擁塞避免:通常閥值的初值為16(如圖所示),當(dāng)閥值增長(zhǎng)到16MSS時(shí)進(jìn)入第一個(gè)擁塞避免階段(圖表4~12RTT);在擁塞避免階段,每經(jīng)過一個(gè)RTT,閥值才增加一個(gè)MSS;

快速恢復(fù):在擁塞避免階段,若發(fā)送方收到3次重復(fù)的ACK(圖表中TCP Reno版本所示),則說明網(wǎng)絡(luò)擁塞,將閥值縮減到一半,然后繼續(xù)進(jìn)入擁塞避免階段。
計(jì)時(shí)器超時(shí):在擁塞避免階段,若發(fā)送方出現(xiàn)計(jì)時(shí)器超時(shí)現(xiàn)象(圖表中TCP Tahoe版本所示),則說明網(wǎng)絡(luò)嚴(yán)重?fù)砣?,直接將閥值縮減到1Mss,然后經(jīng)過慢啟動(dòng)階段到達(dá)縮減前一半的閱值時(shí),進(jìn)入擁塞避免階段。