計算機網路自頂向下方法 習題參考答案 第三章
複習題
R1.
a.
稱這個簡單的運輸層協議為 STP。
在傳送端,STP 接收應用程式要傳送的資料(不超過 1196 位元組)、目的地址、埠號;然後 STP 新增 4 位元組頭部資訊,即埠號;將這 1200 位元組的報文段連同目的地址交付給網路層;
在接收端,STP 提取埠和資料,將資料傳送給埠所標誌的程式。
b.
在頭部資訊中增加 4 位元組的源埠號,將資料減少為 1192 位元組。
c.
不。
R2.
略
R3.
y、x
R4.
一些應用程式不想使用 TCP,因為其擁塞控制會降低傳送速率。而且應用本身並不需要可靠的資料傳輸。
R5.
因為今天大多數的防火牆會攔截 UDP
R6.
在應用層新增差錯檢測,需要程式開發人員在程式中新增一些檢測程式碼
R7.
題目正確的翻譯應該是:這兩個報文段都將被定向到主機C上的同一個套接字嗎?還不如直接 google 翻譯呢。那麼現在題目要求清楚了,兩個報文段都將被定向到主機C上的同一個套接字。根據源 IP 區分不同主機。
R8.
通過不同的歡迎套接字。它們的目的埠都是 80。
R9.
判斷究竟是新的分組還是重傳
R10.
處理丟包事件,如果丟包可以重傳
R11.
RTT 固定的好處就是傳送方可以準確判斷 ACK 是否丟失,不過它仍需要一個時間固定的定時器。
R12.
a.
接收方丟棄全部分組,之後傳送方重傳五個分組。
b.
GBN 使用累積確認,因此沒有觸發重傳
c.
只能傳送五個,因為視窗大小就是 5
R13.
a.
只重發第一個分組即可
b.
超時重發第一個分組
c.
只能傳送五個,因為視窗大小就是 5
R14.
a. 錯
b. 錯
c. 對
d. 錯
e. 對
f. 錯
g. 錯
R15.
a. 110 - 90 = 20byte
b. 90
R16.
依然是三個,第一個 seq=43 ack=80,第二個 seq=80 ack=44,第三個 seq=44 ack=81
R17.
R/2
R18.
錯,設為 cwnd 的一半
R19.
略
習題
P1.
假定 A 向 S 的源埠號為 x, B 向 S 的源埠號為 y
a.
A 向 S 的源埠號為 x, 目的埠號為 23
b.
B 向 S 的源埠號為 y, 目的埠號為 23
c.
S 向 A 的源埠號為 23, 目的埠號為 x
d.
S 向 B 的源埠號為 23, 目的埠號為 y
e.
x y 可能相同
f.
不可能
P2.
從 B 到 C:
左邊的連線:源埠號 80,源 IP 為 B 的 IP;目的埠 26145,目的 IP 為 C 的 IP;
右邊的連線:源埠號 80,源 IP 為 B 的 IP;目的埠 7532,目的 IP 為 C 的 IP;
從 B 到 A:
源埠號 80,源 IP 為 B 的 IP;目的埠 26145,目的 IP 為 C 的 IP;
P3.
注意應在溢位時向最低位進位:
01010011
+ 01100110
————————————
10111001
+ 01110100
————————————
(1) 00101101
+ 1
————————————
00101110
其反碼為 11010001
使用反碼有以下好處:
- 不依賴系統是大端還是小端
- 計算檢驗和比較簡單快速
接收方檢驗差錯的方法是將三個位元組與檢驗和相加,如果任何一個位為 0,說明出錯
1位元的差錯肯定會導致結果不同
2位元的差錯可能會檢測不出,比如題中第一、二位元組變為 01010010,01100111,即最後一個位元反轉
P4.
a. 00111110
b. 01000000
c. a 中的第一、二位元組變為 01011101、01100100
P5.
不能確保,如同上兩題討論的那樣
P6.
如果 rdt2.1 傳送方正處於“等待來自上層的呼叫0”,接收方處於“等待來自下層的0”,傳送方傳送序號為 0 的分組,而接收方正確接收並向傳送方傳送 ACK;此時傳送方處於“等待 ACK 或 NAK 0”,接收方處於“等待下層的 1”,如果此 ACK 損壞,傳送方重發序號0的分組,而接收方會發送 NAK,這將導致一個死迴圈;
其實此接收方並沒有標註初始狀態,如果傳送方初始狀態為“等待來自上層的 0”,接收方初始為“等待下層的 1”,也會導致上述死鎖。
P7.
ACK 分組沒有序號是因為接收方、傳送方都不需要該序號。
P8.
可以直接使用 rdt2.2 中的接收方
P9.
P10.
類似於 rdt3.0 的傳送方,在 rdt2.1 的傳送方上加上 start_timer 以及 timeout 事件即可。timer 的時間要大於最大往返時延。
P11.
如果從“等待來自下層的1”中刪除,不會影響正常工作,因為 sndpkt 已經被生成了。
但是如果從“等待來自下層的0”中刪除,而且接收方剛剛啟動(處於初始狀態),sndpkt 是一個錯誤的值(很可能是一個隨機值),那麼傳送方會認為 ACK 損壞並重發分組,接收方會繼續傳送錯誤值,浙江導致一個死鎖。
P12.
僅有一個位元差錯時,協議正常工作,只不過可能比 rdt3.0 傳送方反應更快。
而當定時器時間過短時,每一個超時重發的分組都將會導致正在傳送的包重發,這樣從第一個包累積到第n個包,分組傳送的次數將趨於無窮。
P13.
像圖片展示的那樣,兩個 M0 將無法區分
P14.
分組 x 丟失只能被接收方檢測到,且只有 x-1,x+1 都被接收後。如果傳送方在傳送 x 之後隔較長時間才傳送 x+1,那麼這段時間 x 將一直不會被重發。
而當資料量較大且很少丟包時,用 NAK 協議傳送的資料包的數量明顯比 ACK 協議少
P15.
中文版翻譯較差,錯誤極多,無力吐槽。。。這裡按英文版的 98% 來做:
U = (nL/R) / (RTT + L/R) > 98%
解出 n > 2450.98
因此 n 至少是 2451
P16.
肯定能增加利用率,接收到 ACK0 或 ACK1 之後傳送方認為分組已經成功到達,即使事實不是如此。
可能導致許多問題,例如差錯出現並不會重發、造成無謂的重發等。
P17.
B與A類似,只不過初始狀態從 receive from A 開始
P18.
略
P19.
略
P20.
略
P21.
略
P22.
a.
考慮兩種極端情況:
- 傳送方傳送 k-4,k-3,k-2,k-1,接收方都完整得接收併發送 ACK,但 ACK 全都未傳到傳送方,接收方的期待序號為 k,而傳送方視窗序號為 [k-4, k-1]
- 如果 ACK 全都傳回,則傳送方更新 base,其序號為 [k, k+3]
因此序號可能是 [k-4, k+3]
b.
如果接收方期待 k,則它一定將比 k-1 小的 ACK 傳送出去了,如果要使傳送方傳送 k-1,那麼它至少已經接收到了 k-5 的 ACK。
因此正在傳播回傳送方的 ACK 序號可能是 [k-4, k-1]
P23.
設序號為 0(第一個 0),1,…,k-1,0(第二個 0)
對於 SR,要使其序號發生混雜,至少是當接收方剛剛包含第二個 0,即接收方視窗為[k-N-1, 0],也就是說 k-N (包括 k-N) 之前的都接收過了。要使序號混雜還有一個條件就是第一個 0 在傳送方視窗且恰好其 ACK 丟失,需要重發。0(第一個0)~k-N 為 k-N+1 個值,如果視窗長度不足 k-N+1,則第一個 0 和第二個 0 不會同時包含在傳送或接收視窗中。
所以視窗長度 N <= k-N,即 N <= k/2
GBN 類似,N <= k 即可
P24.
a.
可能, ACK 還沒來得及返回,傳送方超時重發,之後傳送方接收到 ACK 並移動視窗,那麼它之前重發的分組的 ACK 將落在視窗之外
b.
可能,類似 a
c.
是的
d.
是的
P25.
a.
UDP 直接將使用者資料打包進報文並立即傳輸,而 TCP 會將資料寫進快取並可能分成多個報文
b.
TCP 有流量控制和擁塞控制,而 UDP 沒有
P26.
a.
注意到 TCP 是位元組流編號的, L 的最大值為 2^32 byte
b.
設 N 為報文數:
P27.
a.
序號、源、目的埠號分別為 207、302、80
b.
序號、源、目的埠號分別為 207、80、302
c.
127
d.
P28.
TCP 讓傳送方 A 維護一個接收視窗來提供流量控制,主機 B 將實時的 rwnd 值放入發給 A 的報文中,通知 B 的快取大小。A 確保 LastByteSent - LastByteAcked <= rwnd,當快取不足時,將暫停向 B 傳送資料
P29.
a.
防止有攻擊者發動 SYN 洪泛攻擊
b.
不能。當伺服器使用 SYN cookie 時,它不維護 cookie 或其他資訊,因此半開連線不可行。攻擊者並不知道某個伺服器和某 IP 對應的初始序列號,因為那個祕密數只有伺服器知道。
c.
理論上可行
P30.
a.
超時值是固定的,單一得增加有限快取的長度,會導致未丟失的分組被重傳
b.
有助於。
P31.
略,自己慢慢算算吧
P32.
a.
EstimatedRTT’
= 0.9 ( 0.9 ( 0.9 ( 0.9 EstimatedRTT + 0.1 SampleRTT1 ) + 0.1 SampleRTT2 ) + 0.1 SampleRTT3 ) + 0.1 SampleRTT4
= 0.9^4 EstimatedRTT + 0.1 SampleRTT4 + 0.9 * 0.1 SampleRTT3 + 0.9^2 * 0.1 SampleRTT2 + 0.9^3 * 0.1 SampleRTT1
b.
推廣到 n:
EstimatedRTT’ = 0.9^n EstimatedRTT + 0.9^(n-1) * 0.1 SampleRTT1 + 0.9^(n-2) * 0.1 SampleRTT2 + … + 0.1 SampleRTTn
c.
根據上式:
可以看出 i 越小, 對 的影響越小,且其權重呈指數形式銳減
P33.
假設傳遞分組 1 到目的地,超時後源又重發分組 1 的副本分組 2;如果分組 1 的 ACK 返回到源,則源可能將它作為分組 2 的 ACK,從而計算了一個錯誤的 RTT
P34.
SendBase - 1 <= LastByteRcvd
LastByteRvcd 是剛到達 B 的編號, SendBase - 1 是已經到達 B 的編號
P35.
y 之前的所有位元組都被接收,因此 y-1 <= LastByteRcvd
P36.
考慮當分組錯序到達會發生什麼,分組 1 正確到達,目的地傳送 ACK,分組 3 提前於分組 2 到達,傳送一個冗餘 ACK,這將導致傳送方重傳分組 2,即使分組 2 並未丟失
P37.
a.
GBN:
A:首先發送分組 12345,後來重發 2345,總共 9 個分組
B:首先發送 ACK 1111,後來傳送 2345,總共 5 個 ACK
SR:
A:首先發送分組 12345,後來重發 2,總共 6 個分組
B:首先發送 ACK 1345,後來傳送 2,總共 5 個 ACK
TCP:
A:首先發送分組 12345,後來重發 2,總共 6 個分組
B:首先發送 ACK 2222,後來傳送 6,總共 5 個 ACK
b.
GBN、SR 需要等待超時,而 TCP 使用快速重傳,故 TCP 最快
P38.
是的
P39.
λ’in 超過 R/2,會導致更多的丟包以及重傳,λout 可能會下降
P40.
a. [1, 6] 和 [23, 26]
b. [6, 16] 和 [17, 22]
c. 三個冗餘 ACK
d. 超時
e. 32
f. 42/2 = 21
g. 29/2 = 14
h. 分組 1 (p1) 在傳輸輪迴 1 (t1) 中傳送,p2~p3 在 t2 中傳送,p4~p7 在 t3 中傳送,p8~p15 在 t4,p16~p31 在 t5,p32~p63 在 t6,p64~p96 在 t7,
因此分組 70 在第 7 個傳輸輪迴內傳送
i. ssthresh = 4,cwnd = ssthresh + 3MSS = 7
j. 在第16個傳輸輪迴時,ssthresh = cwnd/2 = 21,cwnd = 1 並進入慢啟動狀態,則在第19個傳輸輪迴中,ssthreash = 21,cwnd = 4
k. t17:1個,t18:2個,t19:4個,t20:8個,t21:16個,t22:21個
1 + 2 + 4 + 8 + 16 + 21 = 52 個
P41.
從圖中可以看出,這不是一種平等演算法
P42.
超時僅能減緩 分組未丟失超時重傳 這種情況,不能阻止 TCP 向可能出現擁塞的端到端路徑上繼續傳送更多的新的分組。
P43.
流量控制將無法適用,因為接受快取足夠大。
沒有丟包、沒有超時,因此擁塞控制也無法適用。
無需適用任何措施,當傳送快取滿載時,自動就慢下來了。
P44.
a.
每個 RTT 加 1 個 MSS,因此需要 6 個 RTT
b.
6 + 7 + 8 + 9 + 10 + 11 = 51 MSS
平均吞吐量為 51MSS / 6RTT = 8.5 MSS/RTT
P45.
a.
從 W/2RTT 到 W/RTT 期間總共傳送的分組數:
b.
P46.
a.
最大視窗長度 W 受限於鏈路速率:W * MSS / RTT = 10Mbps
得到 W = 125
b.
從 W/2 到 W:
平均視窗長度為 0.75W = 94
平均吞吐量為 94 * 1500 * 8 / 0.15 = 7.52Mbps
c.
W’ = W/2 + 3 = 65
從 W’ 到 W:
(125-65)*150ms = 9s
P47.
不會
P48.
a.
W*MSS/RTT = 10Gbps
W = 125000
b.
7.52Gbps
c.
156.2min
P49.
已知 TCP 平均吞吐量
則
因此 T 是 D 的函式
P50.
每秒傳送最多 30 個報文段,即每 100ms 最多傳送 3 個,每 50ms 最多傳送 1 個;無論何時發生丟包,假定 C1 每 100ms 調整一次視窗, C2 每 50ms 調整一次。
a.
t/ms | C1.cwnd/報文段 | C2.cwnd/報文段 |
---|---|---|
0 | 10 | 10 |
50 | 5↓ (↓ 的意思是因丟包而減少一半) | 10 |
100 | 2↓ | 5↓ |
150 | 1↓ | 5 |
200 | 1▲ (▲ 的意思是無法繼續減少) | 2↓ |
250 | 1▲ | 2 |
300 | 1▲ | 1↓ |
350 | 2↑(↑ 的意思是加性增) | 1 |
400 | 1↓ | 1▲ |
450 | 2↑ |