計(jì)算機(jī)網(wǎng)絡(luò)考試知識(shí)點(diǎn)梳理總結(jié)

傳輸層概
-
作用:傳輸層為它上面的應(yīng)用層提供通信服務(wù)。
-
在OSI七層參考模型中,傳輸層是面向通信的最高層,也是用戶功能的最底層。
-
傳輸層兩大重要的功能:復(fù)用 和 分用。
-
復(fù)用:在發(fā)送端,多個(gè)應(yīng)用進(jìn)程公用一個(gè)傳輸層;
-
分用:在接收端,傳輸層會(huì)根據(jù)端口號(hào)將數(shù)據(jù)分派給不同的應(yīng)用進(jìn)程。
-
-
和網(wǎng)絡(luò)層的區(qū)別:
-
網(wǎng)絡(luò)層為不同主機(jī)提供通信服務(wù),而傳輸層為不同主機(jī)的不同應(yīng)用提供通信服務(wù)。
-
網(wǎng)絡(luò)層只對(duì)報(bào)文頭部進(jìn)行差錯(cuò)檢測(cè),而傳輸層對(duì)整個(gè)報(bào)文進(jìn)行差錯(cuò)檢測(cè)。
-
UDP(用戶數(shù)據(jù)報(bào)協(xié)議)詳解
UDP的特點(diǎn)
-
UDP只在IP數(shù)據(jù)報(bào)服務(wù)的基礎(chǔ)上增加了少量的功能:復(fù)用與分用、對(duì)整個(gè)報(bào)文的差錯(cuò)檢測(cè)。
-
UDP是無(wú)連接的
通信前不需要建立連接,通信結(jié)束也無(wú)需釋放連接。
-
UDP是不可靠的
它是盡力而為交付,不能確保每一個(gè)數(shù)據(jù)報(bào)都送達(dá)。
-
UDP是面向報(bào)文的
所謂『面向報(bào)文』就是指:UDP數(shù)據(jù)傳輸?shù)膯挝皇菆?bào)文,且不會(huì)對(duì)數(shù)據(jù)作任何 拆分 和 拼接 操作。
在發(fā)送端,應(yīng)用程序給傳輸層的UDP什么樣的數(shù)據(jù),UDP不會(huì)對(duì)數(shù)據(jù)進(jìn)行切分,只增加一個(gè)UDP頭并交給網(wǎng)絡(luò)層。
在接收端,UDP收到網(wǎng)絡(luò)層的數(shù)據(jù)報(bào)后,去除IP數(shù)據(jù)報(bào)頭部后遍交給應(yīng)用層,不會(huì)作任何拼接操作。
-
UDP沒(méi)有擁塞控制
UDP始終以恒定的速率發(fā)送數(shù)據(jù),并不會(huì)根據(jù)網(wǎng)絡(luò)擁塞情況對(duì)發(fā)送速率作調(diào)整。這種方式有利有弊。
弊端:網(wǎng)絡(luò)擁塞時(shí)有些報(bào)文可能會(huì)丟失,因此UDP不可靠。
優(yōu)點(diǎn):有些使用場(chǎng)景允許報(bào)文丟失,如:直播、語(yǔ)音通話,但對(duì)實(shí)時(shí)性要求很高,此時(shí)UDP還是很有用武之地的。
-
UDP支持一對(duì)一、一對(duì)多、多對(duì)多、多對(duì)一通信
而TCP只支持一對(duì)一通信。
-
UDP首部開(kāi)銷(xiāo)小,只有8字節(jié)。
而TCP頭部至少由20字節(jié),相比于TCP要高效很多。
PS:?jiǎn)枺篣DP不可靠具體體現(xiàn)在哪些方面?數(shù)據(jù)報(bào)丟失?數(shù)據(jù)報(bào)順序?
UDP報(bào)文頭
-
源端口
-
目的端口
-
長(zhǎng)度:整個(gè)數(shù)據(jù)報(bào)的長(zhǎng)度
-
檢驗(yàn)和:整個(gè)數(shù)據(jù)報(bào)的檢驗(yàn)和。
TCP(傳輸控制協(xié)議)詳解
TCP特點(diǎn)
-
TCP是面向連接的
通信前需要建立連接,通信結(jié)束需要釋放連接。
-
TCP提供可靠交付服務(wù)
所謂『可靠』指的是:TCP發(fā)送的數(shù)據(jù)無(wú)重復(fù)、無(wú)丟失、無(wú)錯(cuò)誤、與發(fā)送端順序一致。
-
TCP是面向字節(jié)流的
所謂『面向字節(jié)流』指的是:TCP以字節(jié)為單位。雖然傳輸?shù)倪^(guò)程中數(shù)據(jù)被劃分成一個(gè)個(gè)數(shù)據(jù)報(bào),但這只是為了方便傳輸,接收端最終接受到的數(shù)據(jù)將與發(fā)送端的數(shù)據(jù)一模一樣。
-
TCP提供全雙工通信
所謂『全雙工通信』指的是:TCP的兩端既可以作為發(fā)送端,也可以作為接收端。
-
一條TCP連接的兩端只能有兩個(gè)端點(diǎn)
TCP只能提供點(diǎn)到點(diǎn)的通信,而UDP可以任意方式的通信。
TCP連接 與 套接字
-
什么是『TCP連接』?
TCP連接是一種抽象的概念,表示一條可以通信的鏈路。每條TCP連接有且僅有兩個(gè)端點(diǎn),表示通信的雙方。且雙發(fā)在任意時(shí)刻都可以作為發(fā)送者和接收者。
-
什么是『套接字』?
一條TCP連接的兩端就是兩個(gè)套接字。套接字=IP地址: 端口號(hào)。因此,TCP連接=(套接字1,套接字2)=(IP1:端口號(hào)1,IP2:端口號(hào)2)
TCP頭部
TCP頭部長(zhǎng)度有20字節(jié)的固定部分,選項(xiàng)部分長(zhǎng)度不定,但最多40字節(jié),因此TCP頭部在20-60字節(jié)之間。
-
源端口 和 目的端口
傳輸層和網(wǎng)絡(luò)層一大重要區(qū)別就是傳輸層指定了數(shù)據(jù)報(bào)發(fā)往的應(yīng)用進(jìn)程,因此需要端口號(hào)標(biāo)識(shí)。
-
序號(hào)
當(dāng)前TCP數(shù)據(jù)報(bào)數(shù)據(jù)部分的第一個(gè)字節(jié)的序號(hào)。我們知道,TCP是面向字節(jié)的,它會(huì)對(duì)發(fā)送的每一個(gè)字節(jié)進(jìn)行編號(hào),而且不同數(shù)據(jù)報(bào)之間是連續(xù)編號(hào)的。
由于本字段4字節(jié),可以給[0,2^32-1]個(gè)字節(jié)進(jìn)行編號(hào)(大約4G),而且序號(hào)循環(huán)使用,當(dāng)發(fā)送完2^32-1個(gè)字節(jié)后,序號(hào)又從0開(kāi)始。一般來(lái)說(shuō),當(dāng)2^32-1個(gè)字節(jié)被發(fā)送的時(shí)候,前面的字節(jié)早就發(fā)送成功了,因此序號(hào)可以循環(huán)使用。
-
確認(rèn)號(hào)
表示當(dāng)前主機(jī)作為接收端時(shí),期望接收的下一個(gè)字節(jié)的編號(hào)是多少。也表示,當(dāng)前主機(jī)已經(jīng)正確接收的最后一個(gè)字節(jié)序號(hào)+1。
-
數(shù)據(jù)偏移(報(bào)文長(zhǎng)度)
它表明了數(shù)據(jù)報(bào)頭部的長(zhǎng)度。
-
保留字段
-
標(biāo)識(shí)符
TCP有7種標(biāo)識(shí)符,用于表示TCP報(bào)文的性質(zhì)。它們只能為0或1。
-
URG=1
當(dāng)URG字段被置1,表示本數(shù)據(jù)報(bào)的數(shù)據(jù)部分包含緊急信息,此時(shí)緊急指針有效。緊急數(shù)據(jù)一定位于當(dāng)前數(shù)據(jù)包數(shù)據(jù)部分的最前面,緊急指針標(biāo)明了緊急數(shù)據(jù)的尾部。如control+c:這個(gè)命令要求操作系統(tǒng)立即停止當(dāng)前進(jìn)程。此時(shí),這條命令就會(huì)存放在數(shù)據(jù)包數(shù)據(jù)部分的開(kāi)頭,并由緊急指針標(biāo)識(shí)命令的位置,并URG字段被置1。 -
ACK=1
ACK被置1后確認(rèn)號(hào)字段才有效。此外,TCP規(guī)定,在連接建立后傳送的所有報(bào)文段都必須把ACK置1。 -
PSH=1
當(dāng)接收方收到PSH=1的報(bào)文后,會(huì)立即將數(shù)據(jù)交付給應(yīng)用程序,而不會(huì)等到緩沖區(qū)滿后再提交。一些交互式應(yīng)用需要這樣的功能,降低命令的響應(yīng)時(shí)間。 -
RST=1
當(dāng)該值為1時(shí),表示當(dāng)前TCP連接出現(xiàn)嚴(yán)重問(wèn)題,必須要釋放重連。 -
SYN=1
SYN在建立連接時(shí)使用。當(dāng)SYN=1,ACK=0時(shí),表示當(dāng)前報(bào)文段是一個(gè)連接請(qǐng)求報(bào)文。當(dāng)SYN=1,ACK=1時(shí),表示當(dāng)前報(bào)文段是一個(gè)同意建立連接的應(yīng)答報(bào)文。 -
FIN=1
FIN=1表示此報(bào)文段是一個(gè)釋放連接的請(qǐng)求報(bào)文。
-
接收窗口大小
該字段用于實(shí)現(xiàn)TCP的流量控制。它表示當(dāng)前接收方的接收窗口的剩余容量,發(fā)送方收到該值后會(huì)將發(fā)送窗口調(diào)整成該值的大小。發(fā)送窗口的大小又決定了發(fā)送速率,所以接收方通過(guò)設(shè)置該值就可以控制發(fā)送放的發(fā)送速率。發(fā)送方每收到一個(gè)數(shù)據(jù)報(bào)都要調(diào)整當(dāng)前的發(fā)送窗口。
-
檢驗(yàn)和
用于接收端檢驗(yàn)整個(gè)數(shù)據(jù)包在傳輸過(guò)程中是否出錯(cuò)。
-
緊急指針
用于標(biāo)識(shí)緊急數(shù)據(jù)的尾部。
-
選項(xiàng)字段
上述字段都是每個(gè)TCP頭部必須要有的,而選項(xiàng)字段是可選的,且長(zhǎng)度可變,最長(zhǎng)40字節(jié)。
最常用的選項(xiàng)字段為MMS:最大報(bào)文長(zhǎng)度。
TCP三次握手
PS:TCP協(xié)議中,主動(dòng)發(fā)起請(qǐng)求的一端稱為『客戶端』,被動(dòng)連接的一端稱為『服務(wù)端』。不管是客戶端還是服務(wù)端,TCP連接建立完后都能發(fā)送和接收數(shù)據(jù)。
起初,服務(wù)器和客戶端都為CLOSED狀態(tài)。在通信開(kāi)始前,雙方都得創(chuàng)建各自的傳輸控制塊(TCB)。
服務(wù)器創(chuàng)建完TCB后遍進(jìn)入LISTEN狀態(tài),此時(shí)準(zhǔn)備接收客戶端發(fā)來(lái)的連接請(qǐng)求。
第一次握手
客戶端向服務(wù)端發(fā)送連接請(qǐng)求報(bào)文段。該報(bào)文段的頭部中SYN=1,ACK=0,seq=x。請(qǐng)求發(fā)送后,客戶端便進(jìn)入SYN-SENT狀態(tài)。
-
PS1:SYN=1,ACK=0表示該報(bào)文段為連接請(qǐng)求報(bào)文。
-
PS2:x為本次TCP通信的字節(jié)流的初始序號(hào)。
TCP規(guī)定:SYN=1的報(bào)文段不能有數(shù)據(jù)部分,但要消耗掉一個(gè)序號(hào)。
第二次握手
服務(wù)端收到連接請(qǐng)求報(bào)文段后,如果同意連接,則會(huì)發(fā)送一個(gè)應(yīng)答:SYN=1,ACK=1,seq=y,ack=x+1。該應(yīng)答發(fā)送完成后便進(jìn)入SYN-RCVD狀態(tài)。
-
PS1:SYN=1,ACK=1表示該報(bào)文段為連接同意的應(yīng)答報(bào)文。
-
PS2:seq=y表示服務(wù)端作為發(fā)送者時(shí),發(fā)送字節(jié)流的初始序號(hào)。
-
PS3:ack=x+1表示服務(wù)端希望下一個(gè)數(shù)據(jù)報(bào)發(fā)送序號(hào)從x+1開(kāi)始的字節(jié)。
第三次握手
當(dāng)客戶端收到連接同意的應(yīng)答后,還要向服務(wù)端發(fā)送一個(gè)確認(rèn)報(bào)文段,表示:服務(wù)端發(fā)來(lái)的連接同意應(yīng)答已經(jīng)成功收到。該報(bào)文段的頭部為:ACK=1,seq=x+1,ack=y+1。
客戶端發(fā)完這個(gè)報(bào)文段后便進(jìn)入ESTABLISHED狀態(tài),服務(wù)端收到這個(gè)應(yīng)答后也進(jìn)入ESTABLISHED狀態(tài),此時(shí)連接的建立完成!
為什么連接建立需要三次握手,而不是兩次握手?
防止失效的連接請(qǐng)求報(bào)文段被服務(wù)端接收,從而產(chǎn)生錯(cuò)誤。
PS:失效的連接請(qǐng)求:若客戶端向服務(wù)端發(fā)送的連接請(qǐng)求丟失,客戶端等待應(yīng)答超時(shí)后就會(huì)再次發(fā)送連接請(qǐng)求,此時(shí),上一個(gè)連接請(qǐng)求就是『失效的』。
若建立連接只需兩次握手,客戶端并沒(méi)有太大的變化,仍然需要獲得服務(wù)端的應(yīng)答后才進(jìn)入ESTABLISHED狀態(tài),而服務(wù)端在收到連接請(qǐng)求后就進(jìn)入ESTABLISHED狀態(tài)。此時(shí)如果網(wǎng)絡(luò)擁塞,客戶端發(fā)送的連接請(qǐng)求遲遲到不了服務(wù)端,客戶端便超時(shí)重發(fā)請(qǐng)求,如果服務(wù)端正確接收并確認(rèn)應(yīng)答,雙方便開(kāi)始通信,通信結(jié)束后釋放連接。此時(shí),如果那個(gè)失效的連接請(qǐng)求抵達(dá)了服務(wù)端,由于只有兩次握手,服務(wù)端收到請(qǐng)求就會(huì)進(jìn)入ESTABLISHED狀態(tài),等待發(fā)送數(shù)據(jù)或主動(dòng)發(fā)送數(shù)據(jù)。但此時(shí)的客戶端早已進(jìn)入CLOSED狀態(tài),服務(wù)端將會(huì)一直等待下去,這樣浪費(fèi)服務(wù)端連接資源。
TCP四次揮手
TCP連接的釋放一共需要四步,因此稱為『四次揮手』。我們知道,TCP連接是雙向的,因此在四次揮手中,前兩次揮手用于斷開(kāi)一個(gè)方向的連接,后兩次揮手用于斷開(kāi)另一方向的連接。
第一次揮手
若A認(rèn)為數(shù)據(jù)發(fā)送完成,則它需要向B發(fā)送連接釋放請(qǐng)求。該請(qǐng)求只有報(bào)文頭,頭中攜帶的主要參數(shù)為:FIN=1,seq=u。此時(shí),A將進(jìn)入FIN-WAIT-1狀態(tài)。
-
PS1:FIN=1表示該報(bào)文段是一個(gè)連接釋放請(qǐng)求。
-
PS2:seq=u,u-1是A向B發(fā)送的最后一個(gè)字節(jié)的序號(hào)。
第二次揮手
B收到連接釋放請(qǐng)求后,會(huì)通知相應(yīng)的應(yīng)用程序,告訴它A向B這個(gè)方向的連接已經(jīng)釋放。此時(shí)B進(jìn)入CLOSE-WAIT狀態(tài),并向A發(fā)送連接釋放的應(yīng)答,其報(bào)文頭包含:ACK=1,seq=v,ack=u+1。
-
PS1:ACK=1:除TCP連接請(qǐng)求報(bào)文段以外,TCP通信過(guò)程中所有數(shù)據(jù)報(bào)的ACK都為1,表示應(yīng)答。
-
PS2:seq=v,v-1是B向A發(fā)送的最后一個(gè)字節(jié)的序號(hào)。
-
PS3:ack=u+1表示希望收到從第u+1個(gè)字節(jié)開(kāi)始的報(bào)文段,并且已經(jīng)成功接收了前u個(gè)字節(jié)。
A收到該應(yīng)答,進(jìn)入FIN-WAIT-2狀態(tài),等待B發(fā)送連接釋放請(qǐng)求。
第二次揮手完成后,A到B方向的連接已經(jīng)釋放,B不會(huì)再接收數(shù)據(jù),A也不會(huì)再發(fā)送數(shù)據(jù)。但B到A方向的連接仍然存在,B可以繼續(xù)向A發(fā)送數(shù)據(jù)。
第三次揮手
當(dāng)B向A發(fā)完所有數(shù)據(jù)后,向A發(fā)送連接釋放請(qǐng)求,請(qǐng)求頭:FIN=1,ACK=1,seq=w,ack=u+1。B便進(jìn)入LAST-ACK狀態(tài)。
第四次揮手
A收到釋放請(qǐng)求后,向B發(fā)送確認(rèn)應(yīng)答,此時(shí)A進(jìn)入TIME-WAIT狀態(tài)。該狀態(tài)會(huì)持續(xù)2MSL時(shí)間,若該時(shí)間段內(nèi)沒(méi)有B的重發(fā)請(qǐng)求的話,就進(jìn)入CLOSED狀態(tài),撤銷(xiāo)TCB。當(dāng)B收到確認(rèn)應(yīng)答后,也便進(jìn)入CLOSED狀態(tài),撤銷(xiāo)TCB。
為什么A要先進(jìn)入TIME-WAIT狀態(tài),等待2MSL時(shí)間后才進(jìn)入CLOSED狀態(tài)?
為了保證B能收到A的確認(rèn)應(yīng)答。若A發(fā)完確認(rèn)應(yīng)答后直接進(jìn)入CLOSED狀態(tài),那么如果該應(yīng)答丟失,B等待超時(shí)后就會(huì)重新發(fā)送連接釋放請(qǐng)求,但此時(shí)A已經(jīng)關(guān)閉了,不會(huì)作出任何響應(yīng),因此B永遠(yuǎn)無(wú)法正常關(guān)閉。
TCP可靠傳輸?shù)膶?shí)現(xiàn)
TCP的可靠性表現(xiàn)在:它向應(yīng)用層提供的數(shù)據(jù)是 無(wú)差錯(cuò)的、有序的、無(wú)丟失的,簡(jiǎn)單的說(shuō)就是:TCP最終遞交給應(yīng)用層的數(shù)據(jù)和發(fā)送者發(fā)送的數(shù)據(jù)是一模一樣的。TCP采用了流量控制、擁塞控制、連續(xù)ARQ等技術(shù)來(lái)保證它的可靠性。
PS:網(wǎng)絡(luò)層傳輸?shù)臄?shù)據(jù)單元為『數(shù)據(jù)報(bào)』,傳輸層的數(shù)據(jù)單元為『報(bào)文段』,但為了方便起見(jiàn),可以統(tǒng)稱為『分組』。
停止等待協(xié)議(ARQ協(xié)議)
TCP保證其可靠性采用的是更為復(fù)雜的滑動(dòng)窗口協(xié)議,但停止等待協(xié)議是它的簡(jiǎn)化版,為了方便理解,這里先介紹停止等待協(xié)議。
-
AQR協(xié)議
ARQ(Automatic Repeat reQuest)自動(dòng)重傳請(qǐng)求。顧名思義,當(dāng)請(qǐng)求失敗時(shí)它會(huì)自動(dòng)重傳,直到請(qǐng)求被正確接收為止。這種機(jī)制保證了每個(gè)分組都能被正確接收。停止等待協(xié)議是一種ARQ協(xié)議。
-
停止等待協(xié)議的原理
-
無(wú)差錯(cuò)的情況
A向B每發(fā)送一個(gè)分組,都要停止發(fā)送,等待B的確認(rèn)應(yīng)答;A只有收到了B的確認(rèn)應(yīng)答后才能發(fā)送下一個(gè)分組。
-
分組丟失和出現(xiàn)差錯(cuò)的情況
發(fā)送者擁有超時(shí)計(jì)時(shí)器。每發(fā)送一個(gè)分組便會(huì)啟動(dòng)超時(shí)計(jì)時(shí)器,等待B的應(yīng)答。若超時(shí)仍未收到應(yīng)答,則A會(huì)重發(fā)剛才的分組。
分組出現(xiàn)差錯(cuò):若B收到分組,但通過(guò)檢查和字段發(fā)現(xiàn)分組在運(yùn)輸途中出現(xiàn)差錯(cuò),它會(huì)直接丟棄該分組,并且不會(huì)有任何其他動(dòng)作。A超時(shí)后便會(huì)重新發(fā)送該分組,直到B正確接收為止。
分組丟失:若分組在途中丟失,B并沒(méi)有收到分組,因此也不會(huì)有任何響應(yīng)。當(dāng)A超時(shí)后也會(huì)重傳分組,直到正確接收該分組的應(yīng)答為止。
綜上所述:當(dāng)分組丟失 或 出現(xiàn)差錯(cuò) 的情況下,A都會(huì)超時(shí)重傳分組。
-
應(yīng)答丟失 和 應(yīng)答遲到 的情況
TCP會(huì)給每個(gè)字節(jié)都打上序號(hào),用于判斷該分組是否已經(jīng)接收。
應(yīng)答丟失:若B正確收到分組,并已經(jīng)返回應(yīng)答,但應(yīng)答在返回途中丟失了。此時(shí)A也收不到應(yīng)答, 從而超時(shí)重傳。緊接著B(niǎo)又收到了該分組。接收者根據(jù)序號(hào)來(lái)判斷當(dāng)前收到的分組是否已經(jīng)接收,若已接收則直接丟棄,并補(bǔ)上一個(gè)確認(rèn)應(yīng)答。
應(yīng)答遲到:若由于網(wǎng)絡(luò)擁塞,A遲遲收不到B發(fā)送的應(yīng)答,因此會(huì)超時(shí)重傳。B收到該分組后,發(fā)現(xiàn)已經(jīng)接收,便丟棄該分組,并向A補(bǔ)上確認(rèn)應(yīng)答。A收到應(yīng)答后便繼續(xù)發(fā)送下一個(gè)分組。但經(jīng)過(guò)了很長(zhǎng)時(shí)間后,那個(gè)失效的應(yīng)答最終抵達(dá)了A,此時(shí)A可根據(jù)序號(hào)判斷該分組已經(jīng)接收,此時(shí)只需簡(jiǎn)單丟棄即可。
-
-
停止等待協(xié)議的注意點(diǎn)
-
每發(fā)送完一個(gè)分組,該分組必須被保留,直到收到確認(rèn)應(yīng)答為止。
-
必須給每個(gè)分組進(jìn)行編號(hào)。以便按序接收,并判斷該分組是否已被接收。
-
必須設(shè)置超時(shí)計(jì)時(shí)器。每發(fā)送一個(gè)分組就要啟動(dòng)計(jì)時(shí)器,超時(shí)就要重發(fā)分組。
-
計(jì)時(shí)器的超時(shí)時(shí)間要大于應(yīng)答的平均返回時(shí)間,否則會(huì)出現(xiàn)很多不必要的重傳,降低傳輸效率。但超時(shí)時(shí)間也不能太長(zhǎng)。
-
滑動(dòng)窗口協(xié)議(連續(xù)ARQ協(xié)議)
-
連續(xù)ARQ協(xié)議
在ARQ協(xié)議發(fā)送者每次只能發(fā)送一個(gè)分組,在應(yīng)答到來(lái)前必須等待。而連續(xù)ARQ協(xié)議的發(fā)送者擁有一個(gè)發(fā)送窗口,發(fā)送者可以在沒(méi)有得到應(yīng)答的情況下連續(xù)發(fā)送窗口中的分組。這樣降低了等待時(shí)間,提高了傳輸效率。
-
累計(jì)確認(rèn)
在連續(xù)ARQ協(xié)議中,接收者也有個(gè)接收窗口,接收者并不需要每收到一個(gè)分組就返回一個(gè)應(yīng)答,可以連續(xù)收到分組之后統(tǒng)一返回一個(gè)應(yīng)答。這樣能節(jié)省流量。TCP頭部的ack字段就是用來(lái)累計(jì)確認(rèn),它表示已經(jīng)確認(rèn)的字節(jié)序號(hào)+1,也表示期望發(fā)送者發(fā)送的下一個(gè)分組的起始字節(jié)號(hào)。
-
發(fā)送窗口
發(fā)送窗口的大小由接收窗口的剩余大小決定。接收者會(huì)把當(dāng)前接收窗口的剩余大小寫(xiě)入應(yīng)答TCP報(bào)文段的頭部,發(fā)送者收到應(yīng)答后根據(jù)該值和當(dāng)前網(wǎng)絡(luò)擁塞情況設(shè)置發(fā)送窗口的大小。發(fā)送窗口的大小是不斷變化的。發(fā)送窗口由三個(gè)指針構(gòu)成:
發(fā)送者每收到一個(gè)應(yīng)答,后沿就可以向前移動(dòng)指定的字節(jié)。此時(shí)若窗口大小仍然沒(méi)變,前沿也可以向前移動(dòng)指定字節(jié)。當(dāng)p2和前沿重合時(shí),發(fā)送者必須等待確認(rèn)應(yīng)答。
-
p1
p1指向發(fā)送窗口的后沿,它后面的字節(jié)表示已經(jīng)發(fā)送且已收到應(yīng)答。 -
p2
p2指向尚未發(fā)送的第一個(gè)字節(jié)。p1-p2間的字節(jié)表示已經(jīng)發(fā)送,但還沒(méi)收到確認(rèn)應(yīng)答。這部分的字節(jié)仍需保留,因?yàn)榭赡苓€要超時(shí)重發(fā)。p2-p3間的字節(jié)表示可以發(fā)送,但還沒(méi)有發(fā)送的字節(jié)。 -
p3
p3指向發(fā)送窗口的前沿,它前面的字節(jié)尚未發(fā)送,且不允許發(fā)送。
-
-
接收窗口
-
接收者收到的字節(jié)會(huì)存入接收窗口,接收者會(huì)對(duì)已經(jīng)正確接收的有序字節(jié)進(jìn)行累計(jì)確認(rèn),發(fā)送完確認(rèn)應(yīng)答后,接收窗口就可以向前移動(dòng)指定字節(jié)。
如果某些字節(jié)并未按序收到,接收者只會(huì)確認(rèn)最后一個(gè)有序的字節(jié),從而亂序的字節(jié)就會(huì)被重新發(fā)送。
-
連續(xù)ARQ的注意點(diǎn)
-
同一時(shí)刻發(fā)送窗口的大小并不一定和接收窗口一樣大。雖然發(fā)送窗口的大小是根據(jù)接收窗口的大小來(lái)設(shè)定的,但應(yīng)答在網(wǎng)絡(luò)中傳輸是有時(shí)間的,有可能t1時(shí)間接收窗口大小為m,但當(dāng)確認(rèn)應(yīng)答抵達(dá)發(fā)送者時(shí),接收窗口的大小已經(jīng)發(fā)生了變化。此外發(fā)送窗口的大小還隨網(wǎng)絡(luò)擁塞情況影響。當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞時(shí),發(fā)送窗口將被調(diào)小。
-
TCP標(biāo)準(zhǔn)并未規(guī)定未按序到達(dá)的字節(jié)的處理方式。但TCP一般都會(huì)緩存這些字節(jié),等缺少的字節(jié)到達(dá)后再交給應(yīng)用層處理。這比直接丟棄亂序的字節(jié)要節(jié)約帶寬。
-
TCP標(biāo)準(zhǔn)規(guī)定接收方必須要有累計(jì)確認(rèn)功能。接收方可以對(duì)多個(gè)TCP報(bào)文段同時(shí)確認(rèn),但不能拖太長(zhǎng)時(shí)間,一般是0.5S以內(nèi)。此外,TCP允許接收者在有數(shù)據(jù)要發(fā)送的時(shí)候捎帶上確認(rèn)應(yīng)答。但這種情況一般較少,因?yàn)橐话愫苌儆袃蓚€(gè)方向都要發(fā)送數(shù)據(jù)的情況。
流量控制
-
什么是流量控制?
如果發(fā)送者發(fā)送過(guò)快,接收者來(lái)不及接收,那么就會(huì)有分組丟失。為了避免分組丟失,控制發(fā)送者的發(fā)送速度,使得接收者來(lái)得及接收,這就是流量控制。
-
流量控制的目的?
流量控制根本目的是防止分組丟失,它是構(gòu)成TCP可靠性的一方面。
-
如何實(shí)現(xiàn)流量控制?
由滑動(dòng)窗口協(xié)議(連續(xù)ARQ協(xié)議)實(shí)現(xiàn)。滑動(dòng)窗口協(xié)議既保證了分組無(wú)差錯(cuò)、有序接收,也實(shí)現(xiàn)了流量控制。
-
流量控制引發(fā)的死鎖
當(dāng)發(fā)送者收到了一個(gè)窗口為0的應(yīng)答,發(fā)送者便停止發(fā)送,等待接收者的下一個(gè)應(yīng)答。但是如果這個(gè)窗口不為0的應(yīng)答在傳輸過(guò)程丟失,發(fā)送者一直等待下去,而接收者以為發(fā)送者已經(jīng)收到該應(yīng)答,等待接收新數(shù)據(jù),這樣雙方就相互等待,從而產(chǎn)生死鎖。
-
持續(xù)計(jì)時(shí)器
為了避免流量控制引發(fā)的死鎖,TCP使用了持續(xù)計(jì)時(shí)器。每當(dāng)發(fā)送者收到一個(gè)零窗口的應(yīng)答后就啟動(dòng)該計(jì)時(shí)器。時(shí)間一到便主動(dòng)發(fā)送報(bào)文詢問(wèn)接收者的窗口大小。若接收者仍然返回零窗口,則重置該計(jì)時(shí)器繼續(xù)等待;若窗口不為0,則表示應(yīng)答報(bào)文丟失了,此時(shí)重置發(fā)送窗口后開(kāi)始發(fā)送,這樣就避免了死鎖的產(chǎn)生。
擁塞控制
-
擁塞控制 和 流量控制 的區(qū)別?
PS:擁塞控制是針對(duì)于網(wǎng)絡(luò)而言的,它是防止往網(wǎng)絡(luò)中寫(xiě)入太多分組,從而導(dǎo)致網(wǎng)絡(luò)擁塞的情況;而流量控制是針對(duì)接收者的,它是通過(guò)控制發(fā)送者的發(fā)送速度保證接收者能夠來(lái)得及接收。
-
擁塞控制:擁塞控制是作用于網(wǎng)絡(luò)的,它是防止過(guò)多的數(shù)據(jù)注入到網(wǎng)絡(luò)中,避免出現(xiàn)網(wǎng)絡(luò)負(fù)載過(guò)大的情況;
-
流量控制:流量控制是作用于接收者的,它是控制發(fā)送者的發(fā)送速度從而使接收者來(lái)得及接收。
擁塞控制的目的?
-
緩解網(wǎng)絡(luò)壓力
-
保證分組按時(shí)到達(dá)
慢開(kāi)始算法 和 擁塞避免算法
-
加法增加:指的是擁塞避免算法,使得發(fā)送窗口以線性的方式增長(zhǎng);
-
乘法減?。褐傅氖遣还墚?dāng)前正使用慢開(kāi)始算法還是擁塞避免算法,只要發(fā)生擁塞時(shí),慢開(kāi)始門(mén)限將會(huì)變成當(dāng)前窗口的一半。
-
發(fā)送方維護(hù)一個(gè)發(fā)送窗口,發(fā)送窗口的大小取決于網(wǎng)絡(luò)的擁塞情況和接收窗口的大小,發(fā)送窗口是動(dòng)態(tài)變化的。
-
發(fā)送方還維護(hù)一個(gè)慢開(kāi)始門(mén)限
-
算法的具體過(guò)程:
-
慢開(kāi)始算法的作用:慢開(kāi)始算法將發(fā)送窗口從小擴(kuò)大,而且按指數(shù)級(jí)擴(kuò)大,從而避免一開(kāi)始就往網(wǎng)絡(luò)中注入過(guò)多的分組從而導(dǎo)致?lián)砣凰鼘⒋翱诼龜U(kuò)大的過(guò)程其實(shí)也在探測(cè)網(wǎng)絡(luò)擁塞情況的過(guò)程,當(dāng)發(fā)現(xiàn)出現(xiàn)擁塞時(shí),及時(shí)降低發(fā)送速度,從而減緩網(wǎng)絡(luò)擁塞。
-
擁塞避免算法的作用:擁塞避免算法使發(fā)送窗口以線性方式增長(zhǎng),而非指數(shù)級(jí)增長(zhǎng),從而使網(wǎng)絡(luò)更加不容易發(fā)生擁塞。
-
AIMD算法(加法增大乘法減小算法)。慢開(kāi)始算法 和 擁塞避免算法 還有個(gè)名稱叫做『加法增大乘法減小算法』。
-
通信開(kāi)始時(shí),發(fā)送方的發(fā)送窗口設(shè)為1,并發(fā)送第一個(gè)分組M1;
-
接收方收到M1后,返回確認(rèn)應(yīng)答,此時(shí)發(fā)送方發(fā)送窗口擴(kuò)大兩倍,并發(fā)送M2、M3;(即,發(fā)送方每次收到確認(rèn)應(yīng)答后,都將發(fā)送窗口設(shè)為當(dāng)前值的兩倍)
-
若發(fā)送窗口>慢開(kāi)始門(mén)限,則使用擁塞避免算法,每次收到確認(rèn)應(yīng)答后都將發(fā)送窗口+1;
-
若發(fā)送方出現(xiàn)了超時(shí)重傳,則表明網(wǎng)絡(luò)出現(xiàn)擁塞,此時(shí):
a)慢開(kāi)始門(mén)限設(shè)為當(dāng)前發(fā)送窗口的一半
b)發(fā)送窗口設(shè)為1
c)啟用擁塞避免算法PS:發(fā)送超時(shí)重傳時(shí),發(fā)送窗口有可能已經(jīng)超過(guò)了慢開(kāi)始門(mén)限,也有可能還沒(méi)超過(guò);此時(shí)不管何種情況,都一律啟用擁塞避免算法,并執(zhí)行上述三步操作!
-
發(fā)送窗口 < 慢開(kāi)始門(mén)限:使用慢開(kāi)始算法
-
發(fā)送窗口 > 慢開(kāi)始門(mén)限:使用擁塞避免算法
-
發(fā)送窗口 = 慢開(kāi)始門(mén)限:使用慢開(kāi)始算法或擁塞避免算法
快重傳算法 和 快恢復(fù)算法
-
上述慢開(kāi)始算法和擁塞避免算法能保證網(wǎng)絡(luò)出現(xiàn)擁塞時(shí)進(jìn)行相應(yīng)的處理,而快重傳和快恢復(fù)是一種擁塞預(yù)防的方式,此時(shí)網(wǎng)絡(luò)可能尚未出現(xiàn)擁塞,但已經(jīng)有擁塞的征兆,因此得作出一些預(yù)防措施。
-
快重傳原理:因?yàn)門(mén)CP具有累計(jì)確認(rèn)的能力,因此接收者收到一個(gè)分組的時(shí)候不會(huì)立即發(fā)出應(yīng)答,可能需要等待收到多個(gè)分組之后再同一發(fā)出累計(jì)確認(rèn)。但快重傳算法就要求,接收者如果接收到一個(gè)亂序的分組的話,就必須立即發(fā)出前一個(gè)正確分組的確認(rèn)應(yīng)答,這樣能讓發(fā)送者盡早地知道有一個(gè)分組可能丟失。
-
快恢復(fù)原理:當(dāng)發(fā)送者收到同一個(gè)分組的三個(gè)確認(rèn)應(yīng)答后,就基本可以判斷這個(gè)分組已經(jīng)丟失了;這時(shí)候無(wú)需等待超時(shí),直接執(zhí)行『乘法減小加法增大』:
-
將慢開(kāi)始門(mén)限減半
-
將發(fā)送窗口減半(不設(shè)為1)
-
使用擁塞避免算法
相關(guān)文章
linux網(wǎng)絡(luò)協(xié)議是什么?該如何去理解?
很多人熟悉windows的協(xié)議,但是對(duì)linux網(wǎng)絡(luò)協(xié)議卻不怎么了解,本片文章就是叫我們?nèi)绾稳チ私鈒inux網(wǎng)絡(luò)協(xié)議,需要的朋友可以參考下2014-09-17組件計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)建設(shè)的案例
這篇文章主要為大家介紹了以辦公大樓計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)建設(shè)為實(shí)例,講述了計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)建設(shè)的大概思路,需要的朋友可以參考下2014-09-15計(jì)算機(jī)網(wǎng)絡(luò)c類網(wǎng)絡(luò)劃分子網(wǎng)介紹
本文將詳細(xì)介紹計(jì)算機(jī)網(wǎng)絡(luò)c類網(wǎng)絡(luò)劃分子網(wǎng),需要了解更多的朋友可以參考下2012-11-19- 今天,隨著計(jì)算機(jī)的廣泛應(yīng)用和網(wǎng)絡(luò)的流行,越來(lái)越多的單位和部門(mén)開(kāi)始引入計(jì)算機(jī)網(wǎng)絡(luò)管理,從而相應(yīng)的需要更多的優(yōu)秀網(wǎng)管。已有幾年“腦齡"的你是不是也有成為網(wǎng)管的雄心壯2010-09-07
六大步驟順利排除計(jì)算機(jī)網(wǎng)絡(luò)連接故障
第 1 步:檢驗(yàn)電纜 首先,檢查計(jì)算機(jī)與網(wǎng)絡(luò)插口之間的電纜。對(duì)于 10/100 網(wǎng)絡(luò)環(huán)境,只需一種能檢查開(kāi)路、短路和布線的工具即可工2010-09-07- ★計(jì)算機(jī)網(wǎng)絡(luò)是什么? 這是首先必須解決的一個(gè)問(wèn)題,絕對(duì)是核心概念.我們講的計(jì)算機(jī)網(wǎng)絡(luò),其實(shí)就是利用通訊設(shè)備和線路將地理位置不同的、功能獨(dú)立的多個(gè)計(jì)算機(jī)系統(tǒng)2010-09-07