如有錯誤, 歡迎指出~
- 第一章 計算機網路和因特網 課後複習題
- 第二章 應用層 課後複習題
- 第三章 運輸層 課後複習題
- 第四章 網路層:資料平面 課後複習題
- 第五章 網路層:控制平面 課後複習題
- 第六章 鏈路層和區域網 課後複習題
第二章: 應用層
2.1節
R1. 列出5種非專用的因特網應用及它們所使用的應用層協議.
應用 | 應用層協議 |
---|---|
Web衝浪 | HTTP協議 |
電子郵件 | SMTP協議 |
因特網電話 | SIP協議 |
流式多媒體 | HTTP協議 |
檔案傳輸 | FTP協議 |
R2. 網路體系結構與應用程式體系結構之間有什麼區別?
- 網路體系結構指的是因特網種的五層網路協議.
- 應用程式體系結構通常是由開發者自己定義的.
- 它們的區別在於, 從應用程式研發者的角度看, 網路體系結構是固定的, 併為應用程式提供了特定的服務集合. 另一方面, 應用程式體系結構由應用程式研發者設計, 規定了如何在各種端系統上組織該應用程式.
- 應用程式體系架構可以通過應用網路體系架構中的內容從而使應用程式擁有網路傳輸功能.
R3. 對兩程式之間的通訊會話而言, 哪個程式是客戶, 哪個程式是伺服器?
- 書本定義: 在一對程式之間的通訊會話場景中, 發起通訊(即在該會話開始時發起與其他程式的聯絡)的程式被標識為客戶, 在會話開始時等待聯絡的程式是伺服器.
R4. 對一個P2P檔案共享應用, 你同意"一個通訊會話不存在客戶端和伺服器端的概念"的說法嗎? 為什麼?
- 我不同意. P2P檔案共享應用雖然能夠相互傳輸檔案, 看起來每個使用者即可以當客戶, 也可以當伺服器. 但是具體落實到一次通訊會話中, 當對等方A請求對等方B傳送一個特定的檔案時, 在這個特定的通訊會話中對等方A是客戶, 而對等方B是伺服器.
R5. 執行在一臺主機上的一個程式, 使用什麼資訊來標識執行在另一臺主機上的程式?
- 通過IP地址標識另一臺主機, 通過另一臺主機上的目的地埠號來標識另一臺主機上的程式.
R6. 假定你想盡快地處理從遠端客戶到伺服器的事務, 你將使用UDP還是TCP? 為什麼?
- 我會使用UDP, 因為TCP是面向連線的, 在傳輸之前需要進行三次握手. 而UDP是無連線的, 可以直接選定合適速率向外傳送.
R7. 參見圖2-4, 我們看到在該圖中所列出的應用程式沒有一個同時既要求無資料丟失又要求定時的. 你能設想一個既要求無資料丟失又高度時間敏感的應用程式嗎?
- 發射火箭的程式.
R8. 列出一個運輸協議能夠提供的4種寬泛型別的服務. 對於每種服務型別, 指出是UDP還是TCP(或這兩種協議)提供這樣的服務?
服務 | UDP Or TCP |
---|---|
可靠資料傳輸 | TCP |
吞吐量 | TCP |
定時 | TCP |
安全性 | SSL |
R9. 前面講過TCP能用SSL來強化, 以提供程式到程式的安全性服務, 包括加密. SSL執行在運輸層還是應用層? 如果某應用程式研製者想要用SSL來強化UDP, 該研製者應當做些什麼工作?
- SSL執行在應用層.
- SSL在TCP的握手階段完成了雙方的身份確認, 生成金鑰等操作. 如果研製者要用SSL來強化UDP, 因為UDP是面向無連線的, 所以SSL首先要解決在UDP傳輸中的身份確認問題.
2.2 ~ 2.4節
R10. 握手協議的作用是什麼?
- 使客戶端和伺服器端建立起連線, 能夠開始傳遞資訊.
R11. 為什麼HTTP, SMTP及POP3都執行在TCP上, 而不是在UDP上?
- 首先要知道TCP幾個重要的特性: 面向連線, 保證資料完整性, 保證資料有序到達, 有擁塞控制功能. 而上述功能UDP都沒有.
- 再來看HTTP, 使用者通過瀏覽器以HTTP協議向伺服器發起請求, 如果這個請求資料不完整, 伺服器將無法給出正確響應, 使用者也得不到想要的結果.
- SMTP和POP3兩個郵件協議也需要保證資料的完整性, 並且要保證按照一定的順序交付, 所以選擇TCP.
R12. 考慮一個電子商務網站需要保留每一個客戶的購買記錄. 描述如何使用cookie來完成該功能?
- 使用者首次訪問電子商務網站時, 需要提供一個使用者的唯一標識, 電商網站根據使用者標識查得使用者資訊, 並將特定的使用者資訊作為cookie響應給使用者. 然後使用者在電商網站發起的每個操作都帶上該cookie, 電商網站便能保留每個客戶的購買記錄了.
R13. 描述Web快取器是如何減少接收被請求物件的延時的. Web快取器將減少一個使用者請求的所有物件或只是其中的某些物件的時延嗎? 為什麼?
- Web快取器設定在使用者和初始伺服器之間, 當使用者要向初始伺服器發起請求時, 瀏覽器會先將請求定位到Web快取器上, 如果快取器上有請求物件的副本則直接將該副本響應給客戶. 如果快取器中沒有, 則從Web快取器向初始伺服器發起對該物件的請求, Web快取器收到來自初始伺服器的響應物件後, 自己會保留一份該物件的副本, 然後再響應給使用者.
- 因此, Web快取器只能減少快取過的物件的時延.
R14. Telnet到一臺Web伺服器併傳送一個多行的請求報文. 在該請求報文中包含If-modified-since: 首部行, 迫使響應報文中出現"304 Not Modified"狀態程式碼.
- 不太懂題目意思, 不過可以解釋一下題目中出現的名詞:
- 使用Web快取器帶來的最直觀問題是, 如果伺服器上的物件在被快取到快取器後修改了, 該怎麼辦?
- 這涉及到HTTP協議的一種機制: 條件GET(conditional GET).
- 客戶向Web伺服器發起請求, 請求首先會被快取器攔截, 這時如果快取中使用者請求的內容, 未了保證請求的內容在伺服器上也是最新的, 快取器會向伺服器傳送一個GET請求, GET請求中包含首部行If-modified-since, 該首部行的內容是該物件在快取器中的最新副本.
- 如果伺服器中被請求物件和快取器中的最新副本一樣, 就沒必要再傳送一次了, 這時就會響應一個"304 Not Modified"狀態碼, 不帶任何多餘資料. 如果伺服器中的物件更新過, 和快取器中的副本不一樣了, 伺服器會將最新的副本傳送給快取器.
R15. 列出幾種流行的即時通訊應用.它們使用相同的協議作為SMS嗎?
- 電子郵件, FaceBook, 微信等.
- 以上三個的應用層協議各不相同.
R16. 假定Alice使用一個基於Web的電子郵件賬戶(例如Hotmail或Gmail)向Bob發報文, 而Bob使用POP3從他的郵件伺服器訪問自己的郵件. 討論該報文是如何從Alice主機到Bob主機的. 要列出在兩臺主機間移動該報文時所使用的各種應用層協議.
- Alice使用Web電子郵件賬戶向Bob傳送報文時, Alice的瀏覽器也就是Alice的使用者代理通過HTTP連線到Alice的郵件伺服器, 並把報文傳送到該郵件伺服器上
- 然後Alice的郵件伺服器通過SMTP連線到Bob的郵件伺服器(基於TCP), 並把郵件報文傳送到Bob的郵件伺服器中.
- Bob使用它的使用者代理(主機), 通過POP3協議訪問自己的郵件伺服器, 並以下載儲存或下載刪除的方式獲得Alice發來的郵件報文.
#### R17. 將你最近收到的報文首部列印出來. 其中有多少Received: 首部行? 分析該報文的首部行中的每一行.
R18. 從使用者的觀點看, POP3協議中下載並刪除模式和下載並儲存模式有什麼區別嗎?
- 從使用者的角度看是沒有的, 因為無論採取哪種模式, 使用者都得到了郵件報文. 但是對於郵件伺服器就不同了, 如果是下載刪除, POP3會話結束後就會把標記的郵件報文刪除, 再次連線上郵件伺服器這些郵件報文就不存在了.
R19. 一個機構的Web伺服器和郵件伺服器可以有完全相同的主機名別名嗎? 包含郵件伺服器主機名的RR有什麼樣的型別?
- 可以, 因為在DNS資料庫中, 記錄一條RR(Resource Record)需要提供4個欄位: Name, Value, Type, TTL.
- 其中Type欄位記錄本條記錄的型別. 這就讓機構的Web伺服器和郵件伺服器用相同主機別名成為可能. 假如我們要訪問該機構的郵件伺服器, 除了要給出主機別名, 在DNS報文中還會指定RR的型別為MX(郵件伺服器的規範主機名).
R20. 仔細檢查收到的電子郵件, 查詢由使用.edu電子郵件地址的使用者傳送的報文首部. 從其首部, 能夠確定傳送該報文的主機的IP地址嗎? 對於由Gmail賬號傳送的報文做相同的事.
- 答案來源自網路
- .edu的可以
- Gmail不行
2.5節
R21. 在BitTorrent中, 假定Alice向Bob提供一個30秒間隔的檔案塊吞吐量. Bob將必須進行回報, 在相同的間隔中向Alice提供檔案塊嗎? 為什麼?
- 不, Bob並不必須進行回報. 因為Alice會選取一定數量的"鄰居", 並從它們那裡獲得塊. 而這個選擇不是基於Alice向誰傳送了塊就要向誰索要塊, 而是在Alice的對等方列表中向對等方發起請求, 選取響應速度快的前4位上載者來獲取塊. Alice獲取塊的伴侶也是不停更新的.
R22. 考慮一個新對等方Alice加入BitTorrent而不擁有任何檔案塊. 沒有任何檔案快, 因此她沒有任何東西可上載, 她無法成為任何其他對等方的前4位上載者. 那麼Alice是怎樣得到她的第一個檔案塊呢?
- Alice雖然不能成為上載者, 但是她能成為接收者呀, 接收到塊後自然就有可能成為上載者了.
- Alice在空手加入洪流時, 追蹤器會隨機地從參與對等方集合中選擇一個對等方子集, 並將子集中對等方的IP地址傳送給Alice. Alice持有這張列表並嘗試與列表中所有的對等方建立並行的TCP連線, 並選擇前4位上載者, 向它們請求塊(最稀缺優先原則).
R23. 覆蓋網路是什麼? 它包括路由器嗎? 在覆蓋網路中邊是什麼?
- 答案來源網路.
- 覆蓋網路是一種面向應用層的網路, 包括對等方和對等方之間由虛擬聯絡構成的抽象邏輯網.
- 覆蓋網路不包括路由器.
- 覆蓋網路中的邊就是對等方之間的邏輯鏈路.
2.6節
R24. CDN通常採用兩種不同的伺服器放置方法之一. 列舉並簡單描述它們.
- 深入: 通過在遍及全球的接入ISP中部署伺服器叢集來深入到ISP的接入網中. 好處是靠近端使用者, 減少端使用者和CDN叢集之間鏈路和路由器數量, 改善了使用者感受到的時延和吞吐量. 缺點是由於高度分散式設計, 維護和管理叢集成本高.
- 邀請做客: 通過在少量關鍵位置建造大叢集來邀請到ISP做客. 這些CDN叢集通常放在因特網交換結點(IXP). 好處是產生較低的維護和管理開銷. 缺點是以對端使用者的較高時延和較低吞吐量為代價.
R25. 除了如時延, 丟包和頻寬效能等網路相關的考慮外, 設計一種CDN伺服器選擇策略時還有其他重要因素. 它們是什麼?
- 還要考慮它分發的內容.
2.7節
R26. 2.7節中所描述的UDP伺服器僅需要一個套接字, 而TCP伺服器需要兩個套接字. 為什麼? 如果TCP伺服器支援n個並行連線, 每條連線來自不同的客戶主機, 那麼TCP伺服器需要多少個套接字.
- 因為UDP是面向無連線的, 它只需要有一個套接字用於接收和傳送, 並且可以接收來自不同地址主機的UDP包. 而TCP是面向連線的, 除了接收訪問的套接字, 每和一個客戶連線就要建立一個專用的套接字.
- n+1個.
R27. 對於2.7節所描述的執行在TCP之上的客戶-伺服器應用程式, 伺服器程式為什麼必須先於客戶程式執行? 對於執行在UDP之上的客戶-伺服器應用程式, 客戶程式為什麼可以先於伺服器程式執行.
- 建立TCP連線需要經過一個3次握手的過程, 如果伺服器沒有啟動根本無法握手, 從而無法建立連線.
- UDP是面向無連線的, 就算伺服器沒有啟動, 客戶程式照樣可以把UDP發出去, 但伺服器可能就收不到了.