算機(jī)網(wǎng)絡(luò)核心考點(diǎn)速記:分層模型、子網(wǎng)劃分與TCP擁塞控制詳解)
期末復(fù)習(xí)也好、考研408也好很多人面對《計(jì)算機(jī)網(wǎng)絡(luò)》的第一反應(yīng)是背了一堆名詞謝希仁的教材翻了三四遍王道視頻也刷了但做題還是錯(cuò)。我當(dāng)年備考的時(shí)候也有這種感覺——明明知識點(diǎn)都見過可一到子網(wǎng)劃分、擁塞控制這種題目就卡殼。后來才明白計(jì)網(wǎng)這門課真正難的不是記憶而是腦子里缺一張地圖。你不知道每個(gè)知識點(diǎn)屬于哪一層、解決的問題是什么、和相鄰層的機(jī)制怎么配合那背再多也是散的。這篇速記就是幫你把地圖先鋪開。我按先搭分層框架、再逐層填充細(xì)節(jié)、最后橫向?qū)Ρ纫谆禳c(diǎn)的順序把計(jì)網(wǎng)最核心的考點(diǎn)串一遍。不管你是考前突擊、408備考還是工作中需要補(bǔ)網(wǎng)絡(luò)基礎(chǔ)順著這條線過一遍比零散刷題要高效得多。1. 把分層模型當(dāng)成思維腳手架先背骨架再填肉計(jì)網(wǎng)所有教材上來都講分層但很多人沒意識到這不是為了考試才設(shè)計(jì)的抽象模型而是實(shí)際網(wǎng)絡(luò)排障的基本方法論。你要養(yǎng)成的第一個(gè)習(xí)慣是遇到任何網(wǎng)絡(luò)問題先問一句——這是哪一層的事1.1 分層到底解決了什么問題打個(gè)比方。你和朋友寫信你關(guān)心的是內(nèi)容、語氣、格式郵局關(guān)心的是信封上的地址、貼沒貼郵票、走陸運(yùn)還是空運(yùn)貨車司機(jī)關(guān)心的則是道路、油價(jià)、落腳點(diǎn)。三者各管一段誰也不需要懂誰的全部細(xì)節(jié)。網(wǎng)絡(luò)分層就是同一個(gè)道理——不同的協(xié)議各管一段層與層之間通過標(biāo)準(zhǔn)的接口打交道上層不需要知道下層怎么實(shí)現(xiàn)下層也不關(guān)心上層的數(shù)據(jù)含義。這個(gè)解耦帶來的直接好處是某一層的技術(shù)可以單獨(dú)升級而不影響其他層。比如底層鏈路從銅線換成光纖TCP協(xié)議完全無需改動(dòng)應(yīng)用層從HTTP換成FTP底層的路由和傳輸機(jī)制照常工作。1.2 兩套模型的對照別死記考試和面試?yán)镒畛R姷木褪亲屇銋^(qū)分OSI七層和TCP/IP的層次關(guān)系。我建議你這樣記OSI是理論派TCP/IP是實(shí)戰(zhàn)派。OSI七層TCP/IP四層每層一句話職責(zé)應(yīng)用層、表示層、會話層應(yīng)用層為用戶提供網(wǎng)絡(luò)服務(wù)入口比如發(fā)郵件、看網(wǎng)頁傳輸層傳輸層端到端的可靠/不可靠傳輸給數(shù)據(jù)編號、核對、重傳網(wǎng)絡(luò)層網(wǎng)際層跨網(wǎng)尋址和選路解決數(shù)據(jù)包怎么找到目的網(wǎng)絡(luò)數(shù)據(jù)鏈路層網(wǎng)絡(luò)接口層相鄰節(jié)點(diǎn)之間的幀傳輸解決同一段鏈路上怎么傳物理層網(wǎng)絡(luò)接口層比特流的透明傳輸解決信號怎么變成0和1如果用的是謝希仁教材的五層原理體系就是把數(shù)據(jù)鏈路層和物理層單獨(dú)列出來應(yīng)用層合并表示層和會話層。無論哪種分法你在復(fù)習(xí)時(shí)都記住一句話下層為上層提供服務(wù)上層不關(guān)心下層的實(shí)現(xiàn)細(xì)節(jié)。所有協(xié)議和知識點(diǎn)你第一步先把它歸層后面的邏輯關(guān)系基本就順了。1.3 用分層思路做排障定位這個(gè)思路在工作里太常用了。比如你電腦上不了網(wǎng)實(shí)際排查順序就是自下而上的網(wǎng)線/網(wǎng)卡燈亮不亮——物理層IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)配置對不對——網(wǎng)絡(luò)層能不能ping通網(wǎng)關(guān)、ping通公網(wǎng)——網(wǎng)絡(luò)層ICMP瀏覽器能不能打開頁面——應(yīng)用層HTTP。我見過很多新手一上來就懷疑防火墻攔截其實(shí)多半是IP配錯(cuò)或網(wǎng)關(guān)不通。你先用分層思維把故障圈定在某一段效率會高很多。2. 物理層與數(shù)據(jù)鏈路層把底層細(xì)節(jié)變成送分題很多人復(fù)習(xí)時(shí)喜歡從網(wǎng)絡(luò)層、傳輸層開始底層一帶而過。但選擇題和計(jì)算題恰恰喜歡埋伏在這里。其實(shí)底層知識點(diǎn)套路化很強(qiáng)記清楚幾個(gè)公式和機(jī)制就穩(wěn)了。2.1 物理層的兩個(gè)公式必須能默寫奈氏準(zhǔn)則無噪聲理想信道和香農(nóng)公式有噪聲信道是物理層兩大計(jì)算支柱。奈氏準(zhǔn)則理想低通信道最高碼元速率 2WBand/s其中W是信道帶寬Hz。如果每個(gè)碼元攜帶n比特信息極限數(shù)據(jù)速率 2W·nbit/s。香農(nóng)公式C W·log?(1S/N)其中S/N是信噪比通常題目里給的是分貝值要先用 S/N倍 10^(dB/10) 換算回來??荚嚻眠@么出給你帶寬W和信噪比分別用兩個(gè)公式算出速率取較小值作為實(shí)際能達(dá)到的極限速率。用大白話說奈氏準(zhǔn)則管的是每秒能發(fā)多少個(gè)符號香農(nóng)公式管的是每個(gè)符號最多能帶多少信息量兩者共同決定最終的速率上限。2.2 鏈路層幀、地址和差錯(cuò)控制鏈路層解決的是同一段物理鏈路上怎么把數(shù)據(jù)可靠地交給下一個(gè)節(jié)點(diǎn)。三個(gè)高頻考點(diǎn)封裝成幀。在IP數(shù)據(jù)報(bào)外面套上幀頭和幀尾。幀頭和幀尾最重要的工作是定界——接收方得知道這一幀從哪開始、到哪結(jié)束。所以就有了兩種做法面向字節(jié)的做法用特殊字符定界如PPP協(xié)議面向比特的做法用01111110這樣的比特模式定界。為了不讓數(shù)據(jù)里恰好出現(xiàn)和定界符相同的比特序列還引入了零比特填充和字符填充這就是所謂的透明傳輸。記法數(shù)據(jù)里如果混入了假邊界要么加轉(zhuǎn)義符要么硬性插入0接收方再刪掉。CRC循環(huán)冗余校驗(yàn)。這個(gè)必須會算。簡單說就是發(fā)送方把數(shù)據(jù)左移r位r是生成多項(xiàng)式的階數(shù)用生成多項(xiàng)式對應(yīng)的二進(jìn)制數(shù)做模2除法余數(shù)就是FCS幀檢驗(yàn)序列。接收方拿收到的數(shù)據(jù)做同樣的除法余數(shù)為0則無差錯(cuò)??荚嚥粫屇闼愦髷?shù)但模2除法按位異或、不夠就補(bǔ)0的規(guī)則要練熟。MAC地址與以太網(wǎng)幀。MAC地址48位前24位是廠商編號OUI后24位是序列號。以太網(wǎng)V2幀格式的順序是目的MAC6字節(jié)、源MAC6字節(jié)、類型2字節(jié)、數(shù)據(jù)46~1500字節(jié)不夠要填充、FCS4字節(jié)。注意這里沒有長度字段而用類型是因?yàn)橐蕴W(wǎng)靠前導(dǎo)碼和幀間隙來定界類型字段用來識別上層協(xié)議比如0x0800表示IPv4。2.3 交換機(jī)的自學(xué)、泛洪和環(huán)路交換機(jī)是鏈路層設(shè)備核心工作是自學(xué)習(xí)和轉(zhuǎn)發(fā)/過濾。維護(hù)一張MAC地址表表中記錄MAC地址→端口。收到幀時(shí)查表目的MAC在表里且對應(yīng)端口不是入端口——轉(zhuǎn)發(fā)到該端口目的MAC在表里但對應(yīng)端口就是入端口——過濾丟棄說明目標(biāo)在同一側(cè)目的MAC不在表里——泛洪向除入端口外的所有端口廣播。這就是未知單播泛洪的由來。另外還要清楚交換機(jī)隔離沖突域但不隔離廣播域路由器則兩個(gè)都隔離。一句話交換機(jī)管同一網(wǎng)段內(nèi)怎么傳路由器管跨網(wǎng)段往哪走。2.4 CSMA/CD碰撞檢測背后的數(shù)學(xué)題以太網(wǎng)采用CSMA/CD載波監(jiān)聽多路訪問/碰撞檢測?!跋嚷犜侔l(fā)邊發(fā)邊聽沖突停發(fā)隨機(jī)重發(fā)”。其中最小幀長是高頻計(jì)算點(diǎn)公式最小幀長 2 × 單程端到端時(shí)延 × 數(shù)據(jù)傳輸速率原因是發(fā)送方必須保證在發(fā)送完之前能檢測到可能發(fā)生的碰撞。如果幀太短發(fā)完了碰撞信號還沒傳回來發(fā)送方會誤以為發(fā)送成功。所以標(biāo)準(zhǔn)以太網(wǎng)規(guī)定最小幀長64字節(jié)就是為了在半雙工、10Mbit/s、電纜最長2500米、最多4個(gè)中繼器的限制下保證發(fā)送時(shí)間 ≥ 2倍單程時(shí)延。重發(fā)策略也要會檢測到碰撞后按截?cái)喽M(jìn)制指數(shù)退避算法第n次沖突后從0到2??1中隨機(jī)選一個(gè)數(shù)k等待k×512比特時(shí)間后重發(fā)n超過10后就不再增加隨機(jī)范圍。這個(gè)機(jī)制保證了沖突后重發(fā)的公平性和概率可控。3. 網(wǎng)絡(luò)層IP編址、子網(wǎng)劃分與路由協(xié)議是得分主戰(zhàn)場網(wǎng)絡(luò)層在考試?yán)镎嫉谋戎刈畲笠彩抢_分?jǐn)?shù)的地方。這塊的核心就三件事編址IP地址怎么分、轉(zhuǎn)發(fā)路由器怎么走、選路路由協(xié)議怎么定。3.1 IP地址的分類記憶法IPv4地址32位點(diǎn)分十進(jìn)制表示。傳統(tǒng)分類編址A類首位0網(wǎng)絡(luò)號8位范圍1.0.0.0~126.255.255.255默認(rèn)掩碼255.0.0.0B類前兩位10網(wǎng)絡(luò)號16位范圍128.0.0.0~191.255.255.255默認(rèn)掩碼255.255.0.0C類前三位110網(wǎng)絡(luò)號24位范圍192.0.0.0~223.255.255.255默認(rèn)掩碼255.255.255.0D類前四位1110組播地址E類前四位1111保留。不用死記數(shù)值范圍只看第一段的二進(jìn)制前綴就行??荚囎钊菀卓嫉奶厥獾刂肪W(wǎng)絡(luò)地址主機(jī)號全0、廣播地址主機(jī)號全1、回環(huán)地址127.0.0.1、私有地址段10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。私有地址不能上公網(wǎng)是靠NAT轉(zhuǎn)出去的。不過現(xiàn)在的實(shí)際網(wǎng)絡(luò)早就不用分類編址了而是CIDR無分類編址用IP/前綴長度的方式表示比如192.168.10.0/24。復(fù)習(xí)的時(shí)候重點(diǎn)練兩件事給一個(gè)IP和一個(gè)掩碼算出網(wǎng)絡(luò)地址和廣播地址給一段地址空間按題目要求劃分子網(wǎng)并寫出每個(gè)子網(wǎng)的可用主機(jī)范圍。3.2 子網(wǎng)劃分的實(shí)操套路拿到題目不要慌按步驟來把IP和子網(wǎng)掩碼都轉(zhuǎn)成二進(jìn)制IP和掩碼逐位相與得到網(wǎng)絡(luò)地址主機(jī)位全1就是廣播地址可用主機(jī)數(shù) 2^主機(jī)位數(shù) - 2減掉網(wǎng)絡(luò)地址和廣播地址。舉個(gè)例子192.168.10.130/26。掩碼是255.255.255.192二進(jìn)制最后8位是11000000相當(dāng)于把C類地址的最后一個(gè)字節(jié)借了2位做子網(wǎng)號主機(jī)位只剩6位。130的二進(jìn)制是10000010和11000000相與得10000000也就是128所以網(wǎng)絡(luò)地址是192.168.10.128廣播地址是192.168.10.191主機(jī)位全1即10000000加0011111110111111可用主機(jī)范圍192.168.10.129~192.168.10.190共62臺主機(jī)。遇到把一個(gè)大網(wǎng)劃分成若干子網(wǎng)要求每個(gè)子網(wǎng)能容納多少臺主機(jī)這類題先根據(jù)主機(jī)數(shù)倒推主機(jī)位數(shù)主機(jī)數(shù)≤2?-2取滿足條件的最小n**剩下的位就是子網(wǎng)號位數(shù)。** 這個(gè)順序千萬別弄反很多人先急著湊子網(wǎng)數(shù)最后主機(jī)位不夠用白丟分。3.3 路由器的轉(zhuǎn)發(fā)流程查表、最長前綴匹配、TTL路由器轉(zhuǎn)發(fā)IP數(shù)據(jù)報(bào)的核心是查路由表?,F(xiàn)代路由表用CIDR條目查表時(shí)采用最長前綴匹配多條路由都能匹配時(shí)選前綴最長也就是掩碼最長、范圍最精確的那條。轉(zhuǎn)發(fā)的大致流程收到數(shù)據(jù)報(bào)校驗(yàn)頭部用目的IP查路由表最長前綴匹配確定下一跳TTL減1如果TTL變?yōu)?直接丟棄并回送ICMP超時(shí)報(bào)文重算首部校驗(yàn)和按出端口轉(zhuǎn)發(fā)。有個(gè)細(xì)節(jié)每經(jīng)過一個(gè)路由器IP數(shù)據(jù)報(bào)的源IP和目的IP不變變的只是MAC地址。所以抓包時(shí)一個(gè)包在不同鏈路段的源/目的MAC是不同的而IP始終一致。這個(gè)點(diǎn)??祭斫馔笍亓随溌穼雍途W(wǎng)絡(luò)層的分工就徹底清晰了。3.4 ARP、ICMP、DHCP、NAT網(wǎng)絡(luò)層的輔助配角ARP的作用是已知目的IP求目的MAC。因?yàn)閿?shù)據(jù)鏈路層需要MAC地址作為幀的目的地址所以發(fā)送方先查本機(jī)ARP緩存沒有就發(fā)廣播ARP請求目標(biāo)主機(jī)單播回復(fù)。記住ARP是同一網(wǎng)段內(nèi)的協(xié)議跨網(wǎng)段通信時(shí)數(shù)據(jù)報(bào)要先發(fā)給默認(rèn)網(wǎng)關(guān)路由器這時(shí)ARP解析的是網(wǎng)關(guān)的MAC而不是最終目標(biāo)的MAC。ICMP是網(wǎng)絡(luò)層的信使最常用的兩類差錯(cuò)報(bào)告終點(diǎn)不可達(dá)、時(shí)間超過、參數(shù)問題和詢問ping用的回顯請求/回答。traceroute就是利用TTL超時(shí)回送ICMP時(shí)間超過報(bào)文來逐跳探測路徑的。DHCP負(fù)責(zé)自動(dòng)分配IP流程是DISCOVER發(fā)現(xiàn)、OFFER提供、REQUEST請求、ACK確認(rèn)。NAT的作用是把內(nèi)網(wǎng)私有地址轉(zhuǎn)換成公網(wǎng)地址常見實(shí)現(xiàn)是NAPT用IP端口的映射表來復(fù)用公網(wǎng)IP。3.5 路由協(xié)議三兄弟RIP、OSPF、BGP怎么區(qū)分這三個(gè)是超高頻考點(diǎn)我直接給對比表協(xié)議類型算法度量適用范圍RIP距離向量Bellman-Ford跳數(shù)上限15小型自治系統(tǒng)內(nèi)部OSPF鏈路狀態(tài)Dijkstra帶寬等開銷較大自治系統(tǒng)內(nèi)部BGP路徑向量選擇策略非單純算法路徑屬性AS-PATH等自治系統(tǒng)之間RIP每個(gè)路由器只和鄰居交換到各網(wǎng)絡(luò)的距離好消息傳得快、壞消息傳得慢這就是計(jì)數(shù)到無窮問題的根源。OSPF每個(gè)路由器泛洪自己的鏈路狀態(tài)連著誰、開銷多少全網(wǎng)最終有相同的鏈路狀態(tài)數(shù)據(jù)庫然后各自獨(dú)立算最短路徑樹。OSPF的收斂速度比RIP快得多因?yàn)樗粰z測到拓?fù)渥兓土⒖谭汉楦隆GP不是找最短路徑而是根據(jù)AS間的策略選路比如不經(jīng)過某運(yùn)營商這種業(yè)務(wù)層面的約束所以叫路徑向量。4. 傳輸層三次握手、滑動(dòng)窗口與擁塞控制的隱蔽陷阱傳輸層的核心是TCP也是全書中概念最密集、選擇題最愛挖坑的一章。復(fù)習(xí)它只要抓住一條主線TCP要在一個(gè)不可靠的IP網(wǎng)絡(luò)上實(shí)現(xiàn)可靠、有序、不重復(fù)、流量可控的字節(jié)流傳輸。4.1 端口與套接字傳輸層用端口號區(qū)分應(yīng)用進(jìn)程。常見端口FTP 21、SSH 22、Telnet 23、SMTP 25、DNS 53、HTTP 80、HTTPS 443。用套接字SocketIP地址:端口號唯一標(biāo)識一個(gè)連接端點(diǎn)。TCP連接的標(biāo)識是四元組源IP、源端口、目的IP、目的端口兩個(gè)不同的進(jìn)程可以通過不同的源端口連接同一個(gè)目的服務(wù)器。4.2 TCP報(bào)文段的關(guān)鍵字段別只看序號TCP段的頭部至少20字節(jié)考試重點(diǎn)關(guān)注序號seq本報(bào)文段數(shù)據(jù)的第一個(gè)字節(jié)在整個(gè)字節(jié)流中的編號初始序號是隨機(jī)選的不是0確認(rèn)號ack期望收到對方下一個(gè)報(bào)文段第一個(gè)字節(jié)的序號也就是我已收到ack-1為止的全部數(shù)據(jù)ACK標(biāo)志位確認(rèn)號只在ACK1時(shí)才有意義窗口rwnd接收方當(dāng)前能接收的字節(jié)數(shù)用于流量控制SYN、FIN、RST連接建立、關(guān)閉、異常復(fù)位。很多人搞混seq和ack我提供一個(gè)萬能的記法seq是對面該看的位置ack是告訴對面我下次要什么。握手時(shí)A發(fā)SYN1、seqxB回SYN1、ACK1、seqy、ackx1A再發(fā)ACK1、seqx1、acky1。全程每個(gè)方向都只消耗一個(gè)序號因?yàn)镾YN和FIN各占一個(gè)序號。4.3 三次握手為什么必須三次三次握手要解決的真正問題不只是確認(rèn)雙方都在線而是讓雙方都確認(rèn)自己的發(fā)送能力和接收能力正常。第一次握手A確認(rèn)我能發(fā)、B能收其實(shí)只確認(rèn)了B的接收能力第二次握手B確認(rèn)了A能發(fā)、A能收同時(shí)B也確認(rèn)我能發(fā)第三次握手A確認(rèn)B能收、B能發(fā)。還有一個(gè)經(jīng)典考點(diǎn)如果只有兩次握手歷史遺留的重復(fù)SYN報(bào)文可能讓服務(wù)器誤建連接白白分配資源。三次握手中客戶端可以通過判斷ack是否等于自己上次的seq1來拒絕過期連接。這和為什么TCP是可靠的直接掛鉤。4.4 四次揮手與TIME_WAIT關(guān)連接要四次是因?yàn)門CP支持半關(guān)閉A發(fā)FIN只表示我沒有數(shù)據(jù)發(fā)了但還能收B回ACK表示我知道你發(fā)完了但B可能還有數(shù)據(jù)要發(fā)等B的數(shù)據(jù)發(fā)完了B再發(fā)FIN最后A回ACK。所以中間B的ACK和FIN不能合并除非B在收到FIN后立刻也沒數(shù)據(jù)可發(fā)了這種情況在實(shí)際抓包中確實(shí)可以看到合并但理論流程永遠(yuǎn)是四步。特別注意TIME_WAIT主動(dòng)關(guān)閉方通常是客戶端發(fā)出最后ACK后要等2MSL才進(jìn)入CLOSED。原因有二一是確保最后一個(gè)ACK能被對端收到如果丟了對端會重發(fā)FIN此時(shí)還能響應(yīng)二是讓本連接產(chǎn)生的所有報(bào)文段在網(wǎng)絡(luò)中自然消失避免干擾后續(xù)使用同一四元組的新連接。工作中用netstat偶爾看到大量TIME_WAIT是正常現(xiàn)象只要不是堆積到把端口耗盡就行。4.5 可靠傳輸滑動(dòng)窗口是流量控制的基礎(chǔ)TCP的可靠傳輸建立在確認(rèn)重傳機(jī)制上配合滑動(dòng)窗口實(shí)現(xiàn)一邊發(fā)一邊等。窗口的意義不是一次全發(fā)出去而是允許連續(xù)發(fā)送未確認(rèn)數(shù)據(jù)的總量。停止-等待協(xié)議發(fā)一個(gè)等一個(gè)效率太低只用于教學(xué)講解后退N幀GBN發(fā)送方有窗口接收方只按序接收一旦某個(gè)包丟失后續(xù)全部丟棄發(fā)送方超時(shí)后從丟失處重傳選擇重傳SR接收方緩存亂序到達(dá)的包發(fā)送方只重傳真正丟失的包。TCP實(shí)際采用的是類似SR的機(jī)制但通過SACK選擇性確認(rèn)選項(xiàng)進(jìn)一步優(yōu)化??荚嚾绻屇惚容^這三種協(xié)議抓住兩個(gè)指標(biāo)發(fā)送窗口大小、接收緩存策略。4.6 流量控制和擁塞控制千萬別混流量控制是端到端的解決接收方處理不過來的問題靠的是TCP頭部的窗口字段rwnd由接收方告訴發(fā)送方你能發(fā)多少。擁塞控制是全局的解決網(wǎng)絡(luò)中間設(shè)備路由器處理不過來的問題靠的是擁塞窗口cwnd由發(fā)送方根據(jù)網(wǎng)絡(luò)狀況自己調(diào)整。兩者最終都表現(xiàn)為限制發(fā)送速率但動(dòng)機(jī)完全不同。擁塞控制的四個(gè)算法要按階段記慢開始cwnd從1開始每收到一個(gè)ACKcwnd加1也就是每輪RTT翻倍指數(shù)增長擁塞避免cwnd達(dá)到慢開始門限ssthresh后每輪RTT只加1線性增長快重傳接收方收到失序報(bào)文立即重復(fù)確認(rèn)缺失的報(bào)文發(fā)送方連續(xù)收到3個(gè)重復(fù)ACK就立即重傳不等超時(shí)快恢復(fù)一旦觸發(fā)快重傳ssthresh減半cwnd設(shè)為新的ssthresh然后直接從擁塞避免階段開始線性增長。這里有個(gè)高頻陷阱慢開始不是慢擁塞避免也不是一定不擁塞。慢開始只是從1開始慢慢探路的意思實(shí)際增長是指數(shù)級的擁塞避免才是真正溫和的線性增長??荚嚾绻嬕粭lcwnd隨時(shí)間變化的曲線讓你判斷哪段是慢開始、哪段是擁塞避免你一定要能讀出指數(shù)增長段和線性增長段的分界點(diǎn)。4.7 UDP沒那么多機(jī)制但照樣重要UDP頭部只有8字節(jié)源端口、目的端口、長度、校驗(yàn)和。無連接、不保證可靠交付、支持一對一/一對多/多對多。正因?yàn)殚_銷小像DNS查詢、RTP音視頻、QUIC基于UDP這類場景反而更合適。選擇題里常出現(xiàn)以下哪個(gè)協(xié)議使用UDP答案通常包括DNS、TFTP、DHCP、RTP而HTTP、FTP、SMTP、SSH則都是TCP。5. 應(yīng)用層的送分題DNS、HTTP、Cookie/Session的答題套路應(yīng)用層考點(diǎn)集中、規(guī)律性強(qiáng)復(fù)習(xí)性價(jià)比極高。很多人把應(yīng)用層的各個(gè)協(xié)議割裂開來記其實(shí)完全可以串成一條線你在瀏覽器輸入一個(gè)網(wǎng)址回車到頁面顯示出來一路上都調(diào)用了哪些應(yīng)用層協(xié)議5.1 DNS解析遞歸與迭代的區(qū)別輸入網(wǎng)址后第一步是域名解析。DNS默認(rèn)使用UDP端口53。解析過程分兩種遞歸查詢主機(jī)向本地域名服務(wù)器發(fā)起本地域名服務(wù)器負(fù)責(zé)追根問底最終把結(jié)果帶回迭代查詢本地域名服務(wù)器向根域名服務(wù)器求助根服務(wù)器不直接給答案而是指路——告訴你去找哪個(gè)頂級域名服務(wù)器頂級域名服務(wù)器又告訴你去找哪個(gè)權(quán)威域名服務(wù)器。實(shí)際的主機(jī)→本地DNS是遞歸本地DNS→根/頂級/權(quán)威服務(wù)器通常是迭代。記憶方法遞歸是你幫我查完告訴我迭代是我一步一步問你你只告訴我下一步去哪。還有一個(gè)??碱}瀏覽器輸入IP而不是域名就不會觸發(fā)DNS解析因?yàn)镈NS存在的意義就是把名字翻譯成可路由的IP。5.2 HTTP的報(bào)文、方法與狀態(tài)碼HTTP是超文本傳輸協(xié)議基于TCP。請求報(bào)文結(jié)構(gòu)請求行方法URL版本、首部行、空行、實(shí)體主體。響應(yīng)報(bào)文結(jié)構(gòu)狀態(tài)行版本狀態(tài)碼短語、首部行、空行、實(shí)體主體。狀態(tài)碼要記清楚幾個(gè)代表2xx成功——200 OK3xx重定向——301永久、302臨時(shí)、304未修改緩存生效4xx客戶端錯(cuò)誤——400語法錯(cuò)、401未認(rèn)證、403禁止、404不存在5xx服務(wù)器錯(cuò)誤——500內(nèi)部錯(cuò)、503服務(wù)不可用。方法上掌握GET讀數(shù)據(jù)、POST提交數(shù)據(jù)并創(chuàng)建、PUT整體更新、DELETE刪除、HEAD只要響應(yīng)頭就夠用了。選擇題常挖的坑是GET和POST在緩存、歷史記錄、書簽、長度限制上的差異但核心差別其實(shí)在語義GET是冪等且只讀的POST不是。5.3 Cookie與Session無狀態(tài)協(xié)議怎么記住你HTTP本身是無狀態(tài)的每個(gè)請求都是獨(dú)立的服務(wù)器不記得你是誰。為了讓電商網(wǎng)站能維持登錄態(tài)引入會話機(jī)制Cookie服務(wù)器生成一段小數(shù)據(jù)比如session_id通過Set-Cookie響應(yīng)頭發(fā)給瀏覽器瀏覽器存在本地下次請求帶上。Session數(shù)據(jù)存在服務(wù)器端以session_id為索引查記錄。沒有Cookie和Session的配合你每次刷新頁面都要重新登錄加購物車的操作也無法跨請求保持一致??荚囘€喜歡問Cookie的內(nèi)容是否能存敏感信息——答案是不能Cookie暴露在客戶端只能存標(biāo)識符和低敏信息真正的用戶狀態(tài)放服務(wù)器端Session里。5.4 HTTP版本演進(jìn)1.0、1.1、2.0的考點(diǎn)HTTP/1.0每請求一個(gè)對象就建立一次TCP連接用完就關(guān)效率低HTTP/1.1默認(rèn)持久連接keep-alive一個(gè)TCP連接可連續(xù)傳送多個(gè)請求引入流水線Pipe lining但存在隊(duì)頭阻塞——前面的響應(yīng)慢了后面的得等著HTTP/2.0多路復(fù)用一個(gè)TCP連接上同時(shí)交錯(cuò)傳輸多個(gè)請求/響應(yīng)頭部壓縮、二進(jìn)制分幀、服務(wù)器推送。但底層仍是TCPTCP層的隊(duì)頭阻塞依然存在。如果想要建筑上的性能提升就要說到HTTP/3基于UDP的QUIC。這塊選擇題愛問哪個(gè)版本解決了隊(duì)頭阻塞——注意是緩解而不是徹底解決HTTP/2解決的是應(yīng)用層隊(duì)頭阻塞TCP層的還在真正繞開的是HTTP/3。5.5 HTTPS多出來的那一層是SSL/TLSHTTPS不是新協(xié)議就是HTTP跑在SSL/TLS之上。TLS握手大致過程客戶端發(fā)ClientHello支持的加密套件、隨機(jī)數(shù)服務(wù)器回ServerHello選定套件、自己的證書、隨機(jī)數(shù)客戶端驗(yàn)證證書生成預(yù)主密鑰用服務(wù)器公鑰加密發(fā)給服務(wù)器雙方各自算出會話密鑰之后的應(yīng)用數(shù)據(jù)全部用對稱加密密鑰加密傳輸。為什么要這么設(shè)計(jì)非對稱加密RSA/ECC適合做身份認(rèn)證和密鑰交換但性能差對稱加密AES性能好卻需要共享密鑰。TLS把兩者組合起來用非對稱加密安全地協(xié)商出一個(gè)對稱密鑰后續(xù)通信全用對稱加密。這既是考點(diǎn)也是理解HTTPS性能開銷的關(guān)鍵。6. 考前橫向?qū)Ρ茸钊菀子浕斓男值苤R點(diǎn)清單復(fù)習(xí)到最后階段光按章節(jié)順序過一遍是不夠的。我習(xí)慣把相似概念拉出來做橫向?qū)Ρ茸屗鼈冊谀X子里形成成對出現(xiàn)的反射。下面這些都是歷年選擇題和簡答題的高頻混淆對象。6.1 電路交換、報(bào)文交換與分組交換記住三句話電路交換先建路再通信通信期間獨(dú)占線路實(shí)時(shí)性好但線路利用率低報(bào)文交換存儲轉(zhuǎn)發(fā)整份報(bào)文逐跳轉(zhuǎn)發(fā)無需預(yù)先建路分組交換把報(bào)文拆成小分組可獨(dú)立選路、可在不同路徑并行傳輸延遲更小、利用率高但也帶來亂序和丟包的可能?,F(xiàn)代互聯(lián)網(wǎng)核心是分組交換。電話網(wǎng)是電路交換。分組交換又分?jǐn)?shù)據(jù)報(bào)方式無連接IP就是典型和虛電路方式邏輯上預(yù)先建路幀中繼、ATM用過。6.2 CSMA/CD和CSMA/CA兩者都用于共享信道的隨機(jī)訪問但一個(gè)在以太網(wǎng)有線一個(gè)在WiFi無線。CSMA/CD邊發(fā)邊聽能檢測沖突沖突后重傳CSMA/CA不能邊發(fā)邊聽無線環(huán)境自己發(fā)信號會淹沒接收信號所以采用先預(yù)約后發(fā)送的機(jī)制通過RTS/CTS握手來避免沖突。考試?yán)锟嫉米疃嗟膯栴}是為什么無線不能用CD答案的關(guān)鍵是無線信道的信號衰減和隱藏終端問題——A發(fā)給B時(shí)C可能聽不到A的發(fā)送從而同時(shí)發(fā)送造成沖突而A自己又檢測不到這個(gè)沖突。6.3 分組交換的時(shí)延構(gòu)成算端到端時(shí)延時(shí)總時(shí)延 發(fā)送時(shí)延 傳播時(shí)延 排隊(duì)時(shí)延 處理時(shí)延。很多人只記公式卻不理解物理含義發(fā)送時(shí)延是把數(shù)據(jù)從節(jié)點(diǎn)放到鏈路上的時(shí)間等于數(shù)據(jù)長度/發(fā)送速率傳播時(shí)延是比特在鏈路上跑的時(shí)間等于鏈路長度/傳播速率約2×10?m/s排隊(duì)時(shí)延是路由器緩存中排隊(duì)等待的時(shí)間取決于網(wǎng)絡(luò)擁塞程度。這題有個(gè)慣用陷阱一條長鏈路速率很高問你什么占主導(dǎo)如果鏈路長傳播時(shí)延大如果數(shù)據(jù)量大而帶寬小發(fā)送時(shí)延大。計(jì)算時(shí)別少算、別重復(fù)算尤其是中間經(jīng)過多個(gè)路由器時(shí)每段鏈路的發(fā)送時(shí)延都要累加。6.4 TCP關(guān)鍵字速查表機(jī)制由誰決定控制什么主要字段/參數(shù)流量控制接收方發(fā)送方的發(fā)送速率窗口rwnd擁塞控制發(fā)送方自調(diào)節(jié)發(fā)送速率適應(yīng)網(wǎng)絡(luò)狀態(tài)擁塞窗口cwnd可靠傳輸雙方配合數(shù)據(jù)不丟不重不錯(cuò)序號、確認(rèn)號、重傳計(jì)時(shí)器連接管理雙方配合連接建立/釋放狀態(tài)SYN、FIN、ACK、狀態(tài)機(jī)面試?yán)锶绻屇愫喪鯰CP如何保證可靠從這四個(gè)維度各說一兩句就非常完整了比死背一大段強(qiáng)得多。6.5 常見記憶錨點(diǎn)最后分享幾個(gè)我當(dāng)年自己編的小口訣和聯(lián)想點(diǎn)不一定嚴(yán)密但管用路由協(xié)議RIP找鄰居問路OSPF拿著全網(wǎng)地圖自己算BGP是公司之間談合作TCP標(biāo)志位SYN是發(fā)起ACK是確認(rèn)FIN是告別RST是掀桌子子網(wǎng)劃分先定主機(jī)位再算子網(wǎng)位永遠(yuǎn)別忘減2HTTP狀態(tài)碼2成功、3換地方、4你錯(cuò)了、5我錯(cuò)了擁塞控制階段翻倍叫慢開始勻速叫擁塞避免連續(xù)三個(gè)重復(fù)ACK就快重傳減半之后快恢復(fù)。如果時(shí)間緊張不用貪多。把上面這些橫向?qū)Ρ缺磉^一遍再針對自己最薄弱的子網(wǎng)劃分和擁塞控制算法各練上十幾道題比漫無目的地翻書要管用得多。計(jì)網(wǎng)說到底是一門結(jié)構(gòu)性很強(qiáng)的課框架在腦子里立起來了細(xì)節(jié)怎么填都不會亂。