1. 程式人生 > >計算機網路(謝希仁 第七版)運輸層 課後習題解析

計算機網路(謝希仁 第七版)運輸層 課後習題解析

第五層 運輸層課後習題答案

1. 試說明傳輸層在協議棧中的地位和作用,傳輸層的通訊和網路層的通訊有什麼重要區別?為什麼說傳輸層是必不可少的?

答:

地位:傳輸層處於面向通訊部分的最高層,同時也使用者功能中的最底層

作用:向它上面的應用層提供服務,向下相容網路層,起到承上啟下的中間作用

重要區別:傳輸層為應用層的應用程式提供端到端的邏輯通訊,該邏輯鏈路是虛擬的

,而網路層是為主機之間提供邏輯通訊的(面向主機,承擔路由功能)

必不可少的原因:各種應用程序之間通訊需要“可靠交付”和“盡最大努力交付”的

類服務,必須要又傳輸層以複用和分用的形式載入到網路層才能實現這兩種型別的通訊

2. 網路層提供資料報或虛電路服務隊上面的傳輸層有何影響?

答:不管是網路層提供資料報還是虛電路服務,隊上面運輸層的執行機制都不會有任何影響,但是會給運輸層提供不同質量的服務

3. 當應用程式使用面向連線的TCP和無連線的IP時,這種傳輸的面向連線的還是面向無連線的?(無連線的IP:IP協議,面向無連線,跟UPD一樣)

答:都有,這要在不同層次來看,在運輸層是面向連線的,在網路層則是面向無連線的

4. 試用畫圖解釋運輸層的複用,畫圖說明許多個運輸使用者複用到一條運輸連線上,而這條運輸連線又複用到IP資料報上

答:許多個運輸使用者複用到一條運輸連線上:通過不同的埠號(不同應用程式不同埠號)

這條運輸連線又複用到不同的IP資料報上:不同的協議號,UDP-17,TCP-6,UPD在IP報文的協議號是17

wps72D5.tmp

5. 舉例說明有的應用程式寧願採用不可靠的UDP,而不採用可靠的TCP

答:視訊播放程式,可以忍受不可靠的UDP丟失掉一兩幀的圖,不會影響視訊服務的質量,但是不能忍受可靠的TCP的,因為TCP雖然可靠但是傳輸速率慢

原理:有差錯的資料報UDP直接丟棄,而TCP則要求重傳,TCP會帶來較大的時延

6. 接收方收到有差錯的UDP使用者資料報應如何處理?

答:直接丟棄

7. 如果應用程式寧願使用UDP來完成可靠的傳輸,這可能嗎?請說明理由

答:可能,但應用程式中必須額外提供於TCP相同的功能

8. 為什麼說UDP是面向報文的,而TCP是面向位元組的?

答:UDP是面向報文的:傳送方的UDP對應用程式交下來的報文,在添加了首部之後就向下交付,UDP對應用層交付下來的報文即不合並也不拆分,而是保留這些報文的邊界,應用層交給UDP多長的報文,UDP就照樣傳送,即一次傳送一個報文,接收方UDP對下方交上來的UDP使用者資料報,在去除首部之後就原封不動的交付給上層的應用程式,一次交付一個完整報文,所以是UDP是面向報文的

TCP是面向位元組的:傳送方TCP對應用程式交下來的報文資料塊,視為無結構的位元組流(無邊界約束,可拆分/合併),但維持各位元組流順序(相對順序沒有變),TCP傳送方有一個傳送緩衝區,當應用程式傳輸的資料塊太長,TCP就可以把它劃分端一些再傳輸,如果應用程式一次只傳輸一個位元組,那麼TCP可以等待積累足夠多的位元組後再構成報文端傳送出去,所以TCP的面向位元組的

9. 埠的作用是什麼?為什麼埠要劃分三種?

答:埠的作用是對TCP/IP體系的應用程序進行統一的標誌,使執行不同作業系統的計算機能夠相互通訊

熟知埠號:數值一般為0~1023,標記常規的服務程序如FTP是21,DNS是53,HTTP是80等

登記埠號:數值為1024~49151,標記沒有熟知埠號的非常規的服務程序

短暫埠號:數值為49152~65535,客戶程序執行時動態選擇

10. 試說明運輸層中偽首部的作用

答:僅用於計算運輸層資料報的校驗和

11. 某個應用程序使用運輸層的UDP使用者資料報,然而繼續向下交付給IP層之後,又封裝成IP資料報,既然都是資料報,可否跳過UDP而直接交給IP層?哪些功能UDP提供了但IP沒有提供?

答:不可以跳過UDP而直接交給IP層,IP資料報的IP報頭承擔主機定址,報頭檢錯,直接交付給IP層只能找到目的主機而無法找到目的程序

UDP提供對應用程序的複用和分傭功能,以及提供對資料的差錯檢驗

12. 一個應用程式用UDP,到了IP層把資料報劃分偽4個數據報片傳送出去,結果前兩個資料報丟失,後兩個到達目的站,過了一段時間應用程式重傳UDP,而IP層仍然劃分為4個數據報片來發送,結果這次前兩個到達後兩個丟失,試問,在目的站能否將這兩次傳輸的4個數據報片組合成一個完整的資料報?假定目的站第一次收到後的兩個資料報片仍然1儲存在目的站的快取中。

答:不行,資料報片丟失重傳時,IP資料報的標識欄位會又另一個識別符號,僅當識別符號相同的IP資料報片才能組成一個IP資料報,前兩個IP資料報片的識別符號和後兩個IP資料報片的IP識別符號不同,使用不能組成一個IP資料報

補充:因為IP協議是無連線的服務,所以資料報不存在按序接收到達的問題,當資料報由於長度超過網路的最大傳輸單元MTU而必須分片時,該資料報的標識欄位就被複制到該資料報的所有資料報分片中,相同的標識欄位的值可以使得分片後的資料報片能正確的重灌成原理的資料報

13. 一個UDP使用者資料報的資料欄位為8192個位元組,在資料鏈路層要使用乙太網來傳送,試問應該劃分為幾個IP資料報片?說明每一個IP資料報欄位長度和片偏移欄位的值。

答:6個,8192位元組加上UDP首部8位元組共8200位元組

資料欄位的長度:前面5個是1480位元組,最後一個是800位元組

片偏移欄位的值分別是:0,1480,2960,4440,5920,7400

補充:

UDP資料報首部長度為8個位元組

UDP資料報資料部分+UDP資料報首部=IP資料報的資料部分

所以IP資料報的資料部分長度=8192位元組+8位元組=8200位元組

IP資料報的資料部分+IP資料報的首部=一個完整的IP資料報

IP資料報的首部是20個位元組

一個完整的IP資料報的最大長度是1500位元組

所以IP資料報的資料部分最大長度是1500-20=1480位元組

1480*5+800=8200位元組

所以至少需要6個IP資料報片

偏移值分別是:1480*0,1480*1,1480*2,1480*3,1480*4,1480*5

14. 一UDP使用者資料報的首部十六進位制表示是:06 32 00 45 00 1C E2 17 ,試求源埠,目的埠,使用者資料報的總長度,資料部分長度,這個使用者資料報是從客戶傳送給伺服器還是伺服器傳送給使用者?使用這個UDP的這個伺服器程式是什麼?

答:源埠:1586,目的埠:69,UDP使用者資料報總長度:28位元組,資料部分長度:20位元組,此UDP使用者資料報是從客戶傳送給伺服器(因為目的埠<1023,是熟知埠1),伺服器程式是TFTP

補充:UDP首部結構(8位元組):源埠(2位元組)+目的埠(2位元組)+UDP資料報總長度(2位元組)+校驗和(2位元組)

十六進位制0632  ---> 十進位制1586

十六進位制0045  ---> 十進位制 69

十六進位制1C    ---> 十進位制 28

所以該使用者資料報UDP的資料部分長度是28-8=20位元組

69埠是TFTP的埠

15. 使用TCP對實時話音資料的傳輸有沒有什麼問題?使用UDP在傳送資料檔案時會有什麼問題?

答:如果話音資料不是實時播放(邊接收邊播放)就可以使用TCP,因為TCP傳輸可靠,接收端用TCP接收資料完畢之後,可以在任何時間進行播放,但階段是實時播放,則必須使用UDP,UDP不保證可靠交付,但UDP比TCP的開銷小很多,一次只要應用程式接受這樣的服務質量就可以選擇使用UDP

16. 在停止等待協議中如果不使用編號是否可行?為什麼?

答:不行,分組和確認分組都必須進行編號,才能明確哪個分組得到了確認

補:停止等待協議是TCP可靠傳輸的保證之一

17. 在停止等待協議中,如果收到重複的報文段時不予理睬(即悄悄丟棄什麼也不做)是否可行?舉例說明

答:不可以,收到重複報文不確認相當於丟失,會讓傳送方以為你沒有收到而一直髮送該重複報文

18.假定在運輸層使用停止等待協議,傳送方在傳送報文段M0後在設定時間未收到確認,於是重傳M0,但是M0又遲遲不能到達接收方,不久傳送方收到了遲到的對M0的確認,於是傳送下一個報文M1,不僅就收到了對M1的確認,接著傳送方傳送新的報文段M0(和前面的M0不同)但這個新的M0的傳送過程中丟失了,正巧,一開始就滯留在網路中的M0現在到達接收方,接收方無法分辨M0是舊的,於是收下了M0,併發送確認,顯然,接收方後來收到的M0是重複,協議失敗了,請畫圖描述上述過程

答:

wps72D6.tmp

19.試證明:當用n位元進行分組的編號時,若接收視窗等於1(即只能按序接收分組),當僅在傳送視窗不超過2的n次方然後減去1時,連續滑動視窗協議才能正確執行,視窗單位是分組

答:

wps72D7.tmp

20. 在連續ARQ協議中,若傳送視窗等於7,則傳送端在開始時可連續傳送7個分組,因此,在每一組傳送之後,都要設定一個超時計時器,現在計算機裡之一一個硬時鐘,設這7個分組發出的時間為t0~t6,且超時時間Tout一樣大,試問如何實現這7個超時計時器(軟體時鐘法)?

答:

wps72D8.tmp

補充:方法2:可以定義一個含有7個數據的陣列,陣列中的資料表示時間,當該組資料傳送出去時,在對應序號的陣列中填入時間值,該時間值是該組傳送出去的時間+超時時間得到,如何不停的對該陣列的值進行掃描,當接收到接收端的確認分組時,即將對應陣列序號的時間值設定為空,準備記錄下一個數據發發送時間,當系統時間大於陣列中某一個時間值時,說明該分組以及超時了,需要進行重傳

21. 假設使用連續ARQ協議中,傳送視窗大小是3,序列範圍是[0,15],而傳送媒體保證在接收方能接收到分組,在某時刻,在接收方,下一個期望收到的序號是5

試問:

1)在傳送方的傳送視窗中你可能出現的序號組合有哪幾種?

答:如果傳送方沒有收到[2,4]的確認,那麼傳送視窗的範圍是:[2,4],[3,5],[4,6],[5,7]中如何一個

如果傳送方收到了[2,4]的確認,那麼傳送視窗的範圍是:[5,7]

2) 接收方已經發送出去的,但在網路中(未到達傳送方)的確認分組可能有那些?說明這些確認分組是用來確認那些序號的分組

答:[2,4]分組的確認可能還在網路中

22. 主機A向主機B傳送一個很長的檔案,其長度為L位元組,假定TCP使用的MSS有1460位元組

1)在TCP的序號不重複使用的條件下,L的最大值是多少?

答:FAT單個檔案不能超過4G,2^32=4G,1G=2^30位元組,所以L_max=2^62位元組

3) 假定使用上面計算出的檔案長度,而運輸層,網路層和資料鏈路層所使用的首部開銷共66位元組,鏈路的資料率為10Mb/s,試求這個檔案所需要的最短髮送時間

答:滿載分片數Q={L_max/MSS}取整=2941758次

總位元組數N=Q*(MSS+66)+{(L_max-Q*MSS)+66}=4489122708+682=4489123390位元組

最小時間T=N*8/(10*10^6)=3591.3秒=59.85分 約等於1小時

補充:MSS:TCP最大報文段長度

最後剩餘要傳送的位元組不足MSS所以要取整

1個位元組是8個位元

1Mb=10^6 b

23. 主機A向主機B連續傳送了兩個TCP報文段,其序號是70和100,問:

1) 第一個報文段攜帶了多少個位元組?

答:

TCP報文段的序號:傳送資料段的首位元組編號

70~99有30個位元組,所以第一個報文段攜帶了30個位元組

2)主機B收到第一個報文段後發回的確認中確認序號應當是多少?

答:

TCP報文段的確認號:期望下一次收到的位元組的序號

所以該確認序號是100

3)如果主機B收到第二個報文段後發揮確認中的確認序號是180,試問A傳送的第二個報文段中的資料有多少位元組?

答:

確認序號是180,說明它期望下次收到180編號的位元組,那麼180以前的就已經收到了,即100~179,80個位元組

4) 如果A傳送的第一個報文段丟失了,單第二個報文段到達了B,B在第二個報文段到達後向A傳送確認,試問這個確認號應該是多少?

答:70,因為第一個報文段的丟失,需要重傳

24. 一個TCP連線下面使用256kb/s的鏈路,其端到端時延為128ms,經測試,發現吞吐量只有120kb/s,試問傳送視窗w是多少?(提示:可以有兩種答案,取決於接收等發出確認的時機)

答:來回路程的時延等於128*2=256ms

設視窗值為x(以位元組為單位),假定一次最大發送量等於視窗值,且傳送時間等於255ms,那麼每傳送一次都得停下來期待再次得到下一視窗的確認,以得到新的傳送許可,這樣傳送時間等於停止等待應答的時間,結果,測到的平均吞吐率就等於傳送速率的一半,即:

8*x/(256*1000)=256*0.001

X=8192

補充:一個位元組8個位元

256ms=256*0.001s

速率=256*1000 b/s

25. 為什麼在TCP首部中要把TCP埠號放入最開始的4個位元組?

答:在ICMP的差錯報文中要包含IP首部後面8個位元組的內容,而這裡面有TCP首部中的源埠和目的埠,當TCP收到ICMP差錯報文時需要用這兩個埠來確定是哪條連接出了差錯

26. 為什麼在TCP首部中有一個首部長度欄位,而UDP的首部中就沒有首部長度欄位?

答:TCP首部除固定長度部分外,還有選項,TCP首部長度是可變的,所以需要首部長度欄位,而UDP的首部長度是固定的,不需要

27. 一個TCP報文段的資料部分最多為多少個位元組?為什麼?如果使用者要傳送的資料的位元組長度超過TCP報文欄位中的序號欄位可能編出的最大序號,問還能否用TCP來傳送?

答:65535-20-20=65495位元組,此資料部分加上TCP首部的20位元組,然後加上IP首部的20位元組,正好是IP資料報的最大長度:65535位元組(當然若IP首部包含了選填欄位,則IP首部的長度超過20位元組,這時TCP報文端的資料部分的長度將小於65495位元組),資料的位元組長度超過TCP報文欄位中序號欄位可能編出的最大序號,通過迴圈使用序號,仍然可以使用TCP來傳送

28. 主機A向主機B傳送TCP報文段,首部中的源埠是m而且目的埠是n,當B向A傳送回信時,其TCP報文段的首部中源埠和目的埠分別是什麼?

答:n和m

29. 在使用TCP傳送資料時,如果有一個確認報文段丟失了,也不一定會引起與該確認報文對應的資料的重傳,試說明理由

答:還沒有重傳就收到了對更高序號的確認

30. 設TCP使用的最大視窗為65535位元組,而傳輸通道不產生差錯,頻寬也不受限制,若報文段的平均往返時延為20ms,問所能得到的最大吞吐率是多少?

答:在傳送時延可忽略的情況下:最大資料率=最大視窗*8/平均往返時間=26.2Mb/s

31. 通訊通道的頻寬為1GB/s,端到端的時延為10ms,TCP的傳送視窗為65535位元組,試問:可能達到的最大吞吐率是多少?通道的利用率是多少?

答:傳輸的位元L=65536*8+40*8=52408b 頻寬c=10^9 b/s

傳送時延 L/c=0.000524608 s

傳輸時延 Td=10*10^-3 s

最大吞吐率=傳輸的位元數/(傳送時延+2倍的傳輸時延)=25.6Mb/s

通道利用率=傳送時延/(傳送時延+2倍的傳輸時延)=2.55%

補充:0-65535,所以是65536,乘以8是因為一個位元組8個位元,40是因為TCP首部20個位元組+IP首部20個位元組,傳送時延+2倍的傳輸時延是因為先發出去,然後傳輸到接收方,然後接收方傳送一個確認訊號才算完成了此次傳輸

32. 什麼是karm演算法?在TCP的重傳機制中,若不採用karm演算法,而是在收到確認時都認為是對重傳報文端的確認,那麼由此得出的往返時延樣本和重傳時間都會減小,試問:重傳時間最後會減小到什麼程度?

答:karm演算法:在計算平均往返時延RTT時,只要該報文段重傳了,就不採用其往返延時樣本

超時重傳時間RTO=RTTs+4*RTTd 其中RTTd是RTTs的偏差加權均值

wps72E9.tmp

33. 假定TCP在開始建立連線時,傳送方設定的超時重傳時間是RTO=6s

1)當傳送方接收到對方的連線確認報文時,測量出RTT(平均往返時延)樣本值為1.5s,試計算限制的超時重傳時間RTO

2)當傳送方傳送資料報文段並接收到確認時,測量出RTT樣本值為2.5s,試計算限制的RTO值

答:

wps72EA.tmp

34. 已知第一次測得TCP的往返時延的當前值是30ms,現在收到了三給連線的確認報文段,他們相比的資料報文段的傳送時間分別滯後26ms,32ms,和24ms,設a=0.9,試計算每一層新的加權平均往返時間值RTTs,討論所得結果

答:a=0.1,RTTO=20

wps72EB.tmp

RTT1=RTTO*(1-a)+26*a=29.6

RTT2=RTT1*a_32(1-a)=29.84

RTT3=RTT2*a+24(1-a)=29.256

可以看出,RTT的樣本值變化多達20%,加權平均往返時間RTTs的變化卻很小

35. 試計算一個包括5段鏈路的運輸連線的單程段到端的延時,5端鏈路程中有2端是衛星鏈路,有3段是廣域網鏈路,每條衛星鏈路又由上行鏈路和下行鏈路兩部分組成,可以去這兩部分的傳播時延之和為250ms,每一個廣域網的範圍為1500km,其傳播時延可按150000km/s來計算,各資料鏈路速率為48kb/s,幀長為960位

答:總的傳播時延=通道長度/傳播速率=250*2+(1500/150000)*3*1000=530 ms

總的傳送時延=960/(48*1000/1000)*5=100ms

單程端到端時延=100ms+530ms=630ms

36. 重複35題,假定其中一個陸地上的廣域網的傳送時延為150ms

答:

總的傳播時延沒有變化,還是530ms

總的傳送時延=960/(48*1000/1000)*4+150=230ms

端到端的時延=530+230=760ms

37. 在TCP的擁塞控制中,什麼是慢開始,擁塞避免,快重傳和快恢復演算法?這裡每一種演算法各起什麼作用?乘法減小和加法增大各用在什麼情況下?

答:

慢開始:在主機剛剛開始傳送報文段時先將擁塞視窗cwnd設定為一個最大報文段的MSS數值,在每收到一個對新的報文端的確認後,將擁塞視窗增加至多一個MSS數值,用這樣的方法逐步增大發送端的擁塞視窗cwnd,即逐步增加發送視窗的大小,可以分組注入到網路中的速率更加合理

擁塞避免:當擁塞視窗值(現在是等於傳送視窗大小)大於慢開始門限時,停止使用慢開始演算法,而改用擁塞避免演算法:使傳送的擁塞視窗每經過一個往返時延RTT就增加一個MSS的大小

快重傳演算法:傳送端只要連續收到三個重複的ACK,就斷定有分組丟失了,就理解重傳丟失的報文段而不是等待該報文段的超時計時器超時

快恢復演算法:當傳送端連續收到三個重複的ACK時,就重新設定慢開始門限ssthresh(當前擁塞視窗的一半)與慢開始不同之處在於擁塞視窗cwnd不是設定為1,而是設定為新的慢開始啟動門限(當前擁塞視窗的一半)

乘法減小:是指無論在慢開始階段還是在擁塞避免階段,只要出現超時(即很有可能出現了網路擁塞),就是把慢開始門限值ssthresh設定為當前擁塞視窗值的一半,當網路頻繁出現擁塞時,ssthresh值就下降得很快,以大大減少注入到網路中的分組數

加法增大:是值指向擁塞避免演算法之後,在收到度所有報段的確認後(即經過一個往返時間)就把擁塞控制視窗cwnd增加一個MSS大小,使得擁塞視窗緩慢增大,以防止網路過早的出現擁塞

38. 設TCP的ssthresh的初始值為8,當擁塞視窗上升到12時網路傳送了超時,TCP使用慢開始和擁塞避免,試求出第一次到第15此的擁塞視窗大小

答:1 2 4 8 9 10 11 12 1 2 4 6 7 8 9

                    *        *

Ssthresh在12之後變成了6,然後又是從1開始,快到6就採用擁塞控制

39. TCP在進行流量控制時是以分組的丟失作為產生擁塞的標誌的,有沒有不是因為擁塞而引起的丟失分組的情況?如果有,請舉3個例子

答:1.當IP資料報的傳輸過程中需要分片,但其中的一個數據報未能及時到達終點,而終點組裝IP資料報已超時,因而只能丟失該資料報

2. IP資料報已經到達終點,但終點的快取沒有足夠的空間來存放此資料報

3. 資料報在轉發的過程中經過一個區域網的網橋,但網橋在轉發該資料報的幀沒有足夠的差錯空間而只好丟棄

41.用TCP傳送512位元組的資料,設視窗為100位元組,而TCP報文段每次也是傳送100位元組的資料,再設傳送端和接收端的起始序號分別為100和200,試畫出連線建立到連線釋放的工作示意圖

答:

44試舉例說明為什麼一個運輸連線可以有多種方式釋放,可以設兩個互相通訊的使用者分別連線在網路的兩個結點上

答:假設A,B建立了運輸連線,協議應該考慮實際的可能性

比如:

A或者B故障,應該設定超時機制,使對方推出,不至於死鎖

A主動退出,B被動退出

A被動退出,B主動退出

45. 試接收為什麼突然釋放運輸連線就有可能丟失使用者資料,而使用TCP的連線釋放方法就可以保證資料不丟失?

答:當主機1和主機2之間建立連線後,主機1傳送了一個TCP資料段並且正確抵達主機2,接著主機1傳送另外一個TCP資料段,這次很不幸,主機2在收到第二個TCP資料段之前發出了釋放連線的請求,如果就這樣突然釋放連線,顯然主機1傳送的第二個TCP報文段會丟失,而使用TCP的連線釋放方法,主機2發出了釋放連線的請求,那麼即使收到主機1的確認後,之間釋放主機2到主機1的連線,即主機2不再向主機1傳送資料,而仍然可以接受主機1傳送來的資料,所以可以保證資料不丟失

46. 試用例子說明為什麼在運輸連線建立時要使用三次握手。說明不這樣做可能會出現什麼情況

答:3次握手完成兩個重要功能,既要雙方做好傳送資料的準備工作(雙方都知道彼此已經準備好),也要執行雙方就初始序列號進行協商,這個序列號在握手過程中被髮送和確認。

假定B決定給A傳送一個連線請求分組,A收到了分組,併發送了確認分組,按照兩次握手的協定,A認為連線已經成功建立了,可以開始傳送資料分組,可是B在A的應答分組在傳輸中被丟失的情況下,將不知道A是否已經準備號,不知道A建議什麼樣的序列號,B甚至懷疑A是否收到了自己的請求連線分組,在這種情況下還未建立成功,將忽略A傳送過來的任何資料,只等待連線確認分組

而A傳送的分組超過之後,重複傳送同樣的分組,這樣就形成了死鎖