1.在傳輸原語中, LISTEN 是一個阻塞調用。試問這是嚴格要求的嗎?如果不是,請解釋如何使用一個非阻塞的原語。與正文中描述的方案相比,你的方案有什么優點?
解:不是。LISTEN可能表示願意建立新的連接,而不是阻止。當嘗試連接時,可以給調用者一個信號。然后,它將執行,例如,OK或REJECT接受或拒絕連接。
2.傳輸服務原語假設在兩個端點之間建立連接的過程是不對稱的,一端(服務器〉執行LISTEN,而另一端(客戶端〉執行CONNECT 。然而,在對等應用中,比如BitTorrent那樣的文件共享系統,所有的端點都是對等的。沒有服務器或客戶端功能之分。試問如何使用傳輸服務原語來構建這樣的對等應用?
解:由於這兩個端點是對等點,因此需要一個單獨的應用程序級機制,在運行時通知端點哪個端將充當服務器,哪個端將充當客戶端以及它們的地址。這樣做的一種方法是有一個單獨的協調程序,在建立端點之間的連接之前將此信息提供給端點。
3.在圖示的底層模型中,它的假設條件是網絡層的數據包有可能被丟失,因此,數據包必須被單獨確認。假如網絡層百分之百可靠,並且永遠不會丟失數據包,試問圖中需要做什么修改嗎?如果需要的話(斜體標記的狀態是由到達的包引起的。實線表示客戶的狀態序列,虛線表示服務器的狀態序列)。

4.解:從被動建立到已建立的虛線不再取決於收到的確認。從本質上講,被動建立待定狀態消失了(因為客戶機收到連接接收段之后不必發送確認段了,所以服務器可以在收到連接建立請求的時候就可以直接建立連接了,注)。
5.在本章的套接字編程實例的兩部分中,有一條注釋說明了SERVER PORT 在客戶機和服務器中必須相同。試問為什么這一條如此重要?
解:如果客戶端向服務器端口發送數據包,而服務器沒有監聽該端口,則該數據包將不會傳遞到服務器(所以雙方必須約定一個特定端口,注)。
6.在Internet 文件服務器例子中,除了服務器端的監聽隊列為滿之外,試問還有其他原因能導致客戶機的connect ()系統調用失敗嗎?假設網絡完美無缺。
解:服務器沒有執行listen()方法調用(即服務器沒有監聽)
7.評判一個服務器是否全程活躍,或者通過進程服務器來按需啟動它,的一個標准是它所提供服務的使用頻率。試問你能想出作出這一決定的任何其他標准嗎?
解:另一個標准是客戶端如何受到進程服務器技術中涉及的額外延遲的影響(服務器可能在執行過程中,但是沒有響應客戶機而帶來了延遲,應該是這個吧?注)。所請求的服務器必須加載,並且可能必須在客戶端請求得到服務之前進行初始化(所以后半句是個解決方法,注)。
8.假設采用時鍾驅動方案來生成初始序號,該方案用到了一個15 位的時鍾計數器。每隔100 毫秒時鍾滴答一次,最大數據包生存期為60 秒。試問,每隔多久需要重新同步一次?
(a )在最差情況下。
(b )當數據每分鍾用掉240 個序號的時候。
解:(a)2的15次方,即32768次滴答,耗時3276.8秒。假定數據發送率極低(接近0),那么發送方在3276.8-60=3216.8秒時進入禁止區,需要同步一次
(b)每分鍾使用 240 個序列號,即每秒使用 4 個號碼,如果時間以 t 表示(以秒為單位),那么實際的序列號是 4t。現在由於每秒鍾 10 個滴答,禁止區的左邊是10(t-3216.8)。令 4t =10(t-3216.8),得 t=5316.3 秒。即當 t=5316.3 時,開始進入禁止區,因此當 t=5316.3 時需要進行一次重新同步。(此題好好研究。。。)
9.試問,為什么最大數據包生存期T 必須足夠大,大到確保不僅數據包本身而且它的確認也消失在網絡中?
解:下圖中,如果ACK包到達后,如果還有一個老的對y的確認存活於網絡中,那么就會建立一個不需要的連接(或許人生不應該在這幾個題目上糾結超過三個小時)。

10.想象用兩次握手過程而不是三次握手過程來建立連接。換句話說,第三個消息不再是要求的。試問現在有可能死鎖嗎?請給出一個例子說明存在死鎖,或者證明死鎖不存在。
解:死鎖是有可能的。例如,一個包突然到達一個,並確認它,但是確認丟失了。a現在是開放的,而b根本不知道發生了什么。同樣的事情發生在b上,兩者都是打開的,但是需要不同的序列號。必須引入超時以避免死鎖。
11.想象一個廣義的n-軍隊對壘問題,在這里任何兩支藍軍達成一致意見后就足以取得勝利。試問是否存在一個能保證藍軍必贏的協議?
解:沒有。(可以搜索一下兩軍對壘問題,這個問題是類似於TCP協議連接釋放的問題)
12.請考慮從主機崩潰中恢復的問題。如果寫操作和發送確認之間的間隔可以設置得相對非常小,那么,為了使協議失敗的概率最小,試問兩種最佳的發送端-接收端策略是什么?
解:即崩潰發生在寫與確認操作之前或之后。發送端在前者情況下,沒有收到確認將會重傳,而后者沒有影響。接收端都沒有任何影響。
13.在下圖中,假設加入了一個新的流E,它的路徑為從Rl 到R2 ,再到R6 。試問對於5 個流的最大-最小帶寬分配有什么變化?
解:在鏈路R1R2和R2R3上,流A的分配為1/2(由於在路由器5上,有4個流,所以除A外都變成1/4的帶寬)。流E的分配將在鏈接R1R2和R2R6上分配1/2。所有其他保持不變。

14.請討論信用協議與滑動窗口協議的優缺點。
解:滑動窗口更簡單,只有一組參數(窗口邊緣)可以管理。此外,窗口大小增加或減少的問題也不會發生,即使分段到達的順序是錯誤的。然而,信用計划更靈活,允許對緩沖進行動態管理,允許獨立於確認。
15.擁塞控制的公平性方面有一些其他的策略,它們是加法遞增加法遞減(AIAD, AdditiveIncrease Additive Decrease )、乘法遞增加法遞減( MIAD, Multiplicative Increase AdditiveDecrease )、乘法遞增乘法遞減( MIMD, Multiplicative Increase Multiplicative Decrease )。請從收斂性和穩定性兩個方面來討論這三項政策。
解:在AIAD和MIMD中,用戶將沿着效率線振盪,但不會收斂。MIAD會像AIMD一樣收斂(但不如后者公平,MIAD會向兩極偏移,遠離中心點,注)。這些政策都不固定。在AIAD和MIAD中減少策略不具有攻擊性,而在MIAD和MIMD中增加策略則不溫和。
16.試問,為什么會存在UDP ?用戶進程使用原始IP 數據包還不夠嗎?
解:不夠。IP數據包包含指定目標計算機的IP地址。一旦這樣的數據包到達,網絡處理程序不知道將它交給哪個進程。UDP數據包包含目標端口,因此它們可以被傳遞到正確的過程中。
17.請考慮一個建立在UDP 之上的簡單應用層協議,它允許客戶從一個遠程服務器獲取文件,而且該服務器位於一個知名地址上。客戶端首先發送一個請求,該請求中包含了文件名;然后服務器以一個數據包序列作為響應,這些數據包中包含了客戶所請求的文件的不同部分。為了確保可靠性和順序遞交,客戶和服務器使用了停-等式協議。忽略顯然存在的性能問題,試問你還能看得出這個協議存在的另一個問題嗎?請仔細想一想進程崩潰的可能性。
解:客戶端可能會得到錯誤的文件。假設客戶端a發送請求文件f1,然后崩潰。然后,另一個客戶端b使用相同的協議請求另一個文件f2。假設在同一台機器上運行的客戶機b(具有相同的IP地址)將其UDP套接字綁定到a之前使用的相同端口。此外,假設b的請求失敗了。當服務器(對請求的答復)到達時,客戶端b將接收到它,並假設它是響應它自己的請求,但是文件卻不正確。
18.一個客戶通過一條1 Gbps 的光纖向100 千米以外的服務器發送一個128 字節的請求。試問在遠過程調用中這條線路的效率是多少?
解:在1 Gbps線路上發送1000比特需要1μ秒(估算,實際1024bit)。光纖中的光速是200公里/毫秒,所以請求到達需要0.5毫秒,回復返回需要0.5毫秒。總共在1毫秒內傳輸了1000比特。這相當於1兆比特/秒,或1/10的效率。
19.繼續考慮上一個問題的情形。對於給定的1 Gbps 線路和1 Mbps 線路兩種情況,請計算最小的可能響應時間。試問由此你得出了什么結論?
解:在1 Gbps時,響應時間由光速決定。可以達到的最佳效果是1毫秒。在1 mbps時,抽出1024位需要大約1毫秒,最后一位到達需要0.5毫秒,在最佳情況下回復需要0.5毫秒。最好的RPC時間是2毫秒。得出的結論是,將線路速度提高1000倍,只會獲得性能上的兩倍。除非千兆位線是驚人的便宜,否則不值得有這個應用。(這里都是光纖,實際上小寒覺得1Mbps的光纖太罕見了)
20.UDP 和TCP 在傳遞消息時,都使用了端口號來標識接收方實體。請給出兩個理由說明為什么這兩個協議要發明一個新的抽象ID (端口號),而不用進程ID ?在設計這兩個協議的時候,進程ID 早己經存在。
解:這里有三個原因。首先,進程ID是OS特定的,使用進程ID會使這些協議依賴於OS(所以不同的主機是有不同的進程ID)。第二,單個進程可以建立多個通信渠道。第三,讓進程監聽眾所周知的端口很容易,但眾所周知的進程ID是不可能的。
21.一些RPC 實現為客戶端提供了一個選項,使用實現在UDP 之上的RPC 還是使用實現在TCP 之上的RPC 。試問在什么樣的條件下,客戶端更喜歡使用基於UDP 的RPC?在什么條件下,他或許更喜歡使用基於TCP 的RPC?
解:如果操作是冪等的,並且所有參數或結果的長度都足夠小,可以容納在單個UDP數據包中,則客戶端將在UDP上使用RPC。另一方面,如果參數或結果很大,或者操作不是冪等的,他將使用基於TCP 的RPC。
22.考慮兩個網絡NI 和N2 ,在源端A 和目的端D 之間有相同的平均延遲。在NI 中,不同的數據包所經歷的延遲是均勻分布,且最大延遲為10 秒:而在N2 中, 99%的數據包所經歷的延遲都小於l 秒,且沒有最大延遲上界。請討論在這兩種情況下如何用RTP來傳輸實時音頻/視頻流。
解:在N1中,由於最大延遲為10秒,可以選擇一個適當的緩沖區在目的地D存儲略多於10秒的數據。這將確保不會出現抖動。另一方面,在N2中,一個較小的緩沖器,可能使用2-3秒,但是一些幀(經歷更大的延遲)將被刪除。
23.試問最小TCP MTU的總長度是多少?包括TCP 和IP 的開銷,但是不包括數據鏈路層的開銷。
解:默認段為536字節。TCP增加20個字節,IP也增加20個字節,使默認的576字節總計。
24.數據報的分段和重組機制由IP 來處理,對於TCP 不可見。試問,這是否意味着TCP不用擔心數據錯序到達的問題?
解:即使每個數據報都完好無損地到達,數據報也有可能以錯誤的順序到達,因此TCP必須准備好適當地重新組裝消息的各個部分。
25.RTP 被用來傳輸CD 品質的音頻,這樣的音頻信號包含一對16 位的采樣值,采樣的頻率為每秒鍾44100 次,每個采樣值對應於一個立體聲聲道。試問RTP 每秒鍾必須傳輸多少個數據包?
解:每個樣值占用4個字節(立體聲2字節、16位2字節)。這就給出了每個包總共256個樣本(不知道256怎么來的;44.1KHz是理論上的CD音質界限,注)。有44100個樣本/秒,所以每包256個樣本,需要44100/256個或172個數據包來傳輸一秒的音樂。
26.試問有可能將RTP 代碼放到操作系統內核中,與UDP 代碼放在一起嗎?請解釋你的答案。
解:當然。調用者必須提供所有所需的信息,但是RTP沒有理由不能在內核中,就像UDP一樣。
27.主機l 上的一個進程己經被分配了端口p ,主機2 上的一個進程也己經被分配了端口q,試問這兩個端口之間有可能同時存在兩個或者多個TCP 連接嗎?
解:不能。連接僅由其套接字標識。因此,(1,p)-(2,q)是這兩個端口之間唯一可能的連接。
28.在TCPP頭格式中,我們看到除了32 位的確認號字段外,在第四個字還有一個ACK 標志位。試問這個標志位有額外的意義嗎?為什么有?或者為什么沒有?
解:ack位用於判斷是否使用32位字段。但如果沒有,則必須始終使用32位字段,如果有必要的話,必須確認已經確認的字節。簡而言之,對於正常的數據通信來說,它並不是絕對必要的。然而,它在連接建立過程中起着至關重要的作用,在三次握手的第二條和第三條消息中使用它。
29.TCP 段的最大有效載荷為65 495 字節。試問為什么選擇如此奇怪的數值?
解:整個TCP段必須適合於IP數據包的65515字節有效負載字段(IP頭為20字節)。由於tcp報頭至少為20個字節,因此只剩下65 495個字節用於TCP數據。
30.描述從圖中進入SYN RCVD (到達一個連接請求,等待ACK)狀態的兩種途徑。
解:一種方法是先從LISTEN開始。如果接收到SYN,則協議進入SYN RCVD 狀態。另一種方法是在進程主動嘗試執行打開並發送SYN時開始。如果另一方也打開了,並且接收了一個SYN,則還將輸入SYN RCVD狀態。

31請考慮在一條往返時間為10 毫秒的無擁塞線路上使用慢速啟動算法的效果。接收窗口為24 KB,最大段長為2 KB。試問需要多長時間才能首次發送滿窗口的數據?
解:第一個突發2K,10ms,20ms,30ms后為4K、8K、6K字節。40ms后為min{24K,32K},所以下一個是24K。
32假設TCP 的擁塞窗口被設置為18 KB,並且發生了超時。如果接下來的4 次突發傳輸全部成功,試問擁塞窗口將達到多大?假設最大段長為1 KB 。
解:由於超時,所以接下來的第一次突發還是1K,到第四次即為8K。
33如果TCP 往返時間RTT 的當前值是30 毫秒,緊接着分別在26 、32 、24 毫秒確認到達,那么,若使用Jacobson 算法,試問新的RTT 估計值為多少?請使用α = 0.9 。
解:公式為:SRTT =αSRTT + (1 一α) R。新的值分別為29.6, 29.84, 29.256ms(計算樣例:SRTT=0.930+0.126)。
34一台TCP 機器正在通過一條1 Gbps 的信道發送滿窗口的65 535 字節數據,該信道的單向延遲為10 毫秒。試問可以達到的最大吞吐量是多少?線路的效率是多少?
解:每20毫秒可以發送一個窗口。這提供了50個窗口/秒,最大數據速率約為330萬字節/秒。線路效率為26.4 mbps/1000 mbps,即2.6%。
35一台主機在一條線路上發送1500 字節的TCP 有效載荷,最大數據包生存期為120 秒,要想不讓序號回繞,試問該線路的最快速度為多少?要考慮TCP 、IP 和以太網的開銷。假設可以連續發送以太網幀。
解:目標是在120秒內發送232字節或35 791 394個有效負載字節/秒(32是序號位數,注)。這是23 860 個1500字節幀/秒。TCP開銷為20字節。IP開銷為20字節。以太網開銷為26個字節。這意味着對於1500字節的有效負載,必須發送1566字節。如果我們要每秒鍾發送23860個幀(每幀1566字節),我們需要一條299 Mbps的線路。在任何比這更快的情況下,我們都會面臨兩個不同的tcp段同時擁有相同的序列號的風險。
36為了解決IPv4的局限性,主要經過IETF的努力,導致了IPv6 的設計,但仍然有很多人不願意采用這個新版本。然而,卻沒有人做出解決TCP 限制所需要的重大努力。請解釋為什么會這樣。
解:IP是網絡層協議,TCP是端到端傳輸層協議。對IP協議規范的任何更改都必須包含在因特網上的所有路由器上。另一方面,只要兩個端點運行兼容版本,TCP就可以正常工作。因此,可以在不同的主機上同時運行許多不同版本的TCP,但IP的情況並非如此。
37在一個網絡中,最大段長為128 字節,段的最大生存期為30 秒,序號為8 位,試問每個連接的最大數據率是多少?
解:發送者不能在30秒內發送超過255個段(2的8次方),即255×128×8bit。因此,數據速率不超過8.704 kbps。
38 假設你正在測量接收一個段所需要的時間。當發生一個中斷時,你讀出系統時鍾的值(以毫秒為單位)。當該段被完全處理后,你再次讀出時鍾的值。你測量的結果是270 000 次為0 毫秒, 730 000 次為1 毫秒。試問接收一個段需要多長時間?
解:計算平均值:(270 000×0+730 000ms)/1 000 000。它需要730μs。
39 一個CPU 執行指令的速率為1000 MIPS 。數據復制可以按每次64 位來進行,每個字的復制需要花費10 條指令。如果一個入境數據包要被復制4 次,試問這個系統能處理一條1 Gbps 的線路嗎?為了簡單起見,假設所有的指令,包括讀或者寫內存的指令,都以1000 MIPS 的全速率運行。
解:復制8個字節需要4×10=40條指令。40條指令需要40ns(納秒)。因此,每個字節需要5個ns的CPU時間進行復制。因此,該系統能夠處理200 MB/秒或1600 Mbps。如果沒有其他瓶頸,它可以處理1 Gbps線路。序列空間的大小大約為264字節(這一句是什么意思?)。
40 為了避開當序號回繞時老的數據包仍然存在這個問題,可以使用64 位序號。然而,從理論上講,光纖的運行速度可以達到75 Tbps。試問在未來的75 Tbps 網絡中使用64位序號,數據包的最大生存期為多少才能確保不會發生回繞問題?假設每個字節都有自己的序號,像TCP 那樣。
解:2×1019字節75 Tbps發射機以每秒9.375×1012個序列號(每個字節一個序號,注)的速率耗盡序列空間。序號回繞需要200萬秒。由於一天中有86 400秒的時間,它將需要超過3周的時間來回繞,即使是75 tbps。最大數據包壽命小於3周就能防止問題的發生。簡而言之,64位很可能在很長一段時間內起作用。
41 在前面章節中,我們計算了主機以80 000 包/秒的速度往一條千兆線路發送,只使用了6250 指令,留下一半的CPU 時間給應用程序。這里計算時假設數據包大小為1500 字節。針對ARPANET 大小的數據包(128 字節)重復上述計算。在這兩種情況下,假設給出的數據包大小均包括了所有開銷。
解:如果數據包是11.72倍(1500/128),那么每秒的數量是11.72倍,所以每個數據包只能得到6250/11.72或533條指令。
42 對於一個運行在4000 千米距離上的1 Gbps 網絡,限制因素是延遲而並非帶寬。請考慮這樣一個MAN(大型的計算機網絡,屬於IEEE802.6標准,是介於LAN和WAN之間能傳輸語音與數據的公用網絡),源端和接收方之間的平均距離為20 千米。試問多大的速率使得1 KB數據包的傳輸延遲等於光速的往返延遲?
解:光纖和銅的光速約為200公里/毫秒。對於一條20公里長的線路,延遲是100μ秒單程和200μ秒往返行程。一個1Kb的數據包有8192位。如果發送8192位並得到確認的時間為200μ秒,則傳輸和傳播延遲相等。如果B是位時間,那么我們就有8192 B=2×10−4秒。數據速率為1/B,大約為40 Mbps。
43 試計算下列網絡的帶寬-延遲乘積:(1) T1 ( 1.5 Mbps) ; (2 )以太網(10 Mbps) ;(3) T3 (45 Mbps )和( 4) STS-3 (155 Mbps )。假設RTT 為100 毫秒。請回憶TCP頭有16 位保留用作窗口大小( Window Size )。根據你的計算,試問它有什么隱含的意義嗎?
解:答案為:(1)18.75kb(1.5*1000*0.1/8)、(2)125kb、(3)562.5kb、(4)1.937MB。16位窗口大小意味着發送者在必須等待確認之前最多可以發送64KB。這意味着如果使用的網絡技術是以太網、T3或STS-3,則發送方不能使用TCP連續發送並保持管道已滿(把線路比喻成管道,把管道比作線路,手動滑稽(✪ω✪))。
44 對於地球同步衛星上的一條50Mbps 信道,試問它的帶寬-延遲乘積是多少?如果所有的數據包都是1500 字節(包括開銷〉,試問窗口應該為多大(按數據包為單位〉?
解:往返延遲約540毫秒,因此在50 Mbps信道下,帶寬產品延遲為27兆位或3 375 000字節。對於1500個字節的數據包,需要2250個數據包來填充管道,因此窗口至少應該是2250個數據包。