这是系列第三篇,也是整个计算机网络基础梳理里信息量最密集的一篇。前两篇我们把计算机网络的整体体系结构、物理层和数据链路层过了一遍,这次进入大部分人既熟悉又陌生的网络层、传输层和应用层——正好对应“浏览器里输入一个网址,按下回车,页面出现”的完整链路。不管你是期末复习对着三次握手头晕,还是准备考研408想搞懂滑动窗口和拥塞控制的计算大题,又或者是面试前被TCP的细节反复折腾,这篇都能帮你把这些知识点串成一条线。我尽量不堆术语,先用生活里的类比把原理讲透,再给可以直接用的排查命令和复习建议。
1. 网络层:数据包该怎么找路
网络层解决的核心问题,用一句话说就是“数据包怎么从源主机到达目的主机”。数据链路层管的是相邻两个节点之间的传输,比如同一根网线、同一个交换机下面的两台电脑;到了网络层,面对的是成千上万个网络互联起来的巨大系统,数据包可能要经过十几个路由器、跨越多张网络才能送到目的地。
这个过程很像快递物流。你在网上下单,快递公司给你的包裹贴上地址面单,这个面单上的地址就是IP地址。包裹从发货地的分拣中心出发,每到一个中转站(路由器),工作人员看一眼面单,决定下一站发往哪个分拣中心,最终送到你手里。整个运输过程中,包裹自己不需要认识路,它只需要知道“下一站去哪”,真正认路的是每个中转站的路由表。
这也是学习网络层最重要的思维转变:不要指望某台设备掌握全网的所有路径信息,只需要让每一跳都做出正确的局部决策即可。下面拆开讲。
1.1 IP地址、子网掩码与CIDR:先学会看懂门牌号
IP地址是网络层给每台设备分配的逻辑门牌号。IPv4地址长32位,为了让人能看懂,通常写成四个十进制数,比如192.168.1.10,每个数字对应8位二进制,取值范围是0到255。
早期IP地址讲究分类编址(Classful Addressing),把地址分成A、B、C、D、E五类。A类地址前8位是网络号,能容纳超大数量的主机,只分配给超大型机构;B类地址前16位是网络号,给中等规模网络;C类地址前24位是网络号,给小型网络。这种划分方式太死板,要么造成巨大的地址浪费,要么不够用。比如一个需要300台主机的单位,B类地址有65534个主机位,浪费严重;C类地址只有254个可用主机位,又不够用。
后来解决办法是CIDR(无类别域间路由,Classless Inter-Domain Routing),它彻底抛弃了固定分类,把IP地址写成“网络前缀/前缀长度”的形式。举一个最常用的例子:192.168.1.0/24。“/24”表示前24位是网络号,后8位是主机号。
子网掩码是配合CIDR使用的一套工具。它的作用就是把IP地址中网络号和主机号切分开。255.255.255.0的二进制是前24位全1、后8位全0,跟IP地址做“按位与”运算,就能得到网络地址。
我直接给一个最常考的计算例子。IP地址192.168.1.130,子网掩码255.255.255.128,问这个地址属于哪个子网、广播地址是多少、可用主机数量是多少。255.255.255.128的二进制是前25位全1,说明这是一个/25的子网。192.168.1.130的二进制最后8位是10000010,跟掩码的128(10000000)做与运算,得到10000000,也就是128,所以网络地址是192.168.1.128。广播地址把主机位全置1,即10111111,也就是191,所以广播地址是192.168.1.191。可用主机数是2的7次方减2,即126个。
实际做网络规划时,我强烈建议别用脑子硬算,先用在线子网计算器快速验证,再自己手动算两三遍,确保流程清楚。面试和考试里手算不能错,这个没有捷径。
1.2 路由表与路由协议:数据包的接力赛
每台路由器内部都维护着一张路由表,路由表的核心字段是“目的网络”和“下一跳地址”。当一个数据包到达路由器,路由器取出目的IP地址,在路由表里查找匹配的目的网络,然后按照对应的下一跳接口把数据包转发出去。如果找不到任何匹配项,就会走默认路由(default route),也就是通常配置的0.0.0.0/0。
路由表里经典的三条路由来源,我常跟朋友这么区分:
- 直连路由:路由器自己接口连着的网段,天生就知道,不用学。
- 静态路由:管理员手动敲命令添加的,适合网络拓扑稳定、规模小的场景。
- 动态路由:路由器之间通过路由协议自动学习到的,适合规模大、拓扑变化频繁的网络。
动态路由协议又分成两大类。内部网关协议(IGP)在同一个自治系统(AS,可以简单理解为一个大型企业或运营商自己管理的网络)内部使用,最常见的是RIP和OSPF。RIP基于距离向量算法,它只告诉邻居“我有多远”,以跳数作为度量值,最大有效跳数是15,所以只能用在很小的网络里。OSPF基于链路状态算法,每台路由器都会收集全网的链路状态信息,然后自己用SPF算法计算最短路径树,收敛速度快,适合中大型企业网。外部网关协议(BGP)用在自治系统与自治系统之间,互联网骨干网层面的路由全靠它,它关心的不是“怎么走最近”,而是“哪条路径经过了哪些AS,符不符合策略”。
这里有个特别多初学者搞混的点:路由协议和路由是两个概念。路由协议是路由器之间交换路由信息的规则,路由则是最终计算出的一张转发决策表,两者是“学习过程”和“学习成果”的关系。
1.3 ARP与ICMP:让数据包能找到下一站
数据包在网络层靠IP地址找路,但真正在物理链路上传输时,以太网帧里装的源地址和目的地址是MAC地址。这里就需要ARP协议来把IP地址解析成MAC地址。
ARP的工作原理像在小区里喊一嗓子。主机A要给同一网段的主机B发数据,先查自己的ARP缓存表,没有B的MAC地址,就向整个局域网广播一个ARP请求:“谁的IP是192.168.1.10,请把你的MAC地址告诉我。”B收到请求后,发现自己的IP匹配,就单播回复一个ARP应答:“我是192.168.1.10,我的MAC地址是aa:bb:cc:dd:ee:ff。”A收到后把这个映射关系缓存起来,下次直接通信,不用再广播。
ICMP则是网络层的“体检工具”。它不负责传输用户数据,而是传递网络的错误信息和诊断信息。最常用的ping命令,底层就是ICMP Echo Request和Echo Reply报文。ping一个目的地,实际上是发送一个ICMP回显请求,如果对方可达,就回复回显应答,同时计算往返时延。
traceroute命令的原理更巧妙。它利用IP头里的TTL字段,TTL每经过一个路由器就减1,减到0时路由器丢弃数据包,同时向源地址发一个ICMP超时报文。traceroute从TTL=1开始发包,第一个路由器回超时报文,源端就记录下第一跳;再发TTL=2的包,记录第二跳,以此类推,最终测出从本机到目标地址经过的所有路由器接口。
这个机制我实际排查网络故障时用过不少次。之前有一个跨城市专线丢包的问题,从公司ping远端服务器丢包率很高,但ping网关和本地上游路由器都正常。用traceroute逐跳测,发现丢包发生在第三跳运营商设备之后,基本就锁定了问题出在中间链路,后面联系运营商排查,果然是传输链路光衰过大。没有这个工具,排查范围会大很多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 传输层:为应用提供端到端的可靠快递
网络层解决的是“数据包怎么走”,但如果把网络层比作整个邮政系统,它只管包裹运输,不管包裹中途会不会损坏、丢失、乱序。传输层就在这一基础上,为运行在不同主机上的应用程序之间提供端到端的通信服务。
也可以换个思路理解:网络层用IP地址把数据送到“这栋楼”,传输层用端口号把数据送到“楼里的这个房间”。一台服务器上同时跑着Web服务(80端口)、SSH服务(22端口)、数据库服务(3306端口),数据包到了服务器网卡之后,传输层要根据端口号判断,这个数据应该交给哪个进程。
2.1 TCP与UDP:一个签收一个丢下就跑
传输层最重要的两个协议是TCP和UDP,它们的定位可以用两种快递方式类比。
TCP像顺丰快递加签收服务。收件人不在家,快递员反复联系;包裹损坏了,重新再送;多个包裹到了,按顺序摆好交到你手里。UDP更像在自己楼下丢个快递柜,放进去了就走了。省事、快,但可能丢件、乱序、甚至收件人根本不知道有包裹。
| 对比项 | TCP | UDP |
|---|---|---|
| 连接状态 | 面向连接,需要建立连接 | 无连接,发完就完 |
| 可靠性 | 可靠传输,确认重传 | 尽力而为,可能丢包 |
| 数据顺序 | 保证有序交付 | 不保证顺序 |
| 流量控制 | 支持滑动窗口 | 不支持 |
| 拥塞控制 | 支持慢启动等机制 | 不支持 |
| 首部开销 | 最少20字节 | 固定8字节 |
| 典型应用 | HTTP、FTP、SMTP、SSH | DNS、视频直播、VoIP、游戏 |
注意一下TCP首部“最少20字节”这个表述,因为TCP首部有可选项,最大可以到60字节。UDP首部固定8字节,就只有源端口、目的端口、长度、校验和四个字段。
做实际技术选型时,判断标准别只盯着“可靠”两个字。比如视频直播场景,一帧画面丢了就丢了,下帧马上来,用户感知不明显,但TCP遇到丢包会重传,反而导致延迟飙升、画面卡顿。所以视频通话、实时游戏往往选UDP,宁可丢一些数据,也要保证低延迟。而文件传输、网页请求、支付交易这种数据完整性优先的场景,必须用TCP。
2.2 TCP三次握手与四次挥手:面试高频题,别背错序号
TCP建立连接的过程叫三次握手,拆连接的过程叫四次挥手。这块几乎是所有计算机网络考试和面试的必考内容,关键是理解每一条报文为什么存在。
三次握手的过程:
- 客户端发送SYN报文,初始序号seq=x,进入SYN_SENT状态。
- 服务端收到SYN,回复SYN+ACK报文,它的序号seq=y,同时对客户端的SYN进行确认,确认号ack=x+1,进入SYN_RCVD状态。
- 客户端收到SYN+ACK,回复ACK报文,确认号ack=y+1,进入ESTABLISHED状态。服务端收到这个ACK后,也进入ESTABLISHED状态。
为什么不能只握手两次?举个例子:客户端发了一个SYN包,网络拥堵导致它超时没收到回复,客户端重发SYN包,这次正常完成连接,发送完数据后正常关闭。此时前一个“迟到”的SYN包又到达服务端。如果只握手两次,服务端看到SYN就认为连接建立成功,会白白维护一个空连接等待客户端发数据,浪费资源。而三次握手中,迟到的SYN包已经被客户端确认过了,服务端发出的SYN+ACK不会收到对应的ACK回复,自然就不会建立该连接。
四次挥手的过程:
- 主动关闭方发送FIN报文,表示数据发送完毕,进入FIN_WAIT_1状态。
- 被动关闭方收到FIN,回复ACK,表示知道对方要关闭了,进入CLOSE_WAIT状态。此时被动关闭方可能还有数据要发,所以不会立刻发FIN。
- 被动关闭方把剩余数据发完后,发送FIN报文,进入LAST_ACK状态。
- 主动关闭方收到FIN,回复ACK,进入TIME_WAIT状态,等待2MSL后才能完全关闭。
为什么挥手要四次?因为TCP连接是全双工的,两个方向上的数据流要分别关闭。主动关闭方说“我不发了”,只是关闭了从主动方到被动方的数据通道;被动方仍然可以向主动方发送数据,等它数据发完了,再关闭反向通道。所以至少需要两条FIN报文和对应的ACK报文,合起来就是四次交互。
TIME_WAIT的作用很多人理解不到位。它主要有两个目的:一是确保主动关闭方最后发出的ACK能够到达对方,如果这个ACK丢了,被动方会超时重发FIN,主动方可以重新确认;二是让旧连接里的迟到报文在网络中自然消失,避免它们干扰后续使用相同端口的新连接。为什么是2MSL,是因为MSL(Maximum Segment Lifetime)是一个报文在网络中存活的最大时间,一来一回正好2MSL,确保双向的报文都消亡了。
2.3 流量控制与拥塞控制:TCP的交通管控
TCP可靠传输里最容易被忽略、也最常考的是两个“窗口”。流量控制是接收方告诉发送方“你慢点,我处理不过来”;拥塞控制是发送方根据网络状况自动调整“我送快还是送慢”。
流量控制靠的是TCP首部里的“窗口”字段,单位是字节,表示接收方当前还有多少接收缓冲区空间。发送方发送的数据总量不能超过这个窗口值。比如接收方窗口是3000字节,发送方已发2000字节但还没收到确认,那么最多只能再发1000字节。
拥塞控制包含四个核心算法:
- 慢启动:连接刚建立时,拥塞窗口cwnd从1个报文段开始,每收到一个确认,cwnd翻倍,指数增长。这看起来跟“很慢”相反,实际是“从很小开始,快速增长试探”。
- 拥塞避免:cwnd增长到慢启动阈值ssthresh后,不再指数增长,而是每个往返时间RTT只增加1个报文段,线性增长,避免一下撞爆网络。
- 快重传:发送方连续收到3个重复ACK,立即重传丢失的报文段,不必等超时。
- 快恢复:发生快重传时,把ssthresh减半,cwnd设置为ssthresh,然后执行拥塞避免算法。
拥塞控制的本质是“试探网络容量的上限”。就像开车上高速,没有限速牌时,先平稳加速,感觉不堵再继续提速,一旦前面刹车灯一片或者撞到了拥堵,就立刻减速,然后重新慢慢试探。
我遇到过挺多人在学习时把流量控制和拥塞控制搞混。简单记一句话:流量控制的窗口是接收方给的,拥塞控制的窗口是发送方自己调的,最终发送方的实际发送窗口是两者的最小值。
3. 应用层:浏览器按下回车之后
网络层和传输层解决的是“把数据送到哪、怎么可靠送”。应用层则是跟用户和应用程序打交道的那一层,HTTP、DNS、DHCP、FTP、SMTP这些协议都归它管。把前面几节内容串起来最好的方式,就是完整走一遍“在浏览器输入网址、按下回车”后发生了什么。
第一步,浏览器把用户输入的域名通过DNS解析成IP地址,同时建立TCP连接,通常目的端口是80(HTTP)或443(HTTPS)。TCP三次握手完成后,浏览器发送HTTP请求报文,服务器返回HTTP响应报文,渲染页面。整个过程中,数据包在IP层被分片和路由,在数据链路层封装成帧,经过交换机、路由器最终到达目标服务器。
3.1 DNS解析:全世界都在查的电话本
DNS(域名系统)把人类容易记的域名翻译成机器能用的IP地址。它本质上是一个分布式的电话本系统,全球有大量的DNS服务器组成层级结构。
完整的解析流程通常包含递归查询和迭代查询两个阶段。以访问www.example.com为例:
- 浏览器先查自己的DNS缓存,没有就查操作系统的hosts文件和系统DNS缓存。
- 如果还没有,发起一个DNS查询请求给本地配置的DNS服务器(比如运营商DNS或公共DNS),这一步叫递归查询——本地DNS服务器要负责把最终结果找回来。
- 本地DNS服务器如果没有缓存,开始迭代查询。它先问根域名服务器“www.example.com的IP是多少”,根服务器不直接给出答案,而是告诉它“你去问.com顶级域名服务器”。
- 本地DNS服务器再去问.com顶级域名服务器,对方说“你去问example.com的权威域名服务器”。
- 本地DNS服务器最后问example.com的权威域名服务器,拿到对应的IP地址,然后把结果返回给浏览器,同时缓存在本地。
DNS服务平时看不见摸不着,一旦出问题,表现非常诡异。网页打不开但微信能发、手机连上WiFi但能上网却刷不出网页、或者ping域名不通但ping IP通,十有八九是DNS解析出了问题。
排查DNS问题,先看自己的DNS服务器配置对不对,再配合nslookup或dig命令测试域名解析是否正常。Windows用nslookup,Linux和macOS用dig更顺手。
3.2 HTTP/HTTPS:每天都在用却没细看过的协议
HTTP是Web世界的通用语言。它的请求报文由请求行、请求头、空行、请求体四部分组成。请求行里包含请求方法、URL、HTTP版本。响应报文由状态行、响应头、空行、响应体组成。状态行里的状态码是必考内容,我整理了一份速查表:
| 状态码 | 含义 | 典型场景 |
|---|---|---|
| 200 | OK,请求成功 | 正常浏览网页 |
| 301 | 永久重定向 | 网站换域名,旧地址跳新地址 |
| 302 | 临时重定向 | 未登录时跳转登录页 |
| 304 | Not Modified,未修改 | 浏览器缓存生效,服务器不返回页面体 |
| 403 | Forbidden,禁止访问 | 没有权限访问该资源 |
| 404 | Not Found,页面不存在 | URL地址写错 |
| 500 | Internal Server Error,服务器内部错误 | 后端代码异常 |
| 502 | Bad Gateway,网关错误 | 反向代理后面的后端服务挂了 |
| 503 | Service Unavailable,服务不可用 | 服务器过载或维护中 |
HTTP协议本身是明文传输,抓包工具可以一览无余看到请求内容,密码、cookie这些敏感数据直接暴露。HTTPS就是在HTTP和TCP之间加了一层TLS/SSL加密层。它的核心思想是混合加密:用非对称加密协商出对称加密的会话密钥,之后的数据都用对称加密传输。
HTTPS握手流程简化后是这样的:
- 客户端向服务器发起HTTPS连接,带上支持的加密套件列表。
- 服务器返回自己的数字证书,证书里有服务器公钥。
- 客户端验证证书的合法性(由谁签发、是否在有效期、域名是否匹配),验证通过后生成一个随机数,用服务器公钥加密发送给服务器。
- 服务器用私钥解密得到随机数,双方用这个随机数生成对称加密的会话密钥。
- 之后所有通信都用会话密钥加密。
实际运维中,用openssl命令可以快速查看一个域名的证书信息,排查证书过期、证书链不完整的问题。比如 openssl s_client -connect www.example.com:443 -servername www.example.com 就能看到证书有效期和签发链。
3.3 DHCP:设备怎么自动领号
在一台新设备接入网络时,没人手动给它设置IP地址、子网掩码、网关和DNS,它却拿到了这些参数,能直接上网,靠的就是DHCP协议。
DHCP(动态主机配置协议)交互过程分四步:
- DHCP Discover:客户端向局域网广播,询问“有没有DHCP服务器,我需要一个IP地址”。
- DHCP Offer:DHCP服务器在地址池里挑一个空闲IP,单播或广播给客户端,“这个IP给你用,还有子网掩码、网关、DNS也一并给你”。
- DHCP Request:客户端选择第一个收到的Offer,再次广播“我接受这个地址”,告诉所有DHCP服务器自己选定了哪一台。
- DHCP ACK:被选中的服务器确认分配,同时把租约时间告诉客户端。
这四步里有个细节值得注意:第一步客户端还没有IP,所以源IP是0.0.0.0;它也不知道DHCP服务器在哪,所以目的IP是广播地址255.255.255.255。等到第四步确认后,客户端才真正拿到IP地址并开始使用。
实际维护中,DHCP最常见的故障是IP地址冲突。表现是客户端能获取到IP,但时断时续,或者直接提示“网络上有重名”。排查方法一般是看局域网里有没有人手工配置了跟地址池重合的静态IP,或者在交换机上查DHCP Snooping(一种交换机安全功能,可以限定只有信任端口能发送DHCP响应,防止私自接路由器或伪造DHCP服务器)。
4. 高频易错点与排查实战
很多人在学计算机网络时都有这种体验:看书觉得自己都会了,做题就错,排查故障更是一脸懵。这很正常,因为知识点是零散塞进脑子里的,没有通过实战串起来。这一节把最常见的丢分点和实战排查起手式都过一遍。
4.1 期末、408、面试里最容易丢分的几个点
第一个容易混淆的是“分组”和“分片”。IP层接收到传输层的数据后,如果超过MTU(最大传输单元),会进行分片,分片后的每个片都是一个独立的IP报文,到目的主机后再重新组装。这是IP层的分片。而分组,是指数据在分组交换网络中的基本传输单位,是一个更广义的概念。两者不在同一个语境下,千万别混着用。
第二个容易出错的是三次握手里的序号计算。考试里经常给一个场景:客户端发送SYN报文seq=100,问服务端回复的确认号是多少。答案不是100,而是101,因为SYN报文要消耗一个序号。同理,FIN报文也要消耗一个序号。只有纯ACK报文不消耗序号。
第三个是子网掩码计算,这个没有技巧,就是要多练。注意几个坑:网络地址是主机位全0,广播地址是主机位全1,可用主机地址要减掉这两个;计算可用主机数量时,公式是2的n次方减2,n是主机位数。
第四个是CSMA/CD和CSMA/CA的区别。CSMA/CD用于有线以太网,工作方式是“先听后发,边发边听,冲突停止,随机重发”,它假设发送时能检测到冲突。CSMA/CA用于无线局域网(WiFi),因为无线环境里发送端很难同时检测冲突,所以采用“先听后发,发完等确认”的碰撞避免机制。
第五个坑是MAC地址和IP地址的角色。IP地址是逻辑地址,负责跨网络寻址,会随设备移动到不同网络而改变;MAC地址是物理地址,烧录在网卡里,负责局域网内部寻址。拿着这两个地址做题时,记住一句:数据包每经过一个路由器,源和目的IP地址不变,但源和目的MAC地址每跳都会改变。
4.2 网络排查起步:先学会五条命令
我当年刚进公司做网络支撑时,带我的前辈说:遇到网络问题,先按顺序跑这五条命令,能解决一半问题。这几条命令至今还是我的排查起手式。
第一条,查看本机网络信息,Windows用ipconfig /all,Linux用ifconfig或ip addr。看什么?IP地址、子网掩码、默认网关、DNS服务器是否正常。很多问题的根源就是这些基础配置不对,获取的IP长了一副169.254.x.x的样子,说明DHCP没成功。
第二条,ping网关,ping 192.168.1.1。能通,说明本机到网关这一段链路正常;不通,问题出在二层链路,查网线、交换机端口、VLAN配置。
第三条,ping外网IP,比如ping 223.5.5.5(阿里公共DNS)。网关能通,外网IP不通,说明问题出在路由或上游链路。
第四条,测试DNS解析,Windows用nslookup www.example.com,Linux推荐dig www.example.com。看返回的IP是不是预期的,解析超时或报错就要换DNS服务器。
第五条,跟踪路由,Windows用tracert -d 223.5.5.5,Linux和macOS用traceroute -n 223.5.5.5,-d或-n参数是关闭反向域名解析,速度会快很多。逐跳看哪一跳出现* * *或延迟飙升,问题就定位在那一跳附近。
另外查端口状态用netstat -ano(Windows)或netstat -tunlp(Linux),可以快速找出某个端口是被哪个进程占用的。有一回排查生产环境服务起不来,查日志发现端口被占用,netstat -tunlp | grep 8080一看,果然有个残留的java进程没杀掉,kill掉再重启就好了。
4.3 资料选择与避坑心得
计算机网络的学习资料多到让人选择困难,但真正值得反复刷的其实就那么几套。谢希仁《计算机网络》是国内教材里体系最完整的一本,适合系统性扫盲和期末复习,书里每个概念都有出处,尤其适合建立整体框架。考研408党需要用王道考研的系列辅导书配合真题训练,王道的选择题解析和知识点总结非常适合应试。
网上比较热的“湖科大教书匠”课程,整理得很细致,动画演示把抽象概念具象化了,特别适合看教材看不进去的人。针对“湖科大教书匠计算机网络适合考408吗”这个问题,我的建议是:适合作为第一轮的视频学习补充,但不适合代替教材和真题。因为考研408的计算机网络部分,光看视频很容易产生“都听懂了”的错觉,一做题就露馅。看完视频,一定要回到教材里把对应章节的课后题做了,再上王道和历年真题。
我自己的避坑心得就一句话:别只看书,要动手抓包。Wireshark可以抓取真实的网络流量,自己开一个网页,抓一次HTTP请求和响应,亲眼看看TCP三次握手的SYN、SYN+ACK、ACK三条报文长什么样,比背十遍描述都管用。国内还有一款叫科来网络分析系统的工具,界面更友好,适合初学者入门抓包分析。
5. 针对不同目标的复习路线建议
同样是学计算机网络,期末考、考研408和面试考察的侧重点是不一样的。如果时间有限,别平均用力,把精力花在最能拉开分差的地方。
5.1 期末速成路线
期末考的重点往往在协议细节和计算题上。优先级最高的是:TCP三次握手与四次挥手的过程、TCP和UDP对比、子网掩码和CIDR计算、滑动窗口相关的流量控制计算、CSMA/CD的最小帧长计算、HTTP常见状态码。
复习的时候,一个很高效的策略是画图。把TCP连接建立和释放的过程画成时序图,把IP分组的转发过程画成网络拓扑图,把子网划分画成二进制位图。画图的过程就是理清逻辑的过程,比单纯看书记忆深得多。
5.2 考研408拿分路线
408的计算机网络部分占25分,题型相对固定。选择题重点在概念辨析和协议机制,大题重点在路由聚合计算、滑动窗口的发送窗口计算、CSMA/CD最短帧长算最小帧长和冲突检测、以及拥塞控制的状态变迁。
我的复习建议是把王道单科书过两遍。第一遍跟着课程视频做笔记,重点搞懂每个协议的设计原因;第二遍只看目录,自己回忆每章的知识点,回忆不起来的地方重新翻书。考前一两个月,把近十年真题做三遍以上,做到看到题目就知道出题人想考什么的程度。
5.3 面试实战路线
面试不会问“列举TCP的首部字段”,而是问场景题。比如“客户端大量出现TIME_WAIT怎么办”“TCP连接建立失败可能是什么原因”“从输入URL到页面展示,经历了什么”“HTTPS为什么安全”。
回答这类问题,光背八股是不够的,要把知识点讲成一条完整的链路,同时能说出排查思路。拿“从输入URL到页面展示”来说,标准答案链路是:DNS解析、建立TCP连接、发送HTTP请求、服务器处理并返回HTTP响应、浏览器解析渲染、释放连接。但能拿高分的回答会补充每个阶段的细节,比如DNS查询的递归迭代过程、TCP三次握手的作用、HTTPS的TLS握手、HTTP缓存命中的判断,这些细节才能体现你真的理解,而不是背过答案。
如果你准备面试,建议对着手机录音自己讲一遍这个过程,听回放就能发现哪些地方讲不通,那就是还没吃透的点。
这篇涉及的内容其实足够单独拆出好几篇来写,但作为系列收尾,我特意把网络层到应用层浓缩在一起,做成一条完整的知识链路。我个人始终认为,计算机网络是最适合“用图来学”的科目,比文字描述直观太多。你在纸上亲手画一遍TCP的状态变迁、画一条数据包经过路由器时MAC地址和IP地址的变化,比盯着PPT看十遍都顶用。如果你是赶在期末考试前刷到这篇,建议把三次握手和子网划分计算练熟;如果你在准备408或者面试,那重点把拥塞控制的状态机和HTTPS握手吃透。剩下的,就是在真实网络环境里多碰碰钉子,踩过坑的知识才真正变成你自己的。
