計網


5-08 為什么說UDP是面向報文的,而TCP是面向字節流 的

發送方 UDP對應用程序交下來的報文,在添加首部后就向下交付 IP層。UDP對應用層交下來的 報文,既不合並,也不拆分,而是保留這些報文的邊界。接收方 UDP對 IP層交上來的 UDP用戶數據 報,在去除首部后就原封不動地交付上層的應用進程,一次交付一個完整的報文。 發送方TCP對應用程序交下來的報文數據塊,視為無結構的字節流(無邊界約束,課分拆/合並 ),但維持各字節

5-09 端口的作用是什么?為什么端口要划分為三種?

端口的作用是對TCP/IP體系的應用進程進行統一的標志,使運行不同操作系統的計算機的應用 進程能夠互相通信。熟知端口,數值一般為0~1023.標記常規的服務進程;登記端口號,數值為 1024~49151,標記沒有熟知端口號的非常規的服務進程;

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

所謂“偽首部”是因為這種偽首部並不是UDP用戶數據報或TCP報文段真正的首部。只是在計算檢驗和時,臨時添加在UDP用戶數據報或TCP報文段的前面,得到一個
臨時的UDP用戶數據報或TCP報文段。檢驗和就是按照這個臨時的UDP用戶數據報或TCP
報文段來計算的。偽首部既不向下傳送也不向上遞交,而僅僅是為了計算運輸層的檢驗和。

5-13 一個UDP用戶數據報的數據字段為8192字節。在鏈路層要使用以太網來傳送。

試問應當划分為幾個IP數據報片?說明每一個IP數據報片的數據字段長度和片偏移字段的值。

解答: UDP用戶數據報的長度=8192 + 8= 8200 B
以太網數據字段最大長度是1500B。若IP首部為20B,則IP數據報的數據部分最多只
能有1480B。8200= 1480x5 + 800,因此划分的數據報片共6個。
數據字段的長度:前5個是1480字節,最后一個是800字節。
第1個數據報片的片偏移字節是0。
第2個數據報片的片偏移字節是1480 B。
第3個數據報片的片偏移字節是1480x 2= 2960 B.
第4個數據報片的片偏移字節是1480x 3 = 4440 B.
第5個數據報片的片偏移字節是1480x4= 5920 B.
第6個數據報片的片偏移字節是1480x5= 7400 B.

把以上得出的片偏移字節數除以8,就得出片偏移字段中應當寫入的的數值。因此最后
的答案,片偏移字段的值分別是: 0, 185, 370, 555,5 740和925 (字節數除以8)。

5—14 UDP用戶數據報的首部十六進制表示是:06 32 00 45 00 1C E2 17.試求源端口、目的端口、 用戶數據報的總長度、數據部分長度。這個用戶數據報是從客戶發送給服務器發送給客戶?使用 UDP的這個服務器程序是什么?

源端口1586,目的端口69,UDP用戶數據報總長度28字節,數據部分長度20字節。 此UDP用 戶數據報是從客戶發給服務器(因為目的端口號<1023,是熟知端口)、服務器程序是TFFTP。

5-20 一分組發送后,都要置一個超時計時器。現在計算機里只有一個硬時鍾。設這7個分組發出的時間分 別為t0,t1…t6,且tout都一樣大。試問如何實現這7個超時計時器(這叫軟件時鍾法)?

用相對發送時間實現一個鏈表

5-22 主機 A向主機B發送一個很長的文件,其長度為L字節。假定TCP使用的MSS有1460字節。 在TCP的序號不重 復使用的條件下,L的最大值是多少? 假定使用上面計算出文件長度,而運輸層、網絡層和數據鏈路層所使用的首部開銷共66字節, 鏈路的數據率為10Mb/s,試求這個文件所需的最短發送時間。

(1)L_max的最大值是 232=4GB,G=230.

(2)滿載分片數Q={L_max/MSS} 取整=2941758 發送的總報文數 N=Q(MSS+66)+{(L_maxQMSS)+66}=4489122708+682=4489123390 總字節數是N=4489123390字節,發送4489123390字節需時間為:N8/(1010^6) =3591.3秒,即 59.85分,約1小時。

5—23 主機A向主機B連續發送了兩個TCP報文段,其序號分別為70和100。

(1)試問: 第一個報文段攜帶 了多少個字節的數據?

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

(3) 如果主機B收到第二個報文段后發回的確認中的確認號是180,試問A發送的第二個報文段中A 的數據有多少字節?

(4)如果A發 送的第一個報文段丟失了,但第二個報文段到達了B。B在第二個報文段到達后向A 發送確認。試問這個確認號應為多少?

(1)第一個報文段的數據序號是70到99,共30字節的數據。

(2)確認號應為 100.

(3)80字節。

(4)70

5-24 一個TCP連接下面使用256kb/s的鏈路,其端到端時延為128ms。經測試,發現吞吐量只有 120kb/s。試問發送窗口W是多少?

來回路程的時延等於256ms(=128ms×2).設窗口值為X(注意:以字節為單位),假定一次最大發送量 等於窗口值,且發射時間等於256ms,那么,每發送一次都得停下來期待再次得到下一窗口的確認,以得 到新的發送許可.這樣,發射時間等於停止等待應答的時間結果,測到的平均吞吐率就等於發送速率的 一半,即8X÷(256×1000)=256×0.001X=8192所以,窗口值為8192.

5-28 主機A向主機B發送TCP報文段,首部中的源端口是m而目的端口是n。當B向A發送回信在使用TCP傳送 數據時,如果有一個確認報文段丟失了,也不一定會引起與該確認報文段對應 時,其TCP報文段的首部中源端口和目的端口分別是什么?

n, m

5—30 設TCP使用的最大窗口為65535字節,而傳輸信道不產生差錯,帶寬也不受限制。若報文段的 平均往返時延為20ms,問所能得到的最大吞吐量是多少?

在發送時延可忽略的情況下,最大數據率=最大窗口*8/平均往返時間=26.2Mb/s

5-31通信信道帶寬為1Gb/s,端到端時延為10ms。TCP的發送窗口為65535字節。試問:可能達到 的最大吞吐量是多少?信道的利用率是多少?

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-34已知第一次測得TCP的往返時間RTT是30ms。接着收到了三個確認報文段,用它們測量出的往返時間樣本RTT分別是: 26 ms, 32 ms和24ms。設a=0.1。

試計算每一次的新的加權平均往返時間值RTTs。討論所得出的結果。

按教材上(5-4)式:新的RTTs=(1-a)x (舊的RTTs)+ax (新的RTT樣本)
第一次算出: RTTs=(1-0.1)x30+0.1 x 26= 29.6 ms
第二次算出: RTTs=(1-0.1)x29.6+0.1 x32= 29.84 ms

第三次算出: RTTs=(1-0.1)x 29.84 +0.1 x 24= 29.256 ms
三次算出加權平均往返時間分別為29.6, 29.84和29.256 ms。
可以看出,RTT的樣本值變化多達20%時((30- 24)/30= 6/30= 1/5 = 20%),加權平均往
返時間RTTs的變化卻很小。

5-35 - 試計算一個包括五段鏈路的運輸連接的單程端到端時延。五段鏈路中有兩段是衛星鏈路,有三段是廣域網鏈路。每條衛星鏈路又由上行鏈路和下行鏈路兩部

分組成。可以取這兩部分的傳播時延之和為250 ms。每- -個廣域網的范圍為
1500km,其傳播時延可按150000km/s來計算。各數據鏈路速率為48kbi/s,
幀長為960位。

廣域網的傳播時延= (1500 km)/(150000 km/s)= 0.01 s= 10 ms .
每一個結點的傳輸時延= (960 bit)/ (48000 bit/s) = 0.02 s= 20 ms
可見總共需時630ms。

5-38 設TCP的ssthresh的初始值為8 (單位為報文段)。當擁塞窗口上升到12時網絡發生了超時,TCP使用慢開始和擁塞避免。試分別求出第1 輪次到第15輪次傳輸的各擁塞窗口大小。你能說明擁塞窗口每一次變化的原因嗎?

5-41用TCP傳送512字節的數據。設窗口為100字節,而TCP報文段每次也是傳送100字節的數據。再設發送方和接收方的起始序號分別選為100和200, 試畫出類似於教材圖5-28的工作示意圖。從連接建立階段到連接釋放都要畫上。

要傳送的512B的數據必須划分為6個報文段傳送,前5個報文段各100B,最后
一個報文段傳送12B。圖T-5-41 是雙方交互的示意圖。下面進行簡單的解釋。
報文段#1: A發起主動打開,發送SYN報文段,處於SYN-SENT狀態,並選擇初始序
號seq= 100。B處於LISTEN狀態。
報文段#2: B確認A的SYN報文段,因此ack=101 (是A的初始序號加1)。B選擇初
始序號seq= 200。B進入到SYN-RCVD狀態。
報文段#3: A發送ACK報文段來確認報文段#2,ack = 201 (是B的初始序號加1)。A
沒有在這個報文段中放入數據。因為SYN報文段#1消耗了一個序號,因此報文段#3的序號
是seq= 101。這樣,A和B都進入了ESTABLISHED狀態。
報文段#4: A發送100字節的數據。報文段#3是確認報文段,沒有數據發送,報文段#3
並不消耗序號,因此報文段#4的序號仍然是seq = 101。 A在發送數據的同時,還確認B的
報文段#2,因此ack= 201。
報文段#5: B確認A的報文段#4。由於收到了從序號101到200共100字節的數據,因
此在報文段#5中,ack= 201 (所期望收到的下一個數據字節的序號)。B發送的SYN報文段

2消耗了一個序號,因此報文段#5的序號是seq= 201,比報文段#2的序號多了一個序號。

5-46 試用具體例子說明為什么在運輸連接建立時要使用三次報文握手。說明如不這樣做可能會出現什么情況

​ 在上一個TCP連接中,A向B發送的連接請求SYN報文段滯留在網絡中的某處。於是
A超時重傳,與B建立了TCP連接,交換了數據,最后也釋放了TCP連接。
但滯留在網絡中某處的陳舊的SYN報文段,現在突然傳送到B了。如果不使用三報文握
手,那么B就以為A現在請求建立TCP連接,於是就分配資源,等待A傳送數據。但A並
沒有想要建立TCP連接,也不會向B傳送數據。B就白白等待着A發送數據。
如果使用三報文握手,那么B在收到A發送的陳舊的SYN報文段后,就向A發送SYN
報文段,選擇自己的序號seq=y, 並確認收到A的SYN報文段,其確認號ack=x+1。當A
收到B的SYN報文段時,從確認號就可得知不應當理睬這個SYN報文段(因為A現在並沒
有發送seq=x的SYN報文段)。這時,A發送復位報文段。在這個報文段中, RST=1, ACK
= 1,其確認號ack=y+ 1。我們注意到,雖然A拒絕了TCP連接的建立(發送了復位報文段),
但對B發送的SYN報文段還是確認收到了。
B收到A的RST報文段后,就知道不能建立TCP連接,不會等待A發送數據了。

5-49下面是以十六進制格式存儲的一個UDP首部:.

CB84000D001C001C

試問:
(1) 源端口號是什么?
(2) 目的端口號是什么?
(3) 這個用戶數據報的總長度是多少?
(4)數據長度是多少?
(5) 這個分組是從客戶到服務器方向的,還是從服務器到客戶方向的?
(6)客戶進程是什么?

(1)源端口號是最前面的四位十六進制數字(CB8416), 算出十進制的源端口號是
12x16+11x 162+8x 16' +4x 16°=49152 + 2816+ 128 +4= 52100。
(2)目的端口號是第二個四位十六進制數字(000D16), 算出十進制的目的端口號是13。
(3)第三個四位十六進制數字(001C16) 定義了整個UDP分組的長度,算出是
1x16'+ 12x16°=28字節。
(4)數據的長度是整個分組的長度減去首部的長度,也就是28 -8-20字節。
(5)因為目的端口號是13 (熟知端口),所以這個分組是從客戶到服務器的。
(6)從RFC 867可以得知,這個客戶進程是Daytime。當Daytime服務器收到客戶發送的
UDP用戶數據報后,就把現在的日期和時間以ASCI碼字符串的形式返回給客戶。

5-58 TC)在4:30:20發送了一個報文段。它沒有收到確認。在4:30:25它重傳了前面

這個報文段。 它在4:30:27收到確認。若以前的RTT值是4秒,根據Karn算

法,新的RTT值是多少?

根據Karm算法,只要是TCP報文段重傳了,就不采用其往返時間樣本。本題中
收到的確認是在重傳后收到的。因此RTT值沒有變化,仍然是以前的數值(4秒)。

5-64 TCP連接處於FIN-WAIT-1狀態。以下的事件相繼發生:

收到ACK報文段。

(2)收到FIN報文段。
(3) 發生了超時。
在每一個事件之后,連接的狀態是什么?在每一個事件之后發生的動作是
什么?

(1)處於FIN-WAIT-1狀態的只有TCP的客戶。當收到ACK報文段后,TCP客戶不發送
任何報文段,只是從FIN-WAIT-I狀態進入到FIN-WAIT-2狀態。
(2) 在收到FIN報文段后,TCP客戶發送ACK報文段,並進入到TIME-WAIT狀態。
(3) 當發生了超時,也就是在經過了2 MSL時間后,TCP客戶進入到CLOSED狀態。
以上的狀態轉換可參考教材上的圖5-30。

5-66 主機A通過TCP連接向B發送一個很長的文件,因此這需要分成很多個報文

段來發送。假定某一個TCP報文段的序號是x,那么下一個報文段的序號是否

就是x+1呢?

假定某一個TCP報文段的序號是x,那么下一個報文段的序號應當是x+n,這里
的n是這個報文段中的數據長度的字節數。如果n=400,那么下一個報文段的序號應當是x+400。若在此報文段中僅有一個字節的數據,則下一個報文段的序號才是x+ 1。

5-70假定用TCP協議在40 Gbit/s的線路上傳送數據。

(1)如果TCP充分利用了線路的帶寬,那么需要多長的時間TCP會發生序號

繞回? .
(2)假定現在TCP的首部中采用了時間戳選項。時間戳占用了4字節,共32
位。每隔一定的時間(這段時間叫做一個嘀嗒)時間戳的數值加1。假定
設計的時間戳是每隔859微秒,時間戳的數值加1。試問要經過多少時間
才發生時間戳數值的繞回?

(1) 40 Gbit/s的線路上傳送數據,每秒可傳送5x 109字節的數據。
TCP的序號字段有32位,共有232個不同序號,可以發送的時間是
23271 5000000000 = 0.859s= 859 ms
即經過859ms后序號就繞回,又重復以前的數值。
(2)時間戳數值繞回的時間是232x859x 10-s=3.69x 10°s=42.7天,比原來的繞回時
間大大增加了。
現在每一個TCP的數據報文段在其首部有兩個字段用來標志這個報文段。一個是序號,
另一個是時間戳。但發送方發送了232個字節的數據后,序號又繞回到初始的數值了,但這時
的時間戳還沒有繞回(因為在本例中,這需要經過42.7 天才繞回),而是指在某個數值,這
和一開始的時間戳初始值肯定是不一樣的。這樣,即使序號一樣,接收方也能夠根據時間戳
判斷這是一個新的數據報文段,而不是以前發送過的舊的數據報文段。

5-72 己知TCP的接收窗口大小是600(單位是字節,為簡單起見以后就省略了單位),已經確認了的序號是300。 試問,在不斷地接收報文段和發送確認報文段的過程

中,接收窗口也可能會發生變化(增大或縮小)。請用具體例子(指出接收方發
送的確認報文段中的重要信息)來說明哪些情況是可能發生的,而哪些情況是不
允許發生的。

(1)這是題目開始的情況。接收方發送的確認報文段中的接收窗口rwnd=600。已確認的
序號是300。接收方發送的確認報文段的ack = 301,表示期望收到開始的序號為301的數據。
我們看到,序號301到900都在接收窗口內。
(2)接收窗口增大總是不受限制的。這就是說,只要接收端的TCP能夠拿出更多的空間
來接收發來的數據,就可以這樣做。圖中給出的例子是:已確認的序號是400,接收方發送
的確認報文段的ack = 401.假定現在接收窗口從情況(1)的600增大到了700,即rwnd = 700。
現在接收窗口的范圍是從401到1100。當接收窗口增大時,接收窗口的前沿總是向前移動的。
(3)這種情況是接收窗口變小了,但接收窗口的前沿沒有變化。例如,現在已確認的序號
是400,接收方發送的確認報文段的ack = 401。假定現在接收窗口從情況(1)的600減小到了
500,即rwnd=500。接收窗口的范圍是從401到900。
(4)這種情況是接收窗口變小了,同時接收窗口的前沿也向前移動了。例如,現在已確認
的序號是500,接收方發送的確認報文段的ack = 501。假定現在接收窗口從情況(1)的600減
小到了500,即rwnd = 500。接收窗口的范圍是從501到1000。
(5)這種情況是接收窗口變小了,但接收窗口的前沿是向后退的。例如,現在已確認的序
號是500,接收方發送的確認報文段的ack = 501。假定現在接收窗口從情況(1)的600減小到了
300,即rwnd = 300。接收窗口的范圍是從501到800。但請注意,這種情況是不允許出現的。
也就是說,接收窗口的前沿是不允許后退的。在開始時,接收窗口的前沿的編號是900。 不管
接收窗口是變大還是變小,這個窗口的前沿的編號可以不動,也可以前移,但是不允許后退。
為什么不允許出現這種情況呢?可以先觀察-.下發送方的情況。在--開始,發送方收到
接收窗口=600 的報文段后(其中ack= 301),發送方就把發送窗口設置為600,可以發送的
數據的序號從301到900。假定發送方發送了在發送窗口內的全部數據。這本來正好落入到
接收窗口之內。但這些數據正在網絡中傳輸時,接收方卻縮小了接收窗口,只接收序號從501
到800之間的數據。這就導致最后的一些數據(編號從801到900)落到接收窗口之外了,
使得接收方只能丟棄這些數據(編號從801到900)。因此,這種情況( 在發送時數據是在發
送窗口之內,但當到達接收端時,這些數據卻落到接收窗口之外)必須避免。總之,我們要
記住,接收窗口的前沿是不允許后退的。

5-73在上題中, 如果接收方突然因某種原因不能夠再接收數據了,可以立即向發送發送把接收窗口置為零的報文段(即rwnd = 0)。 這時會導致接收窗口的前

沿后退。試問這種情況是否允許?

這種情況是允許的。當發送方收到這樣的信息時,並不是把發送窗口縮回到零,
而是立即停止發送。什么時候可以再發送數據,就要等接收方重新開放接收窗口,即給出一
個非零的接收窗口。詳細的過程見本章的常見問題與解答5-10的持續計時器部分。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM