算機(jī)網(wǎng)絡(luò)自頂向下第6版習(xí)題答案與解題思路全解析)
1. 為什么“自頂向下”這本教材的習(xí)題值得反復(fù)刷如果你正在學(xué)計(jì)算機(jī)網(wǎng)絡(luò)或者準(zhǔn)備考研、準(zhǔn)備面試手里大概率繞不開(kāi)一本教材——某經(jīng)典自頂向下方法教材。這本書(shū)從應(yīng)用層一路往下講到物理層邏輯清晰、案例扎實(shí)但真正讓無(wú)數(shù)人頭疼的是每章后面那幾十道習(xí)題。我見(jiàn)過(guò)太多同學(xué)書(shū)看懂了課聽(tīng)完了一到做題就卡殼尤其是那些需要計(jì)算、需要畫(huà)時(shí)序圖、需要推導(dǎo)窗口大小的題目光靠看答案根本不知道為什么。這篇內(nèi)容就是圍繞這本教材第6版的課后習(xí)題答案展開(kāi)的。我會(huì)把每章習(xí)題的核心考點(diǎn)、常見(jiàn)坑、解題思路、以及我當(dāng)年刷題時(shí)總結(jié)出來(lái)的“野路子”全部拆開(kāi)講。適合三類(lèi)人正在上課需要交作業(yè)的本科生、準(zhǔn)備考研復(fù)試被問(wèn)到網(wǎng)絡(luò)細(xì)節(jié)的考生、以及工作后想補(bǔ)網(wǎng)絡(luò)基礎(chǔ)的開(kāi)發(fā)者。不管你是剛翻開(kāi)第一章的新手還是已經(jīng)刷到第五章傳輸層的老油條這里都有你能直接抄作業(yè)的東西。先給一個(gè)整體判斷這本書(shū)的習(xí)題難度是階梯式的。每章前幾道是概念驗(yàn)證題中間是計(jì)算和分析題最后幾道往往是綜合設(shè)計(jì)題。很多人卡在中間那部分因?yàn)榻滩恼闹v原理習(xí)題卻要求你把原理轉(zhuǎn)化成數(shù)值或流程。我的建議是不要一上來(lái)就翻答案先自己寫(xiě)哪怕寫(xiě)錯(cuò)了再看解析印象會(huì)深十倍。下面我按章節(jié)拆解把每類(lèi)題型的底層邏輯講透。2. 應(yīng)用層習(xí)題從HTTP到DNS的實(shí)戰(zhàn)拆解2.1 HTTP請(qǐng)求響應(yīng)與RTT計(jì)算題的通用套路應(yīng)用層最??嫉念}型之一就是計(jì)算從點(diǎn)擊鏈接到收到完整頁(yè)面所需的時(shí)間。這類(lèi)題的核心變量只有幾個(gè)往返時(shí)延RTT、傳輸時(shí)延、并行連接數(shù)、是否使用持久連接。很多同學(xué)一看到“非持久HTTP”和“持久HTTP”就暈其實(shí)你只需要記住一個(gè)原則非持久連接每傳一個(gè)對(duì)象就要新建一次TCP連接每次建連至少消耗一個(gè)RTT持久連接則復(fù)用同一條TCP連接省去后續(xù)建連的RTT。我拿一道典型題舉例假設(shè)一個(gè)頁(yè)面包含1個(gè)基礎(chǔ)HTML文件和3個(gè)圖片RTT為100ms忽略傳輸時(shí)延。非持久HTTP且串行請(qǐng)求的情況下總時(shí)間是多少答案是建TCP連1個(gè)RTT發(fā)HTTP請(qǐng)求并收到響應(yīng)1個(gè)RTT這是HTML文件共2個(gè)RTT。然后每個(gè)圖片都要重新建連每個(gè)圖片2個(gè)RTT3個(gè)圖片就是6個(gè)RTT??偣?個(gè)RTT即800ms。如果改成非持久但并行請(qǐng)求圖片可以同時(shí)建連那么HTML之后3個(gè)圖片并行每個(gè)2個(gè)RTT但并行意味著它們同時(shí)開(kāi)始總時(shí)間還是2個(gè)RTT所以總共4個(gè)RTT400ms。如果是持久連接且串行建連1個(gè)RTTHTML請(qǐng)求響應(yīng)1個(gè)RTT然后3個(gè)圖片共用這條連接每個(gè)1個(gè)RTT總共235個(gè)RTT500ms。持久連接加流水線圖片請(qǐng)求可以連續(xù)發(fā)理想情況下總時(shí)間更短。注意很多題會(huì)故意加一個(gè)“客戶(hù)端解析HTML文件需要時(shí)間”或者“DNS查詢(xún)時(shí)間”這時(shí)候你要把DNS的RTT單獨(dú)加上。DNS通常是遞歸查詢(xún)本地DNS到根、到頂級(jí)、到權(quán)威每一級(jí)一個(gè)RTT但如果有緩存可能為0。做題時(shí)先看題目有沒(méi)有說(shuō)“緩存為空”。我自己的經(jīng)驗(yàn)是把這類(lèi)題畫(huà)成時(shí)間軸圖橫軸是時(shí)間縱軸是客戶(hù)端和服務(wù)器每個(gè)RTT畫(huà)一個(gè)箭頭標(biāo)上序號(hào)。畫(huà)完圖答案基本就出來(lái)了。不要硬背公式畫(huà)圖最穩(wěn)。2.2 DNS查詢(xún)與緩存機(jī)制的習(xí)題陷阱DNS部分的習(xí)題經(jīng)常考遞歸查詢(xún)和迭代查詢(xún)的區(qū)別以及緩存對(duì)查詢(xún)次數(shù)的影響。有一道經(jīng)典題客戶(hù)端要訪問(wèn)某個(gè)域名本地DNS服務(wù)器緩存為空問(wèn)從根域名服務(wù)器開(kāi)始迭代查詢(xún)需要多少次請(qǐng)求答案是本地DNS先問(wèn)根根返回頂級(jí)域名服務(wù)器地址本地DNS再問(wèn)頂級(jí)頂級(jí)返回權(quán)威服務(wù)器地址本地DNS再問(wèn)權(quán)威拿到最終IP。一共3次請(qǐng)求加上客戶(hù)端問(wèn)本地DNS的1次總共4次。如果是遞歸查詢(xún)本地DNS會(huì)替客戶(hù)端去問(wèn)根、頂級(jí)、權(quán)威客戶(hù)端只發(fā)1次請(qǐng)求但本地DNS和各級(jí)服務(wù)器之間的請(qǐng)求次數(shù)不變。這里有個(gè)容易錯(cuò)的點(diǎn)題目可能會(huì)說(shuō)“頂級(jí)域名服務(wù)器知道權(quán)威服務(wù)器的地址”但實(shí)際互聯(lián)網(wǎng)中頂級(jí)域名服務(wù)器通常只返回它管理的權(quán)威服務(wù)器不一定直接知道最終IP。做題時(shí)以教材描述為準(zhǔn)教材說(shuō)知道就知道。還有一個(gè)高頻考點(diǎn)是DNS緩存。如果本地DNS緩存了某個(gè)域名的記錄那么查詢(xún)時(shí)間直接降為0忽略本地處理時(shí)間。如果緩存了頂級(jí)域名的記錄那么可以跳過(guò)根查詢(xún)。我見(jiàn)過(guò)一道題問(wèn)“第二次訪問(wèn)同一域名時(shí)哪些查詢(xún)可以省略”答案就是根和頂級(jí)都可以省略直接問(wèn)權(quán)威。這類(lèi)題的關(guān)鍵是分清“緩存了什么級(jí)別的記錄”。2.3 郵件協(xié)議與FTP的細(xì)節(jié)辨析SMTP、POP3、IMAP這三個(gè)郵件協(xié)議的區(qū)別幾乎每學(xué)期都考。SMTP是推協(xié)議用于發(fā)送郵件從用戶(hù)代理到郵件服務(wù)器或者從發(fā)送方服務(wù)器到接收方服務(wù)器。POP3和IMAP是拉協(xié)議用于從服務(wù)器讀取郵件。POP3通常下載后刪除IMAP則在服務(wù)器上管理文件夾。習(xí)題里常問(wèn)“如果用戶(hù)用POP3收郵件然后在另一臺(tái)設(shè)備上還能看到之前的郵件嗎”答案是不能因?yàn)镻OP3默認(rèn)下載后刪除。如果題目說(shuō)“配置為保留副本”那就可以。FTP的控制連接和數(shù)據(jù)連接分離控制連接用21端口數(shù)據(jù)連接用20端口主動(dòng)模式。主動(dòng)模式下服務(wù)器主動(dòng)連客戶(hù)端的數(shù)據(jù)端口被動(dòng)模式下客戶(hù)端連服務(wù)器的隨機(jī)端口。習(xí)題常考“如果客戶(hù)端在防火墻后哪種模式更友好”答案是被動(dòng)模式因?yàn)橹鲃?dòng)模式下服務(wù)器發(fā)起的連接可能被防火墻攔截。這些協(xié)議題不難但細(xì)節(jié)多建議做一張對(duì)比表把端口、方向、有狀態(tài)無(wú)狀態(tài)、是否帶外控制都列出來(lái)。我當(dāng)年就是靠這張表考試時(shí)一眼就能選出答案。3. 傳輸層習(xí)題可靠傳輸與擁塞控制的硬骨頭3.1 滑動(dòng)窗口與選擇重傳的窗口大小計(jì)算傳輸層是整本書(shū)最硬核的部分尤其是滑動(dòng)窗口和選擇重傳。習(xí)題里經(jīng)常給一個(gè)序號(hào)位數(shù)問(wèn)最大窗口大小是多少。比如序號(hào)用5位表示那么序號(hào)空間是0到31共32個(gè)。對(duì)于選擇重傳發(fā)送窗口和接收窗口之和不能超過(guò)序號(hào)空間所以最大窗口是16。對(duì)于回退N步發(fā)送窗口最大是31接收窗口是1。這個(gè)結(jié)論要記牢但更重要的是理解為什么。為什么選擇重傳的窗口不能超過(guò)序號(hào)空間的一半因?yàn)槿绻l(fā)送窗口和接收窗口都太大接收方無(wú)法區(qū)分一個(gè)新分組和一個(gè)重傳的舊分組。舉個(gè)例子序號(hào)空間32發(fā)送窗口20接收窗口20那么發(fā)送方發(fā)了序號(hào)0到19接收方收到后窗口滑動(dòng)到20到39模32就是20到7。如果此時(shí)發(fā)送方超時(shí)重傳序號(hào)0接收方會(huì)以為這是一個(gè)新分組因?yàn)樗拇翱诟采w了0。這就亂了。所以必須限制窗口大小讓接收方的窗口和發(fā)送方的窗口不重疊。我見(jiàn)過(guò)一道題序號(hào)用4位問(wèn)選擇重傳的最大窗口。4位序號(hào)空間是16最大窗口是8。很多同學(xué)直接寫(xiě)16錯(cuò)了。還有一道題回退N步序號(hào)用3位發(fā)送窗口最大是7因?yàn)?會(huì)溢出。這些計(jì)算題只要記住“選擇重傳取一半回退N步取全減一”基本不會(huì)錯(cuò)。3.2 TCP擁塞控制慢啟動(dòng)、擁塞避免與快速恢復(fù)的曲線分析TCP擁塞控制是必考大題。題目通常給一個(gè)擁塞窗口隨時(shí)間變化的圖讓你標(biāo)出慢啟動(dòng)、擁塞避免、快速恢復(fù)的階段或者計(jì)算某個(gè)時(shí)刻的窗口大小。核心規(guī)則慢啟動(dòng)階段每收到一個(gè)ACKcwnd加1所以是指數(shù)增長(zhǎng)每個(gè)RTT翻倍。擁塞避免階段每個(gè)RTT加1線性增長(zhǎng)。發(fā)生超時(shí)cwnd降為1重新慢啟動(dòng)。收到三個(gè)冗余ACKcwnd減半進(jìn)入快速恢復(fù)。有一道經(jīng)典題初始cwnd1ssthresh8。問(wèn)經(jīng)過(guò)5個(gè)RTT后cwnd是多少慢啟動(dòng)RTT1后cwnd2RTT2后4RTT3后8。此時(shí)達(dá)到ssthresh進(jìn)入擁塞避免。RTT4后9RTT5后10。所以答案是10。如果題目說(shuō)在第5個(gè)RTT發(fā)生超時(shí)那么cwnd降為1ssthresh變?yōu)楫?dāng)前cwnd的一半即5。然后重新慢啟動(dòng)。這里有個(gè)坑很多題會(huì)把“三個(gè)冗余ACK”和“超時(shí)”混在一起考。你要分清超時(shí)是嚴(yán)重?fù)砣鹀wnd直接降到1三個(gè)冗余ACK是輕微擁塞cwnd減半。還有快速恢復(fù)階段cwnd不是從1開(kāi)始而是從ssthresh3開(kāi)始因?yàn)槭盏搅巳齻€(gè)重復(fù)ACK說(shuō)明有三個(gè)分組已經(jīng)離開(kāi)網(wǎng)絡(luò)。我自己的做法是拿到題先畫(huà)時(shí)間軸標(biāo)出每個(gè)RTT的cwnd值然后根據(jù)事件調(diào)整。不要跳步一步一步來(lái)再?gòu)?fù)雜的題也能解。3.3 往返時(shí)間估計(jì)與超時(shí)時(shí)間的計(jì)算題TCP的超時(shí)時(shí)間計(jì)算涉及EstimatedRTT和DevRTT。公式是EstimatedRTT (1-α) * EstimatedRTT α * SampleRTT通常α0.125。DevRTT (1-β) * DevRTT β * |SampleRTT - EstimatedRTT|β0.25。超時(shí)時(shí)間 EstimatedRTT 4 * DevRTT。題目一般會(huì)給幾個(gè)SampleRTT讓你算最終的TimeoutInterval。比如初始EstimatedRTT100msDevRTT10ms第一個(gè)SampleRTT120ms。那么新的EstimatedRTT 0.875100 0.125120 87.5 15 102.5ms。DevRTT 0.7510 0.25|120-102.5| 7.5 0.2517.5 7.5 4.375 11.875ms。超時(shí)時(shí)間 102.5 411.875 102.5 47.5 150ms。這類(lèi)題不難但計(jì)算要細(xì)心。我建議用表格把每次的SampleRTT、EstimatedRTT、DevRTT、TimeoutInterval都列出來(lái)避免中間步驟出錯(cuò)。還有題目可能會(huì)問(wèn)“如果超時(shí)后重傳SampleRTT取哪個(gè)值”答案是取重傳后的ACK對(duì)應(yīng)的SampleRTT但Karn算法說(shuō)重傳時(shí)不更新EstimatedRTT除非用時(shí)間戳選項(xiàng)。這個(gè)細(xì)節(jié)??肌?. 網(wǎng)絡(luò)層與鏈路層從IP分片到CSMA/CD的實(shí)戰(zhàn)4.1 IP數(shù)據(jù)報(bào)分片與重組計(jì)算全流程IP分片是網(wǎng)絡(luò)層最??嫉挠?jì)算題。題目給一個(gè)數(shù)據(jù)報(bào)總長(zhǎng)度、MTU、標(biāo)識(shí)符讓你算分片后的每片長(zhǎng)度、偏移量、MF標(biāo)志。核心規(guī)則分片的數(shù)據(jù)部分必須是8字節(jié)的整數(shù)倍??傞L(zhǎng)度包括首部20字節(jié)。偏移量以8字節(jié)為單位。舉個(gè)例子一個(gè)總長(zhǎng)4000字節(jié)的IP數(shù)據(jù)報(bào)首部20數(shù)據(jù)3980MTU1500。那么每片最大數(shù)據(jù)是1500-201480字節(jié)。第一片數(shù)據(jù)1480偏移0MF1。第二片數(shù)據(jù)1480偏移1480/8185MF1。第三片數(shù)據(jù)3980-1480-14801020偏移(14801480)/8370MF0??傞L(zhǎng)度分別是1500、1500、1040。這里有個(gè)易錯(cuò)點(diǎn)偏移量的單位是8字節(jié)所以計(jì)算時(shí)要除以8。還有最后一片的數(shù)據(jù)不要求是8的倍數(shù)但前面的片必須是。如果題目給的MTU不是8的倍數(shù)加20比如MTU1500那沒(méi)問(wèn)題如果MTU1499那每片最大數(shù)據(jù)是1479但1479不是8的倍數(shù)要向下取到1472。這個(gè)細(xì)節(jié)很多題會(huì)考。我建議做這類(lèi)題時(shí)先算每片最大數(shù)據(jù)量然后從總數(shù)據(jù)量里依次減最后一片直接取剩余。偏移量用累計(jì)數(shù)據(jù)量除以8。畫(huà)一個(gè)表格列片號(hào)、數(shù)據(jù)長(zhǎng)度、偏移、MF、總長(zhǎng)度。一目了然。4.2 CSMA/CD與以太網(wǎng)幀的最小長(zhǎng)度推導(dǎo)CSMA/CD的習(xí)題經(jīng)常問(wèn)為什么以太網(wǎng)幀的最小長(zhǎng)度是64字節(jié)這要從碰撞檢測(cè)說(shuō)起。最壞情況下信號(hào)從一端傳到另一端再回來(lái)需要2倍的最大傳播時(shí)延。發(fā)送方必須在發(fā)送完之前檢測(cè)到碰撞所以發(fā)送時(shí)間至少是2倍傳播時(shí)延。對(duì)于10Mbps以太網(wǎng)最大距離2500米傳播速度2e8 m/s傳播時(shí)延2500/2e812.5微秒往返25微秒。發(fā)送25微秒的數(shù)據(jù)量是10Mbps * 25us 250比特約等于64字節(jié)512比特。實(shí)際上標(biāo)準(zhǔn)取512比特即64字節(jié)。題目可能會(huì)變參數(shù)比如速率100Mbps距離100米問(wèn)最小幀長(zhǎng)。你只需要用公式最小幀長(zhǎng) 2 * 距離 / 傳播速度 * 速率。注意單位換算。我見(jiàn)過(guò)一道題速率1Gbps距離200米算出來(lái)是2*200/2e8 * 1e9 2000比特 250字節(jié)。但實(shí)際以太網(wǎng)最小幀還是64字節(jié)因?yàn)闃?biāo)準(zhǔn)沒(méi)變。題目如果問(wèn)“理論上最小”就用公式算如果問(wèn)“實(shí)際標(biāo)準(zhǔn)”就是64字節(jié)。還有CSMA/CD的二進(jìn)制指數(shù)退避算法也常考。第n次碰撞后從0到2^n-1中隨機(jī)取一個(gè)數(shù)乘以爭(zhēng)用期。如果n3就從0到7中取。這個(gè)簡(jiǎn)單但要注意n最大到10超過(guò)10就固定從0到1023取。4.3 交換機(jī)與路由器的轉(zhuǎn)發(fā)決策對(duì)比交換機(jī)和路由器的區(qū)別習(xí)題里常以“一個(gè)幀到達(dá)交換機(jī)交換機(jī)如何轉(zhuǎn)發(fā)”和“一個(gè)分組到達(dá)路由器路由器如何轉(zhuǎn)發(fā)”來(lái)考。交換機(jī)看MAC地址表如果表中有目的MAC就從對(duì)應(yīng)端口轉(zhuǎn)發(fā)如果沒(méi)有就泛洪。路由器看路由表用最長(zhǎng)前綴匹配找到下一跳。有一道題一個(gè)交換機(jī)收到一個(gè)幀目的MAC不在表中它會(huì)怎么做答案是泛洪到所有端口除了 incoming 端口。如果目的MAC在表中就只轉(zhuǎn)發(fā)到對(duì)應(yīng)端口。路由器則不會(huì)泛洪如果路由表中沒(méi)有匹配項(xiàng)就丟棄并發(fā)送ICMP不可達(dá)。這里有個(gè)細(xì)節(jié)交換機(jī)是即插即用的MAC表通過(guò)源MAC學(xué)習(xí)。路由器需要配置路由協(xié)議或靜態(tài)路由。題目可能會(huì)問(wèn)“交換機(jī)需要配置IP嗎”答案是不需要交換機(jī)是二層設(shè)備只關(guān)心MAC。路由器是三層設(shè)備需要IP。我當(dāng)年做這類(lèi)題時(shí)喜歡畫(huà)一個(gè)網(wǎng)絡(luò)拓?fù)錁?biāo)上MAC和IP然后模擬一個(gè)幀或分組的旅程。這樣比死記硬背強(qiáng)得多。5. 無(wú)線與網(wǎng)絡(luò)安全容易被忽視的得分點(diǎn)5.1 802.11 CSMA/CA與RTS/CTS機(jī)制無(wú)線網(wǎng)絡(luò)的CSMA/CA和有線CSMA/CD不同因?yàn)闊o(wú)線不能一邊發(fā)一邊聽(tīng)。習(xí)題??紴槭裁礋o(wú)線要用CSMA/CA因?yàn)闊o(wú)線信號(hào)衰減快且存在隱藏終端問(wèn)題。CSMA/CA通過(guò)ACK確認(rèn)來(lái)避免碰撞。RTS/CTS機(jī)制用于解決隱藏終端發(fā)送方先發(fā)RTS接收方回CTS其他站聽(tīng)到CTS后延遲發(fā)送。有一道題A和B都想發(fā)給AP但A和B互相聽(tīng)不到問(wèn)如何避免碰撞答案是用RTS/CTS。A發(fā)RTS給APAP回CTSB聽(tīng)到CTS后知道AP要接收A的數(shù)據(jù)就延遲。如果B也發(fā)RTS就會(huì)碰撞。所以RTS/CTS不是萬(wàn)能的但能減少碰撞。還有802.11的幀間間隔SIFS、DIFS也???。SIFS最短用于ACKDIFS較長(zhǎng)用于數(shù)據(jù)幀。優(yōu)先級(jí)SIFS PIFS DIFS。題目可能會(huì)問(wèn)“ACK在什么之后發(fā)送”答案是SIFS之后。5.2 對(duì)稱(chēng)加密與非對(duì)稱(chēng)加密的混合使用網(wǎng)絡(luò)安全部分的習(xí)題經(jīng)??糝SA和AES的混合加密。為什么不用RSA加密所有數(shù)據(jù)因?yàn)镽SA慢適合加密小數(shù)據(jù)比如對(duì)稱(chēng)密鑰。實(shí)際流程A生成一個(gè)對(duì)稱(chēng)密鑰用B的公鑰加密后發(fā)給BB用私鑰解密得到對(duì)稱(chēng)密鑰然后雙方用對(duì)稱(chēng)密鑰通信。題目可能會(huì)給p5, q7讓你算RSA的公鑰和私鑰。n35φ(n)24。選e5因?yàn)?和24互質(zhì)。d e^-1 mod 245525 mod 241所以d5。公鑰(5,35)私鑰(5,35)。這里e和d相同是巧合但計(jì)算是對(duì)的。加密m3c3^5 mod 35 243 mod 35 243-21033。解密33^5 mod 35 33^21089 mod 351089-108544^2161633528 mod 35528-5253。正確。這類(lèi)題不難但計(jì)算量大。我建議用模運(yùn)算的性質(zhì)分步算別直接算大數(shù)。還有題目可能會(huì)問(wèn)“如果p和q泄露會(huì)怎樣”答案是私鑰可被計(jì)算加密失效。5.3 數(shù)字簽名與報(bào)文認(rèn)證的習(xí)題辨析數(shù)字簽名和報(bào)文認(rèn)證的區(qū)別數(shù)字簽名用私鑰加密公鑰解密提供認(rèn)證和不可否認(rèn)性報(bào)文認(rèn)證用共享密鑰或哈希只提供認(rèn)證不提供不可否認(rèn)性。題目常問(wèn)“如果A和B共享一個(gè)密鑰A發(fā)消息給BB能證明是A發(fā)的嗎”答案是不能因?yàn)锽也能生成同樣的消息所以不可否認(rèn)性不成立。還有哈希函數(shù)的性質(zhì)單向性、抗弱碰撞、抗強(qiáng)碰撞。題目可能會(huì)問(wèn)“MD5和SHA-256哪個(gè)更安全”答案是SHA-256因?yàn)镸D5已被證明有碰撞。但教材第6版可能還沒(méi)更新到最新以教材為準(zhǔn)。我自己的經(jīng)驗(yàn)是這部分題偏概念多看書(shū)上的定義把“提供什么安全服務(wù)”列成表做題時(shí)對(duì)號(hào)入座。6. 刷題節(jié)奏與答案使用心得6.1 如何安排每章習(xí)題的練習(xí)順序我建議每學(xué)完一章先做前5道概念題確認(rèn)基本概念清楚。然后做中間的計(jì)算題這部分最花時(shí)間但最能檢驗(yàn)理解。最后做綜合題如果時(shí)間不夠至少看懂答案的思路。不要一章全做完再對(duì)答案做5道就對(duì)一次及時(shí)糾正。對(duì)于傳輸層和網(wǎng)絡(luò)層計(jì)算題多建議準(zhǔn)備一個(gè)錯(cuò)題本把做錯(cuò)的題號(hào)、錯(cuò)誤原因、正確思路記下來(lái)。我當(dāng)年錯(cuò)得最多的是滑動(dòng)窗口的窗口大小和IP分片的偏移量后來(lái)專(zhuān)門(mén)練了20道就再也沒(méi)錯(cuò)過(guò)。6.2 答案看不懂時(shí)怎么辦有時(shí)候答案跳步太多看不懂。我的做法是先看答案的最終結(jié)果然后自己反推。比如擁塞控制題答案說(shuō)cwnd10我就從初始值開(kāi)始按規(guī)則一步步推看哪一步能到10。如果推不出來(lái)就去看教材對(duì)應(yīng)章節(jié)的例題通常例題和習(xí)題是配套的。還有一個(gè)辦法找同學(xué)討論。我當(dāng)年和室友一起刷題他懂的我可能不懂互相講一遍效果比看答案好。如果實(shí)在沒(méi)人討論就去網(wǎng)上搜但要注意網(wǎng)上的答案可能有錯(cuò)最好交叉驗(yàn)證。6.3 常見(jiàn)錯(cuò)誤類(lèi)型與避坑清單我整理了一個(gè)常見(jiàn)錯(cuò)誤表你可以對(duì)照檢查錯(cuò)誤類(lèi)型典型表現(xiàn)糾正方法單位混淆RTT用秒速率用Mbps直接乘統(tǒng)一換算成比特和秒窗口大小超限選擇重傳窗口取序號(hào)空間記住取一半偏移量忘除8IP分片偏移直接寫(xiě)字節(jié)數(shù)除以8混淆超時(shí)和冗余ACK超時(shí)降為1冗余ACK減半畫(huà)圖區(qū)分DNS緩存級(jí)別搞錯(cuò)以為緩存了域名就不用問(wèn)權(quán)威緩存只跳過(guò)已緩存的級(jí)別加密計(jì)算順序錯(cuò)RSA先加密后簽名簽名用私鑰加密用公鑰提示做題時(shí)把“已知”和“求”列清楚單位統(tǒng)一畫(huà)圖輔助能避免80%的錯(cuò)誤。6.4 從習(xí)題到面試哪些題最值得反復(fù)看如果你是為了面試重點(diǎn)看傳輸層的TCP擁塞控制、三次握手四次揮手、流量控制網(wǎng)絡(luò)層的IP分片、路由算法鏈路層的CSMA/CD、交換機(jī)轉(zhuǎn)發(fā)。應(yīng)用層的HTTP、DNS也常問(wèn)。安全部分RSA和數(shù)字簽名要能講清楚流程。我面試時(shí)被問(wèn)過(guò)“TCP慢啟動(dòng)什么時(shí)候結(jié)束”我直接畫(huà)了曲線講了ssthresh的作用面試官很滿(mǎn)意。所以習(xí)題不只是為了考試更是為了把知識(shí)內(nèi)化成能講出來(lái)的東西。最后分享一個(gè)小技巧把每章的習(xí)題答案整理成自己的話(huà)不要照抄。比如“選擇重傳窗口是序號(hào)空間的一半”你可以寫(xiě)成“因?yàn)橐苊庑屡f分組混淆發(fā)送和接收窗口加起來(lái)不能超過(guò)序號(hào)總數(shù)所以各取一半”。這樣寫(xiě)一遍比看十遍答案都管用。