5—01?試說(shuō)明運(yùn)輸層在協(xié)議棧中的地位和作用,運(yùn)輸層的通信和網(wǎng)絡(luò)層的通信有什么重要區(qū)別?為什么運(yùn)輸層是必不可少的?
答:運(yùn)輸層處于面向通信部分的最高層,同時(shí)也是用戶(hù)功能中的最低層,向它上面的應(yīng)用層提供服務(wù)
運(yùn)輸層為應(yīng)用進(jìn)程之間提供端到端的邏輯通信,但網(wǎng)絡(luò)層是為主機(jī)之間提供邏輯通信(面向主機(jī),承擔(dān)路由功能,即主機(jī)尋址及有效的分組交換)。
各種應(yīng)用進(jìn)程之間通信需要“可靠或盡力而為”的兩類(lèi)服務(wù)質(zhì)量,必須由運(yùn)輸層以復(fù)用和分用的形式加載到網(wǎng)絡(luò)層。
5—02?網(wǎng)絡(luò)層提供數(shù)據(jù)報(bào)或虛電路服務(wù)對(duì)上面的運(yùn)輸層有何影響?
答:網(wǎng)絡(luò)層提供數(shù)據(jù)報(bào)或虛電路服務(wù)不影響上面的運(yùn)輸層的運(yùn)行機(jī)制。
但提供不同的服務(wù)質(zhì)量。
5—03?當(dāng)應(yīng)用程序使用面向連接的TCP和無(wú)連接的IP時(shí),這種傳輸是面向連接的還是面向無(wú)連接的?
答:都是。這要在不同層次來(lái)看,在運(yùn)輸層是面向連接的,在網(wǎng)絡(luò)層則是無(wú)連接的。
5—04?試用畫(huà)圖解釋運(yùn)輸層的復(fù)用。畫(huà)圖說(shuō)明許多個(gè)運(yùn)輸用戶(hù)復(fù)用到一條運(yùn)輸連接上,而這條運(yùn)輸連接有復(fù)用到IP數(shù)據(jù)報(bào)上。
5—05?試舉例說(shuō)明有些應(yīng)用程序愿意采用不可靠的UDP,而不用采用可靠的TCP。
答:VOIP:由于語(yǔ)音信息具有一定的冗余度,人耳對(duì)VOIP數(shù)據(jù)報(bào)損失由一定的承受度,但對(duì)傳輸時(shí)延的變化較敏感。
有差錯(cuò)的UDP數(shù)據(jù)報(bào)在接收端被直接拋棄,TCP數(shù)據(jù)報(bào)出錯(cuò)則會(huì)引起重傳,可能帶來(lái)較大的時(shí)延擾動(dòng)。
因此VOIP寧可采用不可靠的UDP,而不愿意采用可靠的TCP。
5—06?接收方收到有差錯(cuò)的UDP用戶(hù)數(shù)據(jù)報(bào)時(shí)應(yīng)如何處理?
答:丟棄
5—07?如果應(yīng)用程序愿意使用UDP來(lái)完成可靠的傳輸,這可能嗎?請(qǐng)說(shuō)明理由
答:可能,但應(yīng)用程序中必須額外提供與TCP相同的功能。
5—08?為什么說(shuō)UDP是面向報(bào)文的,而TCP是面向字節(jié)流的?
答:發(fā)送方?UDP?對(duì)應(yīng)用程序交下來(lái)的報(bào)文,在添加首部后就向下交付?IP?層。UDP?對(duì)應(yīng)用層交下來(lái)的報(bào)文,既不合并,也不拆分,而是保留這些報(bào)文的邊界。
接收方?UDP?對(duì)?IP?層交上來(lái)的?UDP?用戶(hù)數(shù)據(jù)報(bào),在去除首部后就原封不動(dòng)地交付上層的應(yīng)用進(jìn)程,一次交付一個(gè)完整的報(bào)文。
發(fā)送方TCP對(duì)應(yīng)用程序交下來(lái)的報(bào)文數(shù)據(jù)塊,視為無(wú)結(jié)構(gòu)的字節(jié)流(無(wú)邊界約束,可分拆/合并),但維持各字節(jié)
5—09?端口的作用是什么?為什么端口要?jiǎng)澐譃槿N?
答:端口的作用是對(duì)TCP/IP體系的應(yīng)用進(jìn)程進(jìn)行統(tǒng)一的標(biāo)志,使運(yùn)行不同操作系統(tǒng)的計(jì)算機(jī)的應(yīng)用進(jìn)程能夠互相通信。
熟知端口,數(shù)值一般為0~1023.標(biāo)記常規(guī)的服務(wù)進(jìn)程;
登記端口號(hào),數(shù)值為1024~49151,標(biāo)記沒(méi)有熟知端口號(hào)的非常規(guī)的服務(wù)進(jìn)程;
5—10?試說(shuō)明運(yùn)輸層中偽首部的作用。
答:用于計(jì)算運(yùn)輸層數(shù)據(jù)報(bào)校驗(yàn)和。
5—11?某個(gè)應(yīng)用進(jìn)程使用運(yùn)輸層的用戶(hù)數(shù)據(jù)報(bào)UDP,然而繼續(xù)向下交給IP層后,又封裝成IP數(shù)據(jù)報(bào)。既然都是數(shù)據(jù)報(bào),可否跳過(guò)UDP而直接交給IP層?哪些功能UDP提供了但IP沒(méi)提提供?
答:不可跳過(guò)UDP而直接交給IP層
IP數(shù)據(jù)報(bào)IP報(bào)承擔(dān)主機(jī)尋址,提供報(bào)頭檢錯(cuò);只能找到目的主機(jī)而無(wú)法找到目的進(jìn)程。
UDP提供對(duì)應(yīng)用進(jìn)程的復(fù)用和分用功能,以及提供對(duì)數(shù)據(jù)差分的差錯(cuò)檢驗(yàn)。
5—12?一個(gè)應(yīng)用程序用UDP,到IP層把數(shù)據(jù)報(bào)在劃分為4個(gè)數(shù)據(jù)報(bào)片發(fā)送出去,結(jié)果前兩個(gè)數(shù)據(jù)報(bào)片丟失,后兩個(gè)到達(dá)目的站。過(guò)了一段時(shí)間應(yīng)用程序重傳UDP,而IP層仍然劃分為4個(gè)數(shù)據(jù)報(bào)片來(lái)傳送。結(jié)果這次前兩個(gè)到達(dá)目的站而后兩個(gè)丟失。試問(wèn):在目的站能否將這兩次傳輸?shù)?/span>4個(gè)數(shù)據(jù)報(bào)片組裝成完整的數(shù)據(jù)報(bào)?假定目的站第一次收到的后兩個(gè)數(shù)據(jù)報(bào)片仍然保存在目的站的緩存中。
答:不行
重傳時(shí),IP數(shù)據(jù)報(bào)的標(biāo)識(shí)字段會(huì)有另一個(gè)標(biāo)識(shí)符。
僅當(dāng)標(biāo)識(shí)符相同的IP數(shù)據(jù)報(bào)片才能組裝成一個(gè)IP數(shù)據(jù)報(bào)。
前兩個(gè)IP數(shù)據(jù)報(bào)片的標(biāo)識(shí)符與后兩個(gè)IP數(shù)據(jù)報(bào)片的標(biāo)識(shí)符不同,因此不能組裝成一個(gè)IP數(shù)據(jù)報(bào)。
5—13?一個(gè)UDP用戶(hù)數(shù)據(jù)的數(shù)據(jù)字段為8192季節(jié)。在數(shù)據(jù)鏈路層要使用以太網(wǎng)來(lái)傳送。試問(wèn)應(yīng)當(dāng)劃分為幾個(gè)IP數(shù)據(jù)報(bào)片?說(shuō)明每一個(gè)IP數(shù)據(jù)報(bào)字段長(zhǎng)度和片偏移字段的值。
答:6個(gè)
數(shù)據(jù)字段的長(zhǎng)度:前5個(gè)是1480字節(jié),最后一個(gè)是800字節(jié)。
片偏移字段的值分別是:0,1480,2960,4440,5920和7400.
5—14?一UDP用戶(hù)數(shù)據(jù)報(bào)的首部十六進(jìn)制表示是:06 32 00 45 00 1C E2 17.試求源端口、目的端口、用戶(hù)數(shù)據(jù)報(bào)的總長(zhǎng)度、數(shù)據(jù)部分長(zhǎng)度。這個(gè)用戶(hù)數(shù)據(jù)報(bào)是從客戶(hù)發(fā)送給服務(wù)器發(fā)送給客戶(hù)?使用UDP的這個(gè)服務(wù)器程序是什么?
解:源端口1586,目的端口69,UDP用戶(hù)數(shù)據(jù)報(bào)總長(zhǎng)度28字節(jié),數(shù)據(jù)部分長(zhǎng)度20字節(jié)。
此UDP用戶(hù)數(shù)據(jù)報(bào)是從客戶(hù)發(fā)給服務(wù)器(因?yàn)槟康亩丝谔?hào)<1023,是熟知端口)、服務(wù)器程序是TFFTP。
5—15?使用TCP對(duì)實(shí)時(shí)話音數(shù)據(jù)的傳輸有沒(méi)有什么問(wèn)題?使用UDP在傳送數(shù)據(jù)文件時(shí)會(huì)有什么問(wèn)題?
答:如果語(yǔ)音數(shù)據(jù)不是實(shí)時(shí)播放(邊接受邊播放)就可以使用TCP,因?yàn)?/span>TCP傳輸可靠。接收端用TCP講話音數(shù)據(jù)接受完畢后,可以在以后的任何時(shí)間進(jìn)行播放。但假定是實(shí)時(shí)傳輸,則必須使用UDP。
UDP不保證可靠交付,但UCP比TCP的開(kāi)銷(xiāo)要小很多。因此只要應(yīng)用程序接受這樣的服務(wù)質(zhì)量就可以使用UDP。
5—16?在停止等待協(xié)議中如果不使用編號(hào)是否可行?為什么?
答:分組和確認(rèn)分組都必須進(jìn)行編號(hào),才能明確哪個(gè)分則得到了確認(rèn)。
5—17?在停止等待協(xié)議中,如果收到重復(fù)的報(bào)文段時(shí)不予理睬(即悄悄地丟棄它而其他什么也沒(méi)做)是否可行?試舉出具體的例子說(shuō)明理由。
答:
收到重復(fù)幀不確認(rèn)相當(dāng)于確認(rèn)丟失
5—18?假定在運(yùn)輸層使用停止等待協(xié)議。發(fā)送發(fā)在發(fā)送報(bào)文段M0后再設(shè)定的時(shí)間內(nèi)未收到確認(rèn),于是重傳M0,但M0又遲遲不能到達(dá)接收方。不久,發(fā)送方收到了遲到的對(duì)M0的確認(rèn),于是發(fā)送下一個(gè)報(bào)文段M1,不久就收到了對(duì)M1的確認(rèn)。接著發(fā)送方發(fā)送新的報(bào)文段M0,但這個(gè)新的M0在傳送過(guò)程中丟失了。正巧,一開(kāi)始就滯留在網(wǎng)絡(luò)中的M0現(xiàn)在到達(dá)接收方。接收方無(wú)法分辨M0是舊的。于是收下M0,并發(fā)送確認(rèn)。顯然,接收方后來(lái)收到的M0是重復(fù)的,協(xié)議失敗了。
試畫(huà)出類(lèi)似于圖5-9所示的雙方交換報(bào)文段的過(guò)程。
答:
舊的M0被當(dāng)成新的M0。
5—19?試證明:當(dāng)用n比特進(jìn)行分組的編號(hào)時(shí),若接收到窗口等于1(即只能按序接收分組),當(dāng)僅在發(fā)送窗口不超過(guò)2n-1時(shí),連接ARQ協(xié)議才能正確運(yùn)行。窗口單位是分組。
解:見(jiàn)課后答案。
5—20?在連續(xù)ARQ協(xié)議中,若發(fā)送窗口等于7,則發(fā)送端在開(kāi)始時(shí)可連續(xù)發(fā)送7個(gè)分組。因此,在每一分組發(fā)送后,都要置一個(gè)超時(shí)計(jì)時(shí)器?,F(xiàn)在計(jì)算機(jī)里只有一個(gè)硬時(shí)鐘。設(shè)這7個(gè)分組發(fā)出的時(shí)間分別為t0,t1…t6,且tout都一樣大。試問(wèn)如何實(shí)現(xiàn)這7個(gè)超時(shí)計(jì)時(shí)器(這叫軟件時(shí)鐘法)?
解:見(jiàn)課后答案。
5—21?假定使用連續(xù)ARQ協(xié)議中,發(fā)送窗口大小事3,而序列范圍[0,15],而傳輸媒體保證在接收方能夠按序收到分組。在某時(shí)刻,接收方,下一個(gè)期望收到序號(hào)是5.
試問(wèn):
(1)?在發(fā)送方的發(fā)送窗口中可能有出現(xiàn)的序號(hào)組合有哪幾種?
(2)?接收方已經(jīng)發(fā)送出去的、但在網(wǎng)絡(luò)中(即還未到達(dá)發(fā)送方)的確認(rèn)分組可能有哪些?說(shuō)明這些確認(rèn)分組是用來(lái)確認(rèn)哪些序號(hào)的分組。
5—22?主機(jī)A向主機(jī)B發(fā)送一個(gè)很長(zhǎng)的文件,其長(zhǎng)度為L字節(jié)。假定TCP使用的MSS有1460字節(jié)。
(1)?在TCP的序號(hào)不重復(fù)使用的條件下,L的最大值是多少?
(2)?假定使用上面計(jì)算出文件長(zhǎng)度,而運(yùn)輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層所使用的首部開(kāi)銷(xiāo)共66字節(jié),鏈路的數(shù)據(jù)率為10Mb/s,試求這個(gè)文件所需的最短發(fā)送時(shí)間。
解:(1)L_max的最大值是2^32=4GB,G=2^30.
(2)?滿載分片數(shù)Q={L_max/MSS}取整=2941758發(fā)送的總報(bào)文數(shù)
N=Q*(MSS+66)+{(L_max-Q*MSS)+66}=4489122708+682=4489123390
總字節(jié)數(shù)是N=4489123390字節(jié),發(fā)送4489123390字節(jié)需時(shí)間為:N*8/(10*10^6)=3591.3秒,即59.85分,約1小時(shí)。
5—23?主機(jī)A向主機(jī)B連續(xù)發(fā)送了兩個(gè)TCP報(bào)文段,其序號(hào)分別為70和100。試問(wèn):
(1)?第一個(gè)報(bào)文段攜帶了多少個(gè)字節(jié)的數(shù)據(jù)?
(2)?主機(jī)B收到第一個(gè)報(bào)文段后發(fā)回的確認(rèn)中的確認(rèn)號(hào)應(yīng)當(dāng)是多少?
(3)?如果主機(jī)B收到第二個(gè)報(bào)文段后發(fā)回的確認(rèn)中的確認(rèn)號(hào)是180,試問(wèn)A發(fā)送的第二個(gè)報(bào)文段中的數(shù)據(jù)有多少字節(jié)?
(4)?如果A發(fā)送的第一個(gè)報(bào)文段丟失了,但第二個(gè)報(bào)文段到達(dá)了B。B在第二個(gè)報(bào)文段到達(dá)后向A發(fā)送確認(rèn)。試問(wèn)這個(gè)確認(rèn)號(hào)應(yīng)為多少?
解:(1)第一個(gè)報(bào)文段的數(shù)據(jù)序號(hào)是70到99,共30字節(jié)的數(shù)據(jù)。
(2)確認(rèn)號(hào)應(yīng)為100.
(3)80字節(jié)。
(4)70
5—24?一個(gè)TCP連接下面使用256kb/s的鏈路,其端到端時(shí)延為128ms。經(jīng)測(cè)試,發(fā)現(xiàn)吞吐量只有120kb/s。試問(wèn)發(fā)送窗口W是多少?(提示:可以有兩種答案,取決于接收等發(fā)出確認(rèn)的時(shí)機(jī))。
解:
來(lái)回路程的時(shí)延等于256ms(=128ms×2).設(shè)窗口值為X(注意:以字節(jié)為單位),假
定一次最大發(fā)送量等于窗口值,且發(fā)射時(shí)間等于256ms,那么,每發(fā)送一次都得停下來(lái)期待
再次得到下一窗口的確認(rèn),以得到新的發(fā)送許可.這樣,發(fā)射時(shí)間等于停止等待應(yīng)答的時(shí)間,
結(jié)果,測(cè)到的平均吞吐率就等于發(fā)送速率的一半,即
8X÷(256×1000)=256×0.001
X=8192
所以,窗口值為8192.
5—25?為什么在TCP首部中要把TCP端口號(hào)放入最開(kāi)始的4個(gè)字節(jié)?
答:在ICMP的差錯(cuò)報(bào)文中要包含IP首部后面的8個(gè)字節(jié)的內(nèi)容,而這里面有TCP首部中的源端口和目的端口。當(dāng)TCP收到ICMP差錯(cuò)報(bào)文時(shí)需要用這兩個(gè)端口來(lái)確定是哪條連接出了差錯(cuò)。
5—26?為什么在TCP首部中有一個(gè)首部長(zhǎng)度字段,而UDP的首部中就沒(méi)有這個(gè)這個(gè)字段?
答:TCP首部除固定長(zhǎng)度部分外,還有選項(xiàng),因此TCP首部長(zhǎng)度是可變的。UDP首部長(zhǎng)度是固定的。
5—27?一個(gè)TCP報(bào)文段的數(shù)據(jù)部分最多為多少個(gè)字節(jié)?為什么?如果用戶(hù)要傳送的數(shù)據(jù)的字節(jié)長(zhǎng)度超過(guò)TCP報(bào)文字段中的序號(hào)字段可能編出的最大序號(hào),問(wèn)還能否用TCP來(lái)傳送?
答:65495字節(jié),此數(shù)據(jù)部分加上TCP首部的20字節(jié),再加上IP首部的20字節(jié),正好是IP數(shù)據(jù)報(bào)的最大長(zhǎng)度65535.(當(dāng)然,若IP首部包含了選擇,則IP首部長(zhǎng)度超過(guò)?20字節(jié),這時(shí)TCP報(bào)文段的數(shù)據(jù)部分的長(zhǎng)度將小于65495字節(jié)。)
數(shù)據(jù)的字節(jié)長(zhǎng)度超過(guò)TCP報(bào)文段中的序號(hào)字段可能編出的最大序號(hào),通過(guò)循環(huán)使用序號(hào),仍能用TCP來(lái)傳送。
5—28?主機(jī)A向主機(jī)B發(fā)送TCP報(bào)文段,首部中的源端口是m而目的端口是n。當(dāng)B向A發(fā)送回信時(shí),其TCP報(bào)文段的首部中源端口和目的端口分別是什么?
答:分別是n和m。
5—29?在使用TCP傳送數(shù)據(jù)時(shí),如果有一個(gè)確認(rèn)報(bào)文段丟失了,也不一定會(huì)引起與該確認(rèn)報(bào)文段對(duì)應(yīng)的數(shù)據(jù)的重傳。試說(shuō)明理由。
答:還未重傳就收到了對(duì)更高序號(hào)的確認(rèn)。
5—30?設(shè)TCP使用的最大窗口為65535字節(jié),而傳輸信道不產(chǎn)生差錯(cuò),帶寬也不受限制。若報(bào)文段的平均往返時(shí)延為20ms,問(wèn)所能得到的最大吞吐量是多少?
答:在發(fā)送時(shí)延可忽略的情況下,最大數(shù)據(jù)率=最大窗口*8/平均往返時(shí)間=26.2Mb/s。
5—31?通信信道帶寬為1Gb/s,端到端時(shí)延為10ms。TCP的發(fā)送窗口為65535字節(jié)。試問(wèn):可能達(dá)到的最大吞吐量是多少?信道的利用率是多少?
答:
L=65536×8+40×8=524600
C=109b/s
L/C=0.0005246s
Td=10×10-3s
0.02104864
Throughput=L/(L/C+2×Td)=524600/0.0205246=25.5Mb/s
Efficiency=(L/C)//(L/C+2×D)=0.0255
最大吞吐量為25.5Mb/s。信道利用率為25.5/1000=2.55%
5—32?什么是Karn算法?在TCP的重傳機(jī)制中,若不采用Karn算法,而是在收到確認(rèn)時(shí)都認(rèn)為是對(duì)重傳報(bào)文段的確認(rèn),那么由此得出的往返時(shí)延樣本和重傳時(shí)間都會(huì)偏小。試問(wèn):重傳時(shí)間最后會(huì)減小到什么程度?
答:Karn算法:在計(jì)算平均往返時(shí)延RTT時(shí),只要報(bào)文段重傳了,就不采用其往返時(shí)延樣本。
設(shè)新往返時(shí)延樣本Ti
RTT(1)=a*RTT(i-1)+(1-a)*T(i);
RTT^(i)=a* RTT(i-1)+(1-a)*T(i)/2;
RTT(1)=a*0+(1-a)*T(1)= (1-a)*T(1);
RTT^(1)=a*0+(1-a)*T(1)/2= RTT(1)/2
RTT(2)= a*RTT(1)+(1-a)*T(2);
RTT^(2)= a*RTT(1)+(1-a)*T(2)/2;
= a*RTT(1)/2+(1-a)*T(2)/2= RTT(2)/2
RTO=beta*RTT,在統(tǒng)計(jì)意義上,重傳時(shí)間最后會(huì)減小到使用karn算法的1/2.
5—33?假定TCP在開(kāi)始建立連接時(shí),發(fā)送方設(shè)定超時(shí)重傳時(shí)間是RTO=6s。
(1)當(dāng)發(fā)送方接到對(duì)方的連接確認(rèn)報(bào)文段時(shí),測(cè)量出RTT樣本值為1.5s。試計(jì)算現(xiàn)在的RTO值。
(2)當(dāng)發(fā)送方發(fā)送數(shù)據(jù)報(bào)文段并接收到確認(rèn)時(shí),測(cè)量出RTT樣本值為2.5s。試計(jì)算現(xiàn)在的RTO值。
答:
(1)據(jù)RFC2988建議,RTO=RTTs+4*RTTd。其中RTTd是RTTs的偏差加權(quán)均值。
初次測(cè)量時(shí),RTTd(1)= RTT(1)/2;
后續(xù)測(cè)量中,RTTd(i)=(1-Beta)* RTTd(i-1)+Beta*{ RTTs- RTT(i)};
Beta=1/4
依題意,RTT(1)樣本值為1.5秒,則
RTTs(1)=RTT(1)=1.5s RTTd(1)=RTT(1)/2=0.75s
RTO(1)=RTTs(1)+4RTTd(1)=1.5+4*0.75=4.5(s)
(2)RTT(2)=2.5 RTTs(1)=1.5s RTTd(1)=0.75s
RTTd(2)=(1-Beta)* RTTd(1)+Beta*{ RTTs(1)- RT
(2)}=0.75*3/4+{1.5-2.5}/4=13/16
RTO(2)=RTTs(1)+4RTTd(2)=1.5+4*13/16=4.75s
5—34?已知第一次測(cè)得TCP的往返時(shí)延的當(dāng)前值是30 ms。現(xiàn)在收到了三個(gè)接連的確認(rèn)報(bào)文段,它們比相應(yīng)的數(shù)據(jù)報(bào)文段的發(fā)送時(shí)間分別滯后的時(shí)間是:26ms,32ms和24ms。設(shè)α=0.9。試計(jì)算每一次的新的加權(quán)平均往返時(shí)間值RTTs。討論所得出的結(jié)果。
答:a=0.1,?RTTO=30
RTT1=RTTO*(1-a) +26*a=29.6
RTT2=RTT1*a+32(1-a)=29.84
RTT3=RTT2*a+24(1-a)=29.256
三次算出加權(quán)平均往返時(shí)間分別為29.6,29.84和29.256ms。
可以看出,RTT的樣本值變化多達(dá)20%時(shí),加權(quán)平均往返
5—35?試計(jì)算一個(gè)包括5段鏈路的運(yùn)輸連接的單程端到端時(shí)延。5段鏈路程中有2段是衛(wèi)星鏈路,有3段是廣域網(wǎng)鏈路。每條衛(wèi)星鏈路又由上行鏈路和下行鏈路兩部分組成。可以取這兩部分的傳播時(shí)延之和為250ms。每一個(gè)廣域網(wǎng)的范圍為1500km,其傳播時(shí)延可按150000km/s來(lái)計(jì)算。各數(shù)據(jù)鏈路速率為48kb/s,幀長(zhǎng)為960位。
答:5段鏈路的傳播時(shí)延=250*2+(1500/150000)*3*1000=530ms
5段鏈路的發(fā)送時(shí)延=960/(48*1000)*5*1000=100ms
所以5段鏈路單程端到端時(shí)延=530+100=630ms
5—36?重復(fù)5-35題,但假定其中的一個(gè)陸地上的廣域網(wǎng)的傳輸時(shí)延為150ms。
答:760ms
5—37?在TCP的擁塞控制中,什么是慢開(kāi)始、擁塞避免、快重傳和快恢復(fù)算法?這里每一種算法各起什么作用??“乘法減小”和“加法增大”各用在什么情況下?
答:慢開(kāi)始:
在主機(jī)剛剛開(kāi)始發(fā)送報(bào)文段時(shí)可先將擁塞窗口cwnd設(shè)置為一個(gè)最大報(bào)文段MSS的數(shù)值。在每收到一個(gè)對(duì)新的報(bào)文段的確認(rèn)后,將擁塞窗口增加至多一個(gè)MSS的數(shù)值。用這樣的方法逐步增大發(fā)送端的擁塞窗口cwnd,可以分組注入到網(wǎng)絡(luò)的速率更加合理。
擁塞避免:
當(dāng)擁塞窗口值大于慢開(kāi)始門(mén)限時(shí),停止使用慢開(kāi)始算法而改用擁塞避免算法。擁塞避免算法使發(fā)送的擁塞窗口每經(jīng)過(guò)一個(gè)往返時(shí)延RTT就增加一個(gè)MSS的大小。
快重傳算法規(guī)定:
發(fā)送端只要一連收到三個(gè)重復(fù)的ACK即可斷定有分組丟失了,就應(yīng)該立即重傳丟手的報(bào)文段而不必繼續(xù)等待為該報(bào)文段設(shè)置的重傳計(jì)時(shí)器的超時(shí)。
快恢復(fù)算法:
當(dāng)發(fā)送端收到連續(xù)三個(gè)重復(fù)的ACK時(shí),就重新設(shè)置慢開(kāi)始門(mén)限?ssthresh
與慢開(kāi)始不同之處是擁塞窗口?cwnd?不是設(shè)置為?1,而是設(shè)置為ssthresh
若收到的重復(fù)的AVK為n個(gè)(n>3),則將cwnd設(shè)置為ssthresh
若發(fā)送窗口值還容許發(fā)送報(bào)文段,就按擁塞避免算法繼續(xù)發(fā)送報(bào)文段。
若收到了確認(rèn)新的報(bào)文段的ACK,就將cwnd縮小到ssthresh
乘法減?。?/span>
是指不論在慢開(kāi)始階段還是擁塞避免階段,只要出現(xiàn)一次超時(shí)(即出現(xiàn)一次網(wǎng)絡(luò)擁塞),就把慢開(kāi)始門(mén)限值?ssthresh?設(shè)置為當(dāng)前的擁塞窗口值乘以?0.5。
當(dāng)網(wǎng)絡(luò)頻繁出現(xiàn)擁塞時(shí),ssthresh?值就下降得很快,以大大減少注入到網(wǎng)絡(luò)中的分組數(shù)。
加法增大:
是指執(zhí)行擁塞避免算法后,在收到對(duì)所有報(bào)文段的確認(rèn)后(即經(jīng)過(guò)一個(gè)往返時(shí)間),就把擁塞窗口?cwnd增加一個(gè)?MSS大小,使擁塞窗口緩慢增大,以防止網(wǎng)絡(luò)過(guò)早出現(xiàn)擁塞。
5—38?設(shè)TCP的ssthresh的初始值為8(單位為報(bào)文段)。當(dāng)擁塞窗口上升到12時(shí)網(wǎng)絡(luò)發(fā)生了超時(shí),TCP使用慢開(kāi)始和擁塞避免。試分別求出第1次到第15次傳輸?shù)母鲹砣翱诖笮?。你能說(shuō)明擁塞控制窗口每一次變化的原因嗎?
答:擁塞窗口大小分別為:1,2,4,8,9,10,11,12,1,2,4,6,7,8,9.
5—39 TCP的擁塞窗口cwnd大小與傳輸輪次n的關(guān)系如下所示:
cwnd
n 1
1 2
2 4
3 8
4 16
5 32
6 33
7 34
8 35
9 36
10 37
11 38
12 39
13
cwnd
n 40
14 41
15 42
16 21
17 22
18 23
19 24
20 25
21 26
22 1
23 2
24 4
25 8
26
(1)試畫(huà)出如圖5-25所示的擁塞窗口與傳輸輪次的關(guān)系曲線。
(2)指明TCP工作在慢開(kāi)始階段的時(shí)間間隔。
(3)指明TCP工作在擁塞避免階段的時(shí)間間隔。
(4)在第16輪次和第22輪次之后發(fā)送方是通過(guò)收到三個(gè)重復(fù)的確認(rèn)還是通過(guò)超市檢測(cè)到丟失了報(bào)文段?
(5)在第1輪次,第18輪次和第24輪次發(fā)送時(shí),門(mén)限ssthresh分別被設(shè)置為多大?
(6)在第幾輪次發(fā)送出第70個(gè)報(bào)文段?
(7)假定在第26輪次之后收到了三個(gè)重復(fù)的確認(rèn),因而檢測(cè)出了報(bào)文段的丟失,那么擁塞窗口cwnd和門(mén)限ssthresh應(yīng)設(shè)置為多大?
答:(1)擁塞窗口與傳輸輪次的關(guān)系曲線如圖所示(課本后答案):
(2)?慢開(kāi)始時(shí)間間隔:【1,6】和【23,26】
(3)?擁塞避免時(shí)間間隔:【6,16】和【17,22】
(4)?在第16輪次之后發(fā)送方通過(guò)收到三個(gè)重復(fù)的確認(rèn)檢測(cè)到丟失的報(bào)文段。在第22輪次之后發(fā)送方是通過(guò)超時(shí)檢測(cè)到丟失的報(bào)文段。
(5)?在第1輪次發(fā)送時(shí),門(mén)限ssthresh被設(shè)置為32
在第18輪次發(fā)送時(shí),門(mén)限ssthresh被設(shè)置為發(fā)生擁塞時(shí)的一半,即21.
在第24輪次發(fā)送時(shí),門(mén)限ssthresh是第18輪次發(fā)送時(shí)設(shè)置的21
(6)?第70報(bào)文段在第7輪次發(fā)送出。
(7)?擁塞窗口cwnd和門(mén)限ssthresh應(yīng)設(shè)置為8的一半,即4.
5—40 TCP在進(jìn)行流量控制時(shí)是以分組的丟失作為產(chǎn)生擁塞的標(biāo)志。有沒(méi)有不是因擁塞而引起的分組丟失的情況?如有,請(qǐng)舉出三種情況。
答:
當(dāng)Ip數(shù)據(jù)報(bào)在傳輸過(guò)程中需要分片,但其中的一個(gè)數(shù)據(jù)報(bào)未能及時(shí)到達(dá)終點(diǎn),而終點(diǎn)組裝IP數(shù)據(jù)報(bào)已超時(shí),因而只能丟失該數(shù)據(jù)報(bào);IP數(shù)據(jù)報(bào)已經(jīng)到達(dá)終點(diǎn),但終點(diǎn)的緩存沒(méi)有足夠的空間存放此數(shù)據(jù)報(bào);數(shù)據(jù)報(bào)在轉(zhuǎn)發(fā)過(guò)程中經(jīng)過(guò)一個(gè)局域網(wǎng)的網(wǎng)橋,但網(wǎng)橋在轉(zhuǎn)發(fā)該數(shù)據(jù)報(bào)的幀沒(méi)有足夠的差錯(cuò)空間而只好丟棄。
5—41?用TCP傳送512字節(jié)的數(shù)據(jù)。設(shè)窗口為100字節(jié),而TCP報(bào)文段每次也是傳送100字節(jié)的數(shù)據(jù)。再設(shè)發(fā)送端和接收端的起始序號(hào)分別選為100和200,試畫(huà)出類(lèi)似于圖5-31的工作示意圖。從連接建立階段到連接釋放都要畫(huà)上。
5—42?在圖5-32中所示的連接釋放過(guò)程中,主機(jī)B能否先不發(fā)送ACK=x+1的確認(rèn)? (因?yàn)楹竺嬉l(fā)送的連接釋放報(bào)文段中仍有ACK=x+1這一信息)
答:
如果B不再發(fā)送數(shù)據(jù)了,是可以把兩個(gè)報(bào)文段合并成為一個(gè),即只發(fā)送FIN+ACK報(bào)文段。但如果B還有數(shù)據(jù)報(bào)要發(fā)送,而且要發(fā)送一段時(shí)間,那就不行,因?yàn)?/span>A遲遲收不到確認(rèn),就會(huì)以為剛才發(fā)送的FIN報(bào)文段丟失了,就超時(shí)重傳這個(gè)FIN報(bào)文段,浪費(fèi)網(wǎng)絡(luò)資源。
5—43?在圖(5-33)中,在什么情況下會(huì)發(fā)生從狀態(tài)LISTEN到狀態(tài)SYN_SENT,以及從狀態(tài)SYN_ENT到狀態(tài)SYN_RCVD的變遷?
答:當(dāng)A和B都作為客戶(hù),即同時(shí)主動(dòng)打開(kāi)TCP連接。這時(shí)的每一方的狀態(tài)變遷都是:CLOSED----àSYN-SENT---àSYN-RCVD--àESTABLISHED
5—44?試以具體例子說(shuō)明為什么一個(gè)運(yùn)輸連接可以有多種方式釋放。可以設(shè)兩個(gè)互相通信的用戶(hù)分別連接在網(wǎng)絡(luò)的兩結(jié)點(diǎn)上。
答:設(shè)A,B建立了運(yùn)輸連接。協(xié)議應(yīng)考慮一下實(shí)際可能性:
A或B故障,應(yīng)設(shè)計(jì)超時(shí)機(jī)制,使對(duì)方退出,不至于死鎖;
A主動(dòng)退出,B被動(dòng)退出
B主動(dòng)退出,A被動(dòng)退出
5—45?解釋為什么突然釋放運(yùn)輸連接就可能會(huì)丟失用戶(hù)數(shù)據(jù),而使用TCP的連接釋放方法就可保證不丟失數(shù)據(jù)。
答:
當(dāng)主機(jī)1和主機(jī)2之間連接建立后,主機(jī)1發(fā)送了一個(gè)TCP數(shù)據(jù)段并正確抵達(dá)主機(jī)2,接著主機(jī)1發(fā)送另一個(gè)TCP數(shù)據(jù)段,這次很不幸,主機(jī)2在收到第二個(gè)TCP數(shù)據(jù)段之前發(fā)出了釋放連接請(qǐng)求,如果就這樣突然釋放連接,顯然主機(jī)1發(fā)送的第二個(gè)TCP報(bào)文段會(huì)丟失。
而使用TCP的連接釋放方法,主機(jī)2發(fā)出了釋放連接的請(qǐng)求,那么即使收到主機(jī)1的確認(rèn)后,只會(huì)釋放主機(jī)2到主機(jī)1方向的連接,即主機(jī)2不再向主機(jī)1發(fā)送數(shù)據(jù),而仍然可接受主機(jī)1發(fā)來(lái)的數(shù)據(jù),所以可保證不丟失數(shù)據(jù)。
5—46?試用具體例子說(shuō)明為什么在運(yùn)輸連接建立時(shí)要使用三次握手。說(shuō)明如不這樣做可能會(huì)出現(xiàn)什么情況。
答:
3次握手完成兩個(gè)重要的功能,既要雙方做好發(fā)送數(shù)據(jù)的準(zhǔn)備工作(雙方都知道彼此已準(zhǔn)備好),也要允許雙方就初始序列號(hào)進(jìn)行協(xié)商,這個(gè)序列號(hào)在握手過(guò)程中被發(fā)送和確認(rèn)。
假定B給A發(fā)送一個(gè)連接請(qǐng)求分組,A收到了這個(gè)分組,并發(fā)送了確認(rèn)應(yīng)答分組。按照兩次握手的協(xié)定,A認(rèn)為連接已經(jīng)成功地建立了,可以開(kāi)始發(fā)送數(shù)據(jù)分組。可是,B在A的應(yīng)答分組在傳輸中被丟失的情況下,將不知道A是否已準(zhǔn)備好,不知道A建議什么樣的序列號(hào),B甚至懷疑A是否收到自己的連接請(qǐng)求分組,在這種情況下,B認(rèn)為連接還未建立成功,將忽略A發(fā)來(lái)的任何數(shù)據(jù)分組,只等待連接確認(rèn)應(yīng)答分組。
而A發(fā)出的分組超時(shí)后,重復(fù)發(fā)送同樣的分組。這樣就形成了死鎖。
5—47?一個(gè)客戶(hù)向服務(wù)器請(qǐng)求建立TCP連接??蛻?hù)在TCP連接建立的三次握手中的最后一個(gè)報(bào)文段中捎帶上一些數(shù)據(jù),請(qǐng)求服務(wù)器發(fā)送一個(gè)長(zhǎng)度為L字節(jié)的文件。假定:
(1)客戶(hù)和服務(wù)器之間的數(shù)據(jù)傳輸速率是R字節(jié)/秒,客戶(hù)與服務(wù)器之間的往返時(shí)間是RTT(固定值)。
(2)服務(wù)器發(fā)送的TCP報(bào)文段的長(zhǎng)度都是M字節(jié),而發(fā)送窗口大小是nM字節(jié)。
(3)所有傳送的報(bào)文段都不會(huì)出錯(cuò)(無(wú)重傳),客戶(hù)收到服務(wù)器發(fā)來(lái)的報(bào)文段后就及時(shí)發(fā)送確認(rèn)。
(4)所有的協(xié)議首部開(kāi)銷(xiāo)都可忽略,所有確認(rèn)報(bào)文段和連接建立階段的報(bào)文段的長(zhǎng)度都可忽略(即忽略這些報(bào)文段的發(fā)送時(shí)間)。
試證明,從客戶(hù)開(kāi)始發(fā)起連接建立到接收服務(wù)器發(fā)送的整個(gè)文件多需的時(shí)間T是:
T=2RTT+L/R?當(dāng)nM>R(RTT)+M
或?T=2RTT+L/R+(K-1)[M/R+RTT-nM/R]?當(dāng)nM
其中,K=[L/nM],符號(hào)[x]表示若x不是整數(shù),則把x的整數(shù)部分加1。
解:
發(fā)送窗口較小的情況,發(fā)送一組nM個(gè)字節(jié)后必須停頓下來(lái),等收到確認(rèn)后繼續(xù)發(fā)送。
共需K=[L/nM]個(gè)周期:其中
前K-1個(gè)周期每周期耗時(shí)M/R+RTT,共耗時(shí)(K-1)(M/R+RTT)
第K周期剩余字節(jié)數(shù)Q=L-(K-1)*nM,需耗時(shí)Q/R
總耗時(shí)=2*RTT+(K-1)M/(R+RTT)+Q/R=2*RTT+L/R+(K-1)[( M/R+RTT)-nM/R]