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