第二章核心概念解讀:分層、復(fù)用與PDU流動(dòng)全解析)
簡(jiǎn)介《通信網(wǎng)基本概念與主體結(jié)構(gòu)第二版》第二章課后習(xí)題答案面向通信工程、網(wǎng)絡(luò)工程專(zhuān)業(yè)學(xué)生及考研復(fù)習(xí)者用于檢驗(yàn)對(duì)分層設(shè)計(jì)、互聯(lián)網(wǎng)互連及TCP/IP協(xié)議棧的理解。壓縮包內(nèi)含1個(gè)PDF文檔約977KB英文原版習(xí)題解答按題號(hào)編排便于對(duì)照查閱。目前已有116人瀏覽學(xué)習(xí)。答案圍繞層次化與互聯(lián)網(wǎng)工作原理、TCP/UDP通用通信服務(wù)、IP地址可擴(kuò)展性及底層網(wǎng)絡(luò)技術(shù)獨(dú)立性等關(guān)鍵問(wèn)題給出具體推導(dǎo)與結(jié)論并覆蓋數(shù)據(jù)鏈路層連接方式對(duì)網(wǎng)絡(luò)層影響的辨析適合課后自測(cè)、期末復(fù)習(xí)及探究式學(xué)習(xí)使用。1. 一份通信網(wǎng)第二章答案為什么值得當(dāng)工程資料看通信網(wǎng)這門(mén)課有一個(gè)被低估的現(xiàn)象第二章課后答案的流傳度比教材正文還高——幾乎每個(gè)把《通信網(wǎng)基本概念與主體結(jié)構(gòu)第二版》當(dāng)成核心教材的學(xué)校都會(huì)在第二章卡一道坎。分層、互聯(lián)網(wǎng)、面向連接、復(fù)用這些詞單獨(dú)看都認(rèn)識(shí)一旦組合起來(lái)回答「為什么 WWW 可以快速生長(zhǎng)」邏輯鏈一斷就變成死記硬背。這份 PDF 正是沖著這個(gè)痛點(diǎn)來(lái)的它收錄了 Leon-Garcia/Widjaja 第二版第二章的完整解題過(guò)程從第 1 題到第 15 題逐題給出推導(dǎo)思路和協(xié)議關(guān)系圖也明確標(biāo)出“問(wèn)題 62 的答案待補(bǔ)充”這類(lèi)缺口。期末復(fù)習(xí)、面試補(bǔ)基礎(chǔ)、或者想把講解邏輯練順的從業(yè)者都適合拿它當(dāng)對(duì)照資料。一句話定性它不是官方教材而是把教材里那些黑匣子拆開(kāi)給你看的配套答案。2. 分層與互聯(lián)網(wǎng)第二章答案里的兩大底層邏輯2.1 分層如何讓?xiě)?yīng)用“不用管網(wǎng)”第一題是典型的概念題但答案給的是機(jī)制而不是背景。題目問(wèn)“分層和互聯(lián)網(wǎng)如何讓 WWW 這類(lèi)應(yīng)用快速生長(zhǎng)”答案把功勞拆成兩項(xiàng)互聯(lián)網(wǎng)讓許多底層網(wǎng)絡(luò)技術(shù)不同的子網(wǎng)協(xié)作成一個(gè)大網(wǎng)絡(luò)分層把底層網(wǎng)絡(luò)細(xì)節(jié)對(duì)上層隱藏讓新應(yīng)用可以獨(dú)立、快速地引入。很多復(fù)習(xí)的人把“分層抽象”這層理解背完就結(jié)束了其實(shí)答案的關(guān)鍵是“獨(dú)立”兩個(gè)字。應(yīng)用層只要拿到了下層提供的穩(wěn)定服務(wù)接口就完全不需要關(guān)心數(shù)據(jù)在底下怎么封裝、怎么換路它可以按自己的節(jié)奏迭代這是 WWW 能快速生長(zhǎng)的真正原因。沿著“服務(wù)接口”這條線往下看會(huì)發(fā)現(xiàn)答案反復(fù)把“通信服務(wù)”放在“協(xié)議”前面。第 2 題(a)對(duì) TCP/IP 的描述也是這樣TCP 提供可靠、面向連接的字節(jié)流傳輸U(kuò)DP 提供無(wú)連接、盡力而為的消息傳輸。兩種服務(wù)都對(duì)應(yīng)用承諾了明確的行為應(yīng)用只跟服務(wù)打交道不跟協(xié)議內(nèi)部細(xì)節(jié)打交道。這種視角在讀后面幾章時(shí)非常有用因?yàn)閹缀跛袑佣荚谧鐾患孪蛏蠈犹峁┓?wù)屏蔽下層差異?!胺?wù)”是目標(biāo)“協(xié)議”是實(shí)現(xiàn)這個(gè)主次關(guān)系別搞反了。對(duì)復(fù)習(xí)來(lái)說(shuō)可以把第 1 題壓縮成三句話經(jīng)常在腦子里過(guò)互聯(lián)網(wǎng)解決“能不能連”把異構(gòu)網(wǎng)絡(luò)粘成一張大網(wǎng)分層解決“要不要重寫(xiě)”把底層技術(shù)隔離在上層之外兩者合在一起應(yīng)用才能快速獨(dú)立生長(zhǎng)。三句話也是第二章后續(xù)內(nèi)容的主線后面的連接模型、復(fù)用與 PDU 流動(dòng)都可以掛在這三條主線上理解。我在實(shí)際帶實(shí)習(xí)生時(shí)習(xí)慣讓他們把這個(gè)答案自己畫(huà)成一條豎線最上面是應(yīng)用最下面是網(wǎng)線中間每層只留一個(gè)“服務(wù)訪問(wèn)點(diǎn)”的框。畫(huà)完再問(wèn)一句“HTTP 知不知道底下是以太網(wǎng)還是 5G”答不上來(lái)的基本就是分層還沒(méi)有形成肌肉記憶。這個(gè)畫(huà)圖動(dòng)作比抄十遍定義有效得多因?yàn)榭荚嚭兔嬖嚩贾徽J(rèn)邏輯鏈。2.2 互聯(lián)網(wǎng)如何把異構(gòu)網(wǎng)絡(luò)拼成一張大網(wǎng)第 2 題(b)的答案里有一句話值得反復(fù)讀“圖中所有高層協(xié)議都通過(guò) IP 訪問(wèn)網(wǎng)絡(luò)接口”。這句話的意思是TCP、UDP、RTP、DNS、SMTP、HTTP 這些協(xié)議最終都收在 IP 這一層由 IP 統(tǒng)一把數(shù)據(jù)交給各種各樣的網(wǎng)絡(luò)接口。只要為一個(gè)網(wǎng)絡(luò)技術(shù)定義好 IP 網(wǎng)絡(luò)接口這門(mén)技術(shù)就能接入互聯(lián)網(wǎng)。以太網(wǎng)有以太網(wǎng)的接口PPP 有 PPP 的接口Wi-Fi 有 Wi-Fi 的接口新出現(xiàn)的網(wǎng)絡(luò)技術(shù)照此辦理也就能快速融入現(xiàn)有互聯(lián)網(wǎng)。這回答了一個(gè)經(jīng)常被問(wèn)的問(wèn)題兩個(gè)底層機(jī)制完全不同的網(wǎng)絡(luò)IP 包怎么穿過(guò)去答案是網(wǎng)絡(luò)接口。主機(jī) A 把 IP 包交給自己的網(wǎng)絡(luò)接口接口按所在網(wǎng)絡(luò)的幀格式封裝到了路由器網(wǎng)絡(luò)接口把幀拆掉取出 IP 包再按下一跳網(wǎng)絡(luò)的幀格式重新封裝。整個(gè)過(guò)程 IP 包不變變的只是外層幀。第 12 題的答案把這條鏈路畫(huà)得很清楚主機(jī) 1 產(chǎn)生 IP 包網(wǎng)絡(luò) A 的幀封裝它傳到路由器路由器解出 IP 包再封裝進(jìn)以太網(wǎng)幀交給主機(jī) 2。工程里我對(duì)這件事的體感是IP 像一個(gè)公共插頭每種網(wǎng)絡(luò)技術(shù)提供一個(gè)適配插口上層協(xié)議只需要做“插頭插進(jìn)插口”這一件事。新網(wǎng)絡(luò)技術(shù)接入互聯(lián)網(wǎng)的成本主要是實(shí)現(xiàn)一套符合 IP 規(guī)范的網(wǎng)絡(luò)接口而不是重寫(xiě)上層協(xié)議。這就是答案里說(shuō)的規(guī)模經(jīng)濟(jì)的第一層含義接口標(biāo)準(zhǔn)化帶來(lái)的邊際成本下降。復(fù)習(xí)這一節(jié)時(shí)打開(kāi) Wireshark 抓一個(gè)訪問(wèn)網(wǎng)頁(yè)的包會(huì)看到最外層是以太網(wǎng)幀頭里面是 IP 頭再里面是 TCP 頭最里層才是 HTTP 數(shù)據(jù)。對(duì)照第 12 題的答案每一步的封裝關(guān)系都能落到真實(shí)報(bào)文上。不過(guò)抓包只需要看頭部字段不需要背每個(gè)字節(jié)的含義那屬于另一個(gè)階段的功課。2.3 規(guī)模經(jīng)濟(jì)答案里一句帶過(guò)的“可擴(kuò)展性”規(guī)模經(jīng)濟(jì)這個(gè)詞在第 2 題(c)里只寫(xiě)了三行一旦為網(wǎng)絡(luò)技術(shù)定義了 IP 接口使用該技術(shù)的主機(jī)就能連入互聯(lián)網(wǎng)新網(wǎng)絡(luò)技術(shù)的投資延伸了互聯(lián)網(wǎng)的觸角因此互聯(lián)網(wǎng)可以快速增長(zhǎng)。三行字看著輕信息量其實(shí)不小。它揭示的規(guī)模效應(yīng)有兩個(gè)層面。第一個(gè)層面是地址結(jié)構(gòu)的可擴(kuò)展性IP 地址是全局唯一的邏輯地址結(jié)構(gòu)是分層的主機(jī)接入互聯(lián)網(wǎng)時(shí)不需要重新規(guī)劃整套地址體系分配、聚合、路由查找都更方便。第二個(gè)層面是技術(shù)生態(tài)的擴(kuò)展性每加入一種新網(wǎng)絡(luò)技術(shù)互聯(lián)網(wǎng)的接入手段就多一種反過(guò)來(lái)吸收更多用戶用戶多了又帶動(dòng)更多技術(shù)投入形成正向循環(huán)。這里有一個(gè)常見(jiàn)的理解偏差就是把“規(guī)模經(jīng)濟(jì)”當(dāng)成“用戶多了所以便宜”。答案里說(shuō)的不是這個(gè)而是“投資一種新網(wǎng)絡(luò)技術(shù)會(huì)擴(kuò)展互聯(lián)網(wǎng)的觸角反過(guò)來(lái)讓投入獲得更大回報(bào)”。這就解釋了不少現(xiàn)實(shí)決策為什么運(yùn)營(yíng)商愿意投入建設(shè)新接入技術(shù)為什么云廠商愿意在網(wǎng)絡(luò)邊緣部署新網(wǎng)關(guān)因?yàn)榻尤朦c(diǎn)越多整個(gè)共享網(wǎng)絡(luò)的價(jià)值越大。這個(gè)邏輯放到今天看依然適用于 5G 接入網(wǎng)、邊緣計(jì)算這類(lèi)話題。復(fù)習(xí)時(shí)可以把這句話背下來(lái)“IP 的層次化地址結(jié)構(gòu) 每類(lèi)網(wǎng)絡(luò)只需定義一次接口 互聯(lián)網(wǎng)的可擴(kuò)展性”。考試如果被問(wèn)到層次化結(jié)構(gòu)的優(yōu)勢(shì)可以按這個(gè)順序回答全局唯一尋址、分層可擴(kuò)展、底層技術(shù)無(wú)關(guān)。如果你正在準(zhǔn)備面試再補(bǔ)一個(gè)自己的工程觀察會(huì)更好比如你見(jiàn)過(guò)某個(gè)網(wǎng)絡(luò)設(shè)備上線時(shí)只是換了個(gè)網(wǎng)絡(luò)接口上層路由配置基本沒(méi)動(dòng)這會(huì)讓回答更有說(shuō)服力。3. 面向連接還是無(wú)連接這套答案給出的判斷框架3.1 鏈路層連接方式如何影響網(wǎng)絡(luò)層行為第 3 題問(wèn)的是數(shù)據(jù)鏈路層如果是面向連接的網(wǎng)絡(luò)層要怎么調(diào)整答案的核心是“假設(shè)”兩個(gè)字。如果數(shù)據(jù)鏈路層面向連接并且保證幀正確、按序到達(dá)網(wǎng)絡(luò)層就可以把鄰節(jié)點(diǎn)之間的通道看成一個(gè)錯(cuò)誤無(wú)關(guān)的管道幾乎所有關(guān)于丟包、亂序的防御都可以簡(jiǎn)化。如果數(shù)據(jù)鏈路層無(wú)連接每幀獨(dú)立傳輸、大部分沒(méi)有確認(rèn)和重傳網(wǎng)絡(luò)層就必須假設(shè)與鄰節(jié)點(diǎn)交換的包可能丟、可能亂序不能把鏈路層當(dāng)可靠管道。這個(gè)差別在實(shí)際協(xié)議棧里的體現(xiàn)非常明顯。以太網(wǎng)是無(wú)連接的鏈路層IP 在以太網(wǎng)上轉(zhuǎn)發(fā)時(shí)必須自行面對(duì)丟包、重復(fù)、亂序的可能而 PPP 在特定配置下提供面向連接的鏈路IP 跑在它上面時(shí)鏈路的可靠性和順序就有一定保證。但是網(wǎng)絡(luò)層的設(shè)計(jì)并不依賴(lài)底層一定可靠它的轉(zhuǎn)發(fā)是逐跳的即使底層不提供排序IP 也可以通過(guò)上層 TCP 的序號(hào)機(jī)制兜底。換句話說(shuō)連接方式的差異影響的是“網(wǎng)絡(luò)層能做什么假設(shè)”而不是“網(wǎng)絡(luò)層必須怎么做”——這個(gè)邊界特別容易混淆。復(fù)習(xí)時(shí)建議用一張小表來(lái)整理數(shù)據(jù)鏈路層行為網(wǎng)絡(luò)層得到的條件對(duì)應(yīng)實(shí)操印象面向連接、保證有序正確可靠管道可簡(jiǎn)化差錯(cuò)處理租用線路、部分 PPP 配置無(wú)連接、無(wú)確認(rèn)無(wú)重傳可能丟包、亂序需自行防御以太網(wǎng)、Wi-Fi這張表幫助我按“鏈路層→網(wǎng)絡(luò)層→傳輸層”的話術(shù)鏈路回答先判斷底層能否保證有序再說(shuō)明網(wǎng)絡(luò)層的假設(shè)最后指出誰(shuí)負(fù)責(zé)最終的數(shù)據(jù)完整性。套用一句我常說(shuō)的話“每一跳都可能是錯(cuò)的端到端才負(fù)責(zé)對(duì)?!痹谕ㄐ啪W(wǎng)里這句話幾乎百試不爽。3.2 TCP 與 UDP兩種通信服務(wù)怎么選第 2 題(a)把 TCP/IP 的兩種服務(wù)講得很清楚TCP 是可靠、面向連接的字節(jié)流傳輸U(kuò)DP 是盡力而為、無(wú)連接的獨(dú)立消息傳輸。注意它用的是“服務(wù)”而不是“協(xié)議”。服務(wù)描述的是對(duì)上層的能力承諾協(xié)議是這些承諾的具體實(shí)現(xiàn)。很多同學(xué)在答“TCP/IP 提供了哪些通信服務(wù)”時(shí)只寫(xiě)“TCP 可靠UDP 不可靠”少了“字節(jié)流”和“消息”這兩個(gè)維度得分點(diǎn)就漏了。TCP 面向字節(jié)流不負(fù)責(zé)按應(yīng)用消息的邊界切數(shù)據(jù)應(yīng)用層協(xié)議自己定義消息邊界UDP 面向獨(dú)立消息發(fā)送方一次 write 對(duì)應(yīng)接收方一次 read邊界保留但傳輸沒(méi)有保證。怎么選我的習(xí)慣是看三個(gè)維度是否需要可靠、是否需要順序、是否有實(shí)時(shí)性約束。需要可靠和順序選 TCP可以容忍少量丟包但要求低時(shí)延或者需要保持消息邊界選 UDP。常見(jiàn)做法是 RTP 這類(lèi)實(shí)時(shí)音視頻承載在 UDP 上由應(yīng)用層自己做序號(hào)和丟包隱藏而 HTTP、SMTP、文件傳輸這類(lèi)要求數(shù)據(jù)完整的服務(wù)直接使用 TCP。這個(gè)選擇框架其實(shí)在第 2 題(a)的答案里已經(jīng)給出兩類(lèi)服務(wù)對(duì)應(yīng)了上層應(yīng)用對(duì)網(wǎng)絡(luò)行為的全部期望。有時(shí)會(huì)碰到“我的服務(wù)需要可靠傳輸?shù)?QoS 要求又高選哪個(gè)”的問(wèn)題。實(shí)際工程里通常不是單選題TCP 提供可靠但重傳會(huì)造成時(shí)延抖動(dòng)UDP 時(shí)延低但可靠性要靠應(yīng)用補(bǔ)。于是就有了 QUIC 這類(lèi)在 UDP 之上自己實(shí)現(xiàn)可靠傳輸?shù)恼壑蟹桨?。面試回答時(shí)可以點(diǎn)一句“協(xié)議棧的靈活之處在于可以在傳輸層之上再做一層可靠性”這層理解從答案里能自然延伸出來(lái)不算超綱。3.3 傳輸層為什么必須在端系統(tǒng)做第 5 題的答案每次都讓不少人意外傳輸層的一部分功能比如差錯(cuò)控制可以放進(jìn)網(wǎng)絡(luò)但它不能完全放進(jìn)去因?yàn)樗暮诵娜蝿?wù)之一是“讓端系統(tǒng)里的多個(gè)進(jìn)程共享網(wǎng)絡(luò)服務(wù)”這一點(diǎn)不可能在網(wǎng)絡(luò)內(nèi)部完成。原因是網(wǎng)絡(luò)內(nèi)部的轉(zhuǎn)發(fā)節(jié)點(diǎn)看到的是包不維護(hù)“進(jìn)程”的狀態(tài)更沒(méi)有每個(gè)應(yīng)用流的收件人信息。端口號(hào)、連接 ID 只在端系統(tǒng)有意義如果把傳輸層完全搬到網(wǎng)絡(luò)內(nèi)部網(wǎng)絡(luò)就需要記錄每條應(yīng)用連接的狀態(tài)成本極高且違背無(wú)狀態(tài)轉(zhuǎn)發(fā)的設(shè)計(jì)哲學(xué)。工程上其實(shí)能看到“傳輸層的一部分功能被搬進(jìn)網(wǎng)絡(luò)”的影子運(yùn)營(yíng)商網(wǎng)絡(luò)邊緣的設(shè)備可以做數(shù)據(jù)包深度檢測(cè)、可以做 TCP 代理、可以在擁塞時(shí)做主動(dòng)丟包或 ECN 標(biāo)記這些都是對(duì) TCP 功能的輔助而不是取代端到端的傳輸層。真正的端到端可靠傳輸仍由兩端完成因?yàn)樵诰W(wǎng)絡(luò)中維護(hù)每連接狀態(tài)既不經(jīng)濟(jì)也不可行離終端越近業(yè)務(wù)越透明。答案第 5 題里那句“可以通過(guò)在網(wǎng)絡(luò)邊緣合并這些功能”說(shuō)的就是這個(gè)意思——功能可以靠近用戶部署但歸屬仍然在端系統(tǒng)。這里給一個(gè)復(fù)習(xí)角度把“傳輸層不在網(wǎng)絡(luò)內(nèi)部”作為端到端原則的實(shí)例。網(wǎng)絡(luò)內(nèi)部的節(jié)點(diǎn)保持簡(jiǎn)單、轉(zhuǎn)發(fā)為主復(fù)雜的可靠性留到兩端一旦網(wǎng)絡(luò)內(nèi)部開(kāi)始做復(fù)雜的可靠傳輸會(huì)給多業(yè)務(wù)共享帶來(lái)巨大困難。你做網(wǎng)絡(luò)設(shè)備設(shè)計(jì)時(shí)如果在中間節(jié)點(diǎn)加入過(guò)多連接狀態(tài)通常是不被推薦的。這個(gè)判斷比單純背結(jié)論更有用。4. 三層復(fù)用與 PDU 流動(dòng)第二章答案的隱藏重點(diǎn)4.1 傳輸層復(fù)用靠端口號(hào)和連接 ID 分揀第 9 題的答案比較長(zhǎng)因?yàn)樗螽?huà)圖。傳輸層復(fù)用的核心是端口號(hào)UDP 包到達(dá)時(shí)網(wǎng)絡(luò)層把 SDU 交給 UDP 實(shí)體UDP 按目的端口號(hào)判斷該交給哪個(gè)應(yīng)用進(jìn)程TCP 則更嚴(yán)格用“源 IP、目的 IP、源端口、目的端口”組成的連接 ID 來(lái)判斷因?yàn)橥粋€(gè)端口上可能同時(shí)存在多個(gè) TCP 連接只靠端口號(hào)區(qū)不出來(lái)。這里補(bǔ)一句TCP 的完整標(biāo)識(shí)通常寫(xiě)成五元組加上協(xié)議號(hào)但因?yàn)閰f(xié)議號(hào)在 UDP 下固定為 17、TCP 下固定為 6討論傳輸層時(shí)經(jīng)常把協(xié)議號(hào)省略。理解這個(gè)機(jī)制的最佳方式是看抓包。同一個(gè)瀏覽器里同時(shí)開(kāi)多個(gè)標(biāo)簽頁(yè)每一條 TCP 連接的四元組都不完全一樣不同的應(yīng)用則至少端口號(hào)不同。傳輸層的“分用”就是靠這兩個(gè)維度完成的連接維度和端口維度??荚嚂r(shí)如果要求畫(huà) UDP 解復(fù)用圖可以畫(huà)“多個(gè)應(yīng)用進(jìn)程→UDP→網(wǎng)絡(luò)層→IP→對(duì)端”的路徑重點(diǎn)標(biāo)出“按目的端口號(hào)分揀”這一步。答案里給的就是這條鏈路評(píng)分標(biāo)準(zhǔn)不會(huì)要求把頭部字段逐個(gè)畫(huà)全。4.2 網(wǎng)絡(luò)層復(fù)用用協(xié)議類(lèi)型字段進(jìn)場(chǎng)到了 IP 這層分揀的依據(jù)變成了協(xié)議類(lèi)型字段。IPv4 頭部的 Protocol 字段標(biāo)明上層載荷是 TCP 還是 UDP或者其他協(xié)議比如 ICMP、OSPF。收到 IP 包后IP 層讀這個(gè)字段把載荷交給對(duì)應(yīng)的解析函數(shù)。這一層復(fù)用比傳輸層簡(jiǎn)單因?yàn)樗臼且粚?duì)多一個(gè) IP 服務(wù)承載多種上層協(xié)議。但別小看它它讓同一條物理鏈路上能同時(shí)跑 IPv4、IPv6、ARP甚至各種隧道協(xié)議而不互相干擾。實(shí)際工程里遇到的“協(xié)議類(lèi)型字段”往往是十六進(jìn)制值。比如以太網(wǎng)幀頭的 EtherType 字段0x0800 表示 IPv40x86DD 表示 IPv60x0806 表示 ARP。數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層各自維護(hù)一個(gè)“上層協(xié)議類(lèi)型”字段功能相似位置不同。我在排障時(shí)經(jīng)常用這個(gè)字段定位封裝問(wèn)題如果抓包看到幀頭的 EtherType 不對(duì)說(shuō)明封裝或配置有問(wèn)題不一定是數(shù)據(jù)本身錯(cuò)了。把這兩個(gè)字段搞清楚再看第 12 題的封裝流程思路會(huì)清晰很多。4.3 數(shù)據(jù)鏈路層復(fù)用一條鏈路承載多種協(xié)議第 9 題的第三層復(fù)用說(shuō)的是數(shù)據(jù)鏈路層來(lái)自不同網(wǎng)絡(luò)層協(xié)議的分組——IP、IPX、Appletalk 等——可以共享同一條數(shù)據(jù)鏈路比如 PPP 或以太網(wǎng)也可以理解為兩個(gè)路由器之間的一條鏈路被多個(gè)網(wǎng)絡(luò)層數(shù)據(jù)流共享。數(shù)據(jù)鏈路層通過(guò)協(xié)議類(lèi)型字段也就是 EtherType 或 PPP 的協(xié)議字段區(qū)分載荷實(shí)現(xiàn)“一條物理鏈路多種邏輯網(wǎng)絡(luò)”。這一節(jié)可以順便把第 12 題的流程完整走一遍主機(jī) 1 應(yīng)用層生成 HTTP 請(qǐng)求傳輸層加 TCP 頭網(wǎng)絡(luò)層加 IP 頭IP 包由網(wǎng)絡(luò)接口封裝成網(wǎng)絡(luò) A 的幀發(fā)給交換機(jī)交換機(jī)根據(jù)幀頭轉(zhuǎn)發(fā)給路由器路由器去掉網(wǎng)絡(luò) A 的幀頭取出 IP 包根據(jù)路由表決定下一跳在以太網(wǎng)上再封裝成以太網(wǎng)幀發(fā)給主機(jī) 2。每一步都是在“換外層封裝、保留 IP 包”這正是互聯(lián)網(wǎng)盡力而為轉(zhuǎn)發(fā)的底層圖景。復(fù)習(xí)這個(gè)知識(shí)點(diǎn)最有效的是把流程拆成步驟理一遍主機(jī) 1 向主機(jī) 2 發(fā) IP 包下一跳是路由器主機(jī) 1 的網(wǎng)絡(luò)接口把 IP 包封裝成網(wǎng)絡(luò) A 幀交換機(jī)按網(wǎng)絡(luò) A 幀頭轉(zhuǎn)發(fā)到路由器路由器解封裝取出 IP 包按路由表選下一跳路由器把 IP 包封裝成網(wǎng)絡(luò) B 的幀交給主機(jī) 2。這一串步驟能串起第 9 題和第 12 題的核心分層帶來(lái)了復(fù)用互聯(lián)網(wǎng)則用“封裝/解封裝”把不同網(wǎng)絡(luò)銜接起來(lái)。兩個(gè)概念放在一個(gè)流程里看比單獨(dú)背定義清楚得多。我自己帶人時(shí)經(jīng)常把這五步當(dāng)成一個(gè)“手寫(xiě)流程題”考不給答案讓新人自己在紙上把每一層的頭部變化標(biāo)出來(lái)標(biāo)對(duì)了第二章的復(fù)用與轉(zhuǎn)發(fā)基本就過(guò)關(guān)了。5. 答案使用避坑四個(gè)常見(jiàn)翻車(chē)現(xiàn)場(chǎng)5.1 現(xiàn)象把“互聯(lián)網(wǎng)”當(dāng)成“因特網(wǎng)”來(lái)理解現(xiàn)象讀完第 1 題把 internetworking 理解成“就是因特網(wǎng)”回答“為什么 WWW 能快速生長(zhǎng)”時(shí)寫(xiě)“因?yàn)樯暇W(wǎng)的人多了”。原因中文里“互聯(lián)網(wǎng)”和“因特網(wǎng)”經(jīng)?;煊枚?internetworking 特指異構(gòu)網(wǎng)絡(luò)互連機(jī)制不是日常說(shuō)的那個(gè)全球互聯(lián)網(wǎng)。解決回答時(shí)先寫(xiě)“internetworking 是讓異構(gòu)網(wǎng)絡(luò)協(xié)作的技術(shù)機(jī)制”再寫(xiě)“因特網(wǎng)是這個(gè)機(jī)制的一個(gè)實(shí)現(xiàn)”把第 1 題答案里的兩個(gè)層面分開(kāi)。這個(gè)表述失誤在主觀題里非常傷因?yàn)殚喚砝蠋熞谎劬湍芸闯龈拍顩](méi)建立起來(lái)。5.2 現(xiàn)象把“確認(rèn)服務(wù)”和“可靠傳輸”劃等號(hào)現(xiàn)象第 7 題問(wèn)“連接建立應(yīng)該是確認(rèn)服務(wù)數(shù)據(jù)傳遞和連接釋放要不要確認(rèn)”有人直接答“可靠所以都要確認(rèn)”。原因確認(rèn)服務(wù)是服務(wù)原語(yǔ)層面的概念可靠傳輸是端到端的語(yǔ)義兩者不在同一個(gè)層級(jí)。答案里明確說(shuō)面向連接服務(wù)通??煽康灰欢看螖?shù)據(jù)傳遞都需要確認(rèn)連接建立的確認(rèn)是為了確認(rèn)對(duì)端準(zhǔn)備好了連接釋放的確認(rèn)是為了防止雙方狀態(tài)不一致所以釋放往往要反復(fù)確認(rèn)多次然后放棄。解決回答時(shí)先定義“確認(rèn)服務(wù)”是服務(wù)原語(yǔ)再說(shuō)“可靠傳輸”是對(duì)數(shù)據(jù)完整性、順序性的承諾。分層的視角能幫你把它們分開(kāi)。5.3 現(xiàn)象誤以為傳輸層可以完全放進(jìn)網(wǎng)絡(luò)內(nèi)部現(xiàn)象第 5 題答案說(shuō)“傳輸層可以部分放進(jìn)網(wǎng)絡(luò)”有人換算成“那網(wǎng)絡(luò)設(shè)備里可以做 TCP 卸載所以傳輸層可以在網(wǎng)絡(luò)內(nèi)部”。原因傳輸層的核心功能端到端可靠傳輸和進(jìn)程復(fù)用必須在端系統(tǒng)完成網(wǎng)絡(luò)內(nèi)部的 TCP 卸載只是實(shí)現(xiàn)細(xì)節(jié)不是協(xié)議層的歸屬。解決回答時(shí)先點(diǎn)出傳輸層的兩個(gè)核心職責(zé)再說(shuō)明網(wǎng)絡(luò)內(nèi)部能做和不能做的邊界。把“功能部署位置”和“協(xié)議層歸屬”分開(kāi)是這道題拿分的關(guān)鍵。5.4 現(xiàn)象把以太網(wǎng)當(dāng)成面向連接現(xiàn)象第 13 題問(wèn) Ethernet 是面向連接還是無(wú)連接有人看到“以太網(wǎng)幀有 MAC 地址”就選面向連接。原因以太網(wǎng)的 MAC 地址是二層尋址不是連接標(biāo)識(shí)幀是無(wú)連接方式發(fā)送先到先得不保證順序也不確認(rèn)。解決記住“有尋址不等于有連接”以太網(wǎng)的介質(zhì)訪問(wèn)控制機(jī)制決定了它天然是無(wú)連接、盡力而為的。這句話可以當(dāng)排除項(xiàng)用在很多判斷題里。順便提一句第 15 題里那種“一組工作站只在以太網(wǎng)內(nèi)互相通信”的場(chǎng)景不用 IP 也能通信但一旦要跨網(wǎng)段、要路由IP 就不可少了——這正是以太網(wǎng)無(wú)連接、可尋址但不可路由的邊界。6. 把答案變成考點(diǎn)地圖一套回譯自查的用法6.1 “答案倒回去”訓(xùn)練拿到任何一題的答案后先擋住題目只看答案一步步重建題目要求。比如看到“如果數(shù)據(jù)鏈路層提供面向連接服務(wù)網(wǎng)絡(luò)層必須先行建立連接”——逆向過(guò)去你就會(huì)問(wèn)自己“那無(wú)連接呢網(wǎng)絡(luò)層會(huì)怎樣”答案里很多概念的對(duì)比關(guān)系就是這么來(lái)的。這種回譯式復(fù)習(xí)比一次背十題更有用因?yàn)榭紙?chǎng)上你遇到的是題目不是答案。我一般會(huì)把每一題的答案結(jié)尾那句話抽出來(lái)當(dāng)成“鉤子”掛回題目。第 3 題的鉤子是“網(wǎng)絡(luò)層不能假設(shè)鄰居節(jié)點(diǎn)可靠”第 5 題的鉤子是“進(jìn)程復(fù)用不能搬到網(wǎng)絡(luò)內(nèi)部”第 9 題的鉤子是“每層用一個(gè)字段來(lái)分揀”。鉤子越多考前掃一遍就越快。6.2 用對(duì)比表五秒過(guò)一遍把第二章三個(gè)核心概念列成一張小表概念一句話記憶點(diǎn)易錯(cuò)點(diǎn)分層每層提供服務(wù)上層不用關(guān)心下層實(shí)現(xiàn)把“服務(wù)”理解成“協(xié)議”互聯(lián)網(wǎng)異構(gòu)網(wǎng)絡(luò)靠 IP 網(wǎng)絡(luò)接口互連換封裝不換負(fù)載把“互聯(lián)網(wǎng)”當(dāng)成“因特網(wǎng)”連接模型面向連接先建立、可假設(shè)可靠無(wú)連接獨(dú)立、盡力而為認(rèn)為無(wú)連接就一定丟包表里最值得記的是“一句話記憶點(diǎn)”因?yàn)樗欠蠢r(shí)的剎車(chē)。從那以后我每接手一個(gè)新的網(wǎng)絡(luò)模塊都強(qiáng)制自己用這套“回譯→列表”的方式走一遍先讀答案理解邏輯再逆向猜題最后用一句話把它釘在記憶里。這套方法已經(jīng)幫我少走了很多彎路希望也能幫到你。本文還有配套的精品資源點(diǎn)擊獲取