計(jì)算機(jī)網(wǎng)絡(luò)自頂向下方法--運(yùn)輸層


復(fù)習(xí)題

R1. 假定網(wǎng)絡(luò)層提供了下列服務(wù)。源主機(jī)中的網(wǎng)絡(luò)層接受最大長(zhǎng)度為1200字節(jié)和來(lái)自運(yùn)輸層的目的主機(jī)地址的報(bào)文端。網(wǎng)絡(luò)層則保證將報(bào)文段交付給位于目的主機(jī)的運(yùn)輸層。假定在目的主機(jī)上能夠運(yùn)行許多網(wǎng)絡(luò)應(yīng)用進(jìn)程。
a.設(shè)計(jì)最簡(jiǎn)單的運(yùn)輸層協(xié)議,該協(xié)議將使應(yīng)用程序數(shù)據(jù)到達(dá)目的主機(jī)上所希望的進(jìn)程。假設(shè)目的主機(jī)中的操作系統(tǒng)已經(jīng)為每個(gè)運(yùn)行的應(yīng)用進(jìn)程分配一個(gè)4字節(jié)的端口號(hào)。
b.修改這個(gè)協(xié)議,使它向目的進(jìn)程提供一個(gè)“返回地址”。
c.在你的協(xié)議中,該運(yùn)輸層在計(jì)算機(jī)網(wǎng)絡(luò)核心中“什么也不做”嗎?

a.首先,要有一個(gè)進(jìn)程-端口號(hào)關(guān)系表,存儲(chǔ)不同進(jìn)程對(duì)應(yīng)的端口號(hào);其次,要有一個(gè)程序來(lái)處理應(yīng)用層-運(yùn)輸層-網(wǎng)絡(luò)層之間的數(shù)據(jù)解析或數(shù)據(jù)打包:源主機(jī)中,該程序負(fù)責(zé)將應(yīng)用層數(shù)據(jù)以及目的主機(jī)中應(yīng)用程序?qū)?yīng)的端口號(hào)信息打包交給網(wǎng)絡(luò)層;目的主機(jī)中,該程序負(fù)責(zé)將從網(wǎng)絡(luò)層接收的數(shù)據(jù)交給運(yùn)輸層,并在運(yùn)輸層通過(guò)進(jìn)程-端口號(hào)關(guān)系表查找到對(duì)應(yīng)的應(yīng)用程序,將數(shù)據(jù)(除去端口號(hào))交給應(yīng)用層對(duì)應(yīng)的應(yīng)用程序;
b.只需要在源主機(jī)的數(shù)據(jù)包中添加源主機(jī)應(yīng)用程序?qū)?yīng)的端口號(hào)即可。
c.不是,運(yùn)輸層要負(fù)責(zé)將從網(wǎng)絡(luò)層接收到的數(shù)據(jù)正確地交給應(yīng)用層的應(yīng)用程序。
(說(shuō)明:根據(jù)自己的理解寫的,在網(wǎng)上或書上沒(méi)有找到相應(yīng)答案)

R2.考慮有一個(gè)星球,每個(gè)人都有一個(gè)六口之家,每個(gè)家庭都住在自己的房子里,每個(gè)房子都有一個(gè)唯一的地址,并且每個(gè)家庭中的每個(gè)人都有一個(gè)唯一的名字。假定該星球有一個(gè)從源家庭到目的家庭交付信件的郵政服務(wù)。該郵件服務(wù)要求:(1)在一個(gè)信封中有一封信;(2)在信封上清楚地寫上目的家庭(并且沒(méi)有其他東西)的地址。假設(shè)每個(gè)家庭有一名家庭成員代表為家庭中的其他成員收集和分發(fā)信件。這些信沒(méi)有必要提供接受者。
a.使用對(duì)上面問(wèn)題1的解決方案作為啟發(fā),描述家庭成員代表能夠使用的協(xié)議,以便從發(fā)送家庭成員向接收家庭成員交付信件。
b.在你的協(xié)議中,該郵政服務(wù)必須打開(kāi)信封并檢查信件內(nèi)容才能提供其服務(wù)嗎?

a.只需要信封上只需要在信封上寫明收件人即可,這樣當(dāng)信件達(dá)到家庭時(shí),負(fù)責(zé)收集和分發(fā)的成員由于知道收件人是家里的哪個(gè)成員,就可以將信件正確地交付給目的家庭成員。(題目中要求信中沒(méi)有必要提供接受者,所以在信封上寫明接受者是可以的)
b.不需要,因?yàn)樾欧馍系哪康募彝ズ徒邮杖诵彰@兩個(gè)信息已經(jīng)足夠?qū)⑿偶脑醇彝コ蓡T正確地送達(dá)目的家庭成員。
(說(shuō)明:根據(jù)自己的理解寫的,在網(wǎng)上或書上沒(méi)有找到相應(yīng)答案)

R3. 考慮在主機(jī)A和主機(jī)B之間有一條TCP連接。假設(shè)從主機(jī)A傳送到主機(jī)B的TCP報(bào)文段使用的源端口號(hào)是x,目的端口號(hào)是y。那么對(duì)于從主機(jī)B傳送到主機(jī)A的TCP報(bào)文段而言,源端口號(hào)和目的端口號(hào)分別是多少?

源端口號(hào)是y,目的端口號(hào)是x。

3.1.4 描述應(yīng)用程序開(kāi)發(fā)者為什么可能選擇在UDP上運(yùn)行應(yīng)用程序而不是在TCP上運(yùn)行。

如果該應(yīng)用程序開(kāi)發(fā)者想更精細(xì)地控制應(yīng)用層發(fā)送數(shù)據(jù)的時(shí)間和方式,非常注重?cái)?shù)據(jù)的網(wǎng)絡(luò)傳輸效率,但允許數(shù)據(jù)出現(xiàn)小部分的丟失,那么該應(yīng)用程序開(kāi)發(fā)者就可能選擇UDP而不是TCP。

3.1.5 在今天的因特網(wǎng)中,為什么語(yǔ)音和視頻流量常常是經(jīng)TCP而不是UDP發(fā)送?

UDP和TCP現(xiàn)在都用于多媒體應(yīng)用(語(yǔ)音和視頻等),這些應(yīng)用都能同仁少量的分組丟失,因此可靠數(shù)據(jù)傳輸對(duì)于這些應(yīng)用并不是至關(guān)重要的,此外TCP的擁塞控制會(huì)導(dǎo)致此類應(yīng)用的實(shí)時(shí)應(yīng)用性能變的很差。因此多媒體開(kāi)發(fā)人員通常將這些應(yīng)用運(yùn)行在UDP而不是TCP之上。但是在今天的互聯(lián)網(wǎng)時(shí)代,大約75%的按需和實(shí)況流式多媒體采用了TCP。原因有兩點(diǎn):①當(dāng)分組丟包率低時(shí),并且為了安全原因,很多機(jī)構(gòu)會(huì)阻塞UDP流量(如利用防火墻等);②UDP缺乏擁塞控制機(jī)制,可能導(dǎo)致UDP發(fā)送方和接收方之間的高丟包率,并擠垮TCP會(huì)話。

R6. 當(dāng)應(yīng)用程序運(yùn)行在UDP上時(shí),該應(yīng)用程序是否能夠得到可靠數(shù)據(jù)傳輸?如果能,如何實(shí)現(xiàn)?

可以。UDP本身雖然不能可靠傳輸,但可以在應(yīng)用程序自身中建立可靠性機(jī)制,如增加確認(rèn)和重傳機(jī)制來(lái)實(shí)現(xiàn)。

R7. 假定主機(jī)C上的一個(gè)進(jìn)程有一個(gè)端口號(hào)6789的UDP套接字。假定主機(jī)A和主機(jī)B都用目的端口號(hào)6789向主機(jī)C發(fā)送一個(gè)UDP報(bào)文段。這兩臺(tái)主機(jī)的這些報(bào)文段在主機(jī)C都被描述為相同的套接字嗎?如果是這樣的話,在主機(jī)C的該進(jìn)程將怎樣知道源于兩臺(tái)不同主機(jī)的這兩個(gè)報(bào)文段?

不會(huì),因?yàn)樵炊丝谔?hào)不相同。在主機(jī)C的該進(jìn)程可以通過(guò)報(bào)文段中的源端口號(hào)來(lái)區(qū)分源于兩臺(tái)不同主機(jī)的這兩個(gè)報(bào)文段。(UDP的報(bào)文段中包含源端口號(hào)和目的端口號(hào)等信息)。

R8. 假定在主機(jī)C的端口80上運(yùn)行一個(gè)Web服務(wù)器。假定這個(gè)Web服務(wù)器使用持久連接,并且正在接受來(lái)自兩臺(tái)不同主機(jī)A和B的請(qǐng)求。被發(fā)送的所有請(qǐng)求都通過(guò)位于主機(jī)C的相同套接字嗎?如果他們通過(guò)不同的套接字傳遞,這兩個(gè)套接字都具有端口80嗎?討論并解釋。

被發(fā)送的所有請(qǐng)求并不是通過(guò)位于主機(jī)C的相同套接字,而是通過(guò)不同的套接字連接到主機(jī)C的。主機(jī)C通過(guò)解析TCP報(bào)文段首部中的源IP地址和源端口號(hào),根據(jù)兩者的不同來(lái)區(qū)分不同的報(bào)文段。

R9. 在我們的rdt協(xié)議中,為什么需要引入序號(hào)?

加入序號(hào),是為了接收方可以通過(guò)序號(hào)來(lái)確定新到達(dá)的報(bào)文段是新的還是重發(fā)的。

R10. 在我們的rdt協(xié)議中,為什么需要引入定時(shí)器?

加入計(jì)時(shí)器,是為了讓發(fā)送方確認(rèn)分組丟失:如果發(fā)送方在確定時(shí)間內(nèi)沒(méi)有收到請(qǐng)求,則認(rèn)為分組已經(jīng)丟失,則會(huì)重發(fā)分組。

R11. 假定發(fā)送方和接受方之間的往返時(shí)延是固定的并且為發(fā)送方所知,假設(shè)分組能夠丟失的話,在協(xié)議rdt3.0中,仍需要定時(shí)器嗎,試解釋之。

仍然需要,因?yàn)槿绻麤](méi)有定時(shí)器,即使發(fā)送發(fā)知道了往返時(shí)延,仍然無(wú)法知道一個(gè)分組從發(fā)送時(shí)刻起,過(guò)了多久的時(shí)間。往返時(shí)延的確定只是能夠更合理地設(shè)置這個(gè)倒計(jì)時(shí)計(jì)時(shí)器,而不能缺少這個(gè)計(jì)時(shí)器。(每個(gè)分組對(duì)應(yīng)一個(gè)到機(jī)器計(jì)時(shí)器,即每次發(fā)送一個(gè)分組,就啟動(dòng)一個(gè)倒計(jì)時(shí)計(jì)時(shí)器,包括第一次分組和重傳分組)。

R12. 在配套網(wǎng)站上使用回退N布Java小程序。
a.讓源發(fā)送5個(gè)分組,在這5個(gè)分組任何一個(gè)到達(dá)目的地之前暫停該動(dòng)畫,然后毀掉第一個(gè)分組并繼續(xù)該動(dòng)畫,描述發(fā)生的情況。
b.重復(fù)該實(shí)驗(yàn),只是現(xiàn)在讓第一個(gè)分組到達(dá)目的地并毀掉第一個(gè)確認(rèn)。再次描述發(fā)生的情況。
c.最后,嘗試發(fā)送6個(gè)分組。發(fā)生了什么情況?

TODO

R13. 重復(fù)12題,但是現(xiàn)在使用選擇重傳Java小程序。選擇重傳和回退N步有什么不同?

TODO

3.5.14 是否判斷題:
a. 主機(jī)A通過(guò)一條TCP連接向主機(jī)B發(fā)送一個(gè)大文件。假設(shè)主機(jī)B沒(méi)有數(shù)據(jù)發(fā)往主機(jī)A。因?yàn)橹鳈C(jī)B不能隨數(shù)據(jù)捎帶確認(rèn)信息,所以主機(jī)B將不向主機(jī)A發(fā)送確認(rèn)。
b. 在連接的整個(gè)過(guò)程中,TCP的RcvWindow的長(zhǎng)度不會(huì)變化。
c. 假設(shè)主機(jī)A通過(guò)一條TCP連接向主機(jī)B發(fā)送一個(gè)大文件。主機(jī)A發(fā)送的未被確認(rèn)的字節(jié)數(shù)不會(huì)超過(guò)接收緩存的大小。
d. 假設(shè)主機(jī)A通過(guò)一條TCP連接向主機(jī)B發(fā)送一個(gè)大文件。如果對(duì)于這次連接的一個(gè)報(bào)文段序列號(hào)為m,則對(duì)于后繼報(bào)文段的序列號(hào)必然為m+1。
e. TCP報(bào)文段在它的首部中有一個(gè)rwnd字段。
f. 假定在一條TCP連接中最后的SampleRTT等于1s,那么對(duì)于這一連接的TimeoutInterVal的當(dāng)前值必定≥1s。
g. 假定主機(jī)A通過(guò)一條TCP連接向主機(jī)B發(fā)送一個(gè)序號(hào)為38的4字節(jié)報(bào)文段。這個(gè)報(bào)文段的確認(rèn)號(hào)必定是42。

a:錯(cuò)誤。TCP連接中,如果主機(jī)B沒(méi)有數(shù)據(jù)要發(fā)往主機(jī),它就不能隨數(shù)據(jù)捎帶確認(rèn)信息,但是,TCP要求B必須發(fā)送確認(rèn),因此B將向A發(fā)送非捎帶的確認(rèn)信息。
b:錯(cuò)誤。rwnd的值是動(dòng)態(tài)的,它是表示連接的緩存中還有多少空間。
c:正確。
d:錯(cuò)誤。TCP的序列號(hào)是建立在傳送的字節(jié)流之上,而不是建立在傳送的報(bào)文段的序列之上。一個(gè)報(bào)文段的序號(hào)應(yīng)該是該報(bào)文段手字節(jié)的字節(jié)流編號(hào)。舉例來(lái)說(shuō),假如主機(jī)A上的一個(gè)進(jìn)程想通過(guò)一條TCP連接向主機(jī)B上的一個(gè)進(jìn)程發(fā)送一個(gè)數(shù)據(jù)流,則主機(jī)A的TCP會(huì)隱式地為該數(shù)據(jù)流的每個(gè)字節(jié)進(jìn)行編號(hào)。假定數(shù)據(jù)流由一個(gè)包含500 000 字節(jié)的文件組成,其MSS(最大報(bào)文段長(zhǎng)度,不包括協(xié)議首部,只包含應(yīng)用數(shù)據(jù))為1000字節(jié),數(shù)據(jù)流的首字節(jié)編號(hào)是0。該TCP將為該數(shù)據(jù)流構(gòu)建500個(gè)報(bào)文段。給第一個(gè)報(bào)文段分配序號(hào)0,第二個(gè)報(bào)文段分配序號(hào)1000,第三個(gè)報(bào)文段分配序號(hào)2000,以此類推。每一個(gè)序號(hào)被填入到相應(yīng)的TCP報(bào)文段首部的序號(hào)字段中。
e:正確。rwnd即接收窗口(receive window),用來(lái)告知發(fā)送方,自己在該TCP連接的緩存中還有多少可用空間。
f:錯(cuò)誤。超時(shí)時(shí)間是EstimatedRTT 和SampleRTT的函數(shù),不能由一個(gè)SampleRTT值決定。TimeoutInterval = EstimatedRTT + 4*DevRTT。
g:錯(cuò)誤。主機(jī)A向主機(jī)B發(fā)送報(bào)文(序號(hào)為38,字節(jié)數(shù)為4),假如B成功收到該報(bào)文段,并向A發(fā)送確認(rèn)報(bào)文段,這個(gè)確認(rèn)報(bào)文段中的確認(rèn)號(hào)才是42(告訴A,我現(xiàn)在收到這個(gè)你發(fā)的報(bào)文段了,你可以發(fā)從42開(kāi)始發(fā)送了),而不是最初從A發(fā)向B的那個(gè)報(bào)文段的確認(rèn)號(hào)是42。即主機(jī)A填充進(jìn)報(bào)文段的確認(rèn)號(hào)是主機(jī)A期望從主機(jī)B收到的下一字節(jié)的序號(hào)。

R15. 假定主機(jī)A通過(guò)一條TCP連接向主機(jī)B連續(xù)發(fā)送兩個(gè)TCP報(bào)文段。第一個(gè)報(bào)文段的序號(hào)為90,第二個(gè)報(bào)文段的序號(hào)為110。
a.第一個(gè)報(bào)文段中有多少數(shù)據(jù)?
b.假設(shè)第一個(gè)報(bào)文段丟失而第二個(gè)報(bào)文段到達(dá)主機(jī)B,那么在主機(jī)B發(fā)往主機(jī)A的確認(rèn)報(bào)文中,確認(rèn)號(hào)應(yīng)該是多少?

a:第一個(gè)報(bào)文段中的數(shù)據(jù):20字節(jié)(指應(yīng)用數(shù)據(jù),不包含報(bào)文段首部)。
b:確認(rèn)號(hào)是90。因?yàn)門CP提供的是累計(jì)確認(rèn)(只確認(rèn)該流中至第一個(gè)丟失字節(jié)為止的字符)。

R16. 考慮3.5節(jié)中討論的Telnet的例子。在鍵入字符C數(shù)秒之后,用戶又鍵入字符R。那么在用戶鍵入字符R之后,總共發(fā)送了多少個(gè)報(bào)文段?這個(gè)報(bào)文段中的序號(hào)和確認(rèn)號(hào)字段應(yīng)該填入什么?

總共發(fā)送了3 個(gè)報(bào)文段:
第一個(gè)報(bào)文段由客戶發(fā)往服務(wù)器,序號(hào)為43,確認(rèn)號(hào)為80,數(shù)據(jù)為字符‘R’(占一個(gè)字節(jié));
第二個(gè)報(bào)文段是由服務(wù)器發(fā)往客戶,序號(hào)為80,確認(rèn)號(hào)為44,數(shù)據(jù)為字符‘R’(占一個(gè)字節(jié));
第三個(gè)報(bào)文是從客戶發(fā)送服務(wù)器序號(hào)為44,確認(rèn)號(hào)為81,數(shù)據(jù)為空。
(與鍵入字符C的過(guò)程一致,參考書上的流程即可)。

R17. 假設(shè)兩個(gè)TCP連接存在于一個(gè)帶寬為R bps的瓶頸鏈路上。它們都要發(fā)送一個(gè)很大的文件(以相同方向經(jīng)過(guò)瓶頸鏈路),并且兩者是同時(shí)開(kāi)始發(fā)送文件。那么TCP將為每個(gè)連接分配多大的傳輸速率?

TCP將為每個(gè)連接分配R/2的傳輸速率:因?yàn)門CP趨于在競(jìng)爭(zhēng)的多條TCP連接之間提供一段瓶頸鏈路帶寬的平等分享。

R18 .是非判斷題。考慮TCP的擁塞控制,發(fā)送方定時(shí)器超時(shí)時(shí),其閥值將被設(shè)置為原來(lái)值的一半。

錯(cuò)誤。它將被設(shè)置為擁塞窗口cwnd的一半。

R19.在3.7節(jié)的“TCP分岔”討論中,對(duì)于TCP分岔的響應(yīng)時(shí)間,斷言大約是4*RTTFE + RTTBE + 處理時(shí)間。評(píng)價(jià)該斷言。

RTTFE表示客戶與前端服務(wù)器之間的往返時(shí)間,4倍是表示用于建立TCP連接的RTTFE加上用于3個(gè)數(shù)據(jù)窗口的3個(gè)RTTFE(如果客戶距離前端服務(wù)器足夠近,RTTFE就會(huì)小得微不足道)。RTTBE表示的是前端服務(wù)器與數(shù)據(jù)中心(后端服務(wù)器)之間的往返時(shí)間,前端服務(wù)器以非常大的窗口向數(shù)據(jù)中心維護(hù)一條TCP連接,RTTBE約為RTT。


習(xí)題

TODO

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容