☰
计网核心知识体系:从TCP握手到IP子网划分,一次捋清原理与排障
2026/10/5 7:21:11 网站建设 项目流程

不少朋友学计网,上来就背七层协议、端口号、报文格式,背完就忘,做题还是错。我当年也这样,直到后来把知识串成体系,才发现计网这玩意儿,理解了根上为什么这么设计,比死记硬背管用得多。这篇笔记我就按自己的复习思路,把计网核心知识点从头到尾捋一遍,重点讲清楚每个机制背后的逻辑,顺带附上实操中会踩的坑。

1. 计网学习的总纲:先懂分层,再懂协议

1.1 为什么一定要分层

计算机网络是一个极其复杂的系统,里面涉及硬件、软件、协议、路由算法和海量设备。如果不做分层,任何两个厂商的设备都没法互联,任何一个功能的升级都得推翻重来。分层的基本思想是:每一层只负责一类特定的功能,用标准接口和相邻层打交道,对上提供服务,对下使用服务。

最经典的分层模型有两套。一套是OSI参考模型,七层,理论完美但落地太复杂;另一套是TCP/IP四层模型,实际用的就是它。对应关系别搞混:OSI的应用层、表示层、会话层,在TCP/IP模型里基本被合并到了应用层;OSI的数据链路层加物理层,对应TCP/IP的网络接口层。

我自己的记忆窍门是抓三层:应用层管数据怎么组织,传输层管端到端的通信靠不靠谱,网络层管数据包怎么选路从一台机器跳到另一台机器。把这三个核心层次搞清楚,整套题就解了一半。

1.2 各层核心职责与典型协议

从下往上过一遍,心里要有张图:

  • 物理层:管比特流的传输,定义电压、线缆、接口、速率。网线、光纤、集线器都是这层的东西。它不关心数据含义,只关心0和1能不能在介质上传过去。
  • 数据链路层:把物理层拿到的比特流组装成帧,加上MAC地址,在局域网范围内做点对点的传输。交换机是这里的主力设备。核心机制包括MAC寻址、差错检测(CRC校验)、CSMA/CD这种介质访问控制协议。
  • 网络层:负责跨网络的数据包寻址和路由选择。核心就是IP地址、路由协议(RIP、OSPF、BGP)、还有ARP、ICMP这些辅助协议。路由器是这层的核心设备。
  • 传输层:负责端到端的通信,也就是从进程到进程。核心协议就两个:TCP和UDP。TCP提供面向连接的可靠传输,UDP提供无连接的不可靠传输。
  • 应用层:面向具体应用,HTTP、HTTPS、FTP、SMTP、DNS、DHCP全是这一层的协议,直接服务于你写代码、玩浏览器、收邮件这些场景。

这五层得背到形成条件反射。面试或者面试官随口问“DNS用的是TCP还是UDP”,如果你不能在下意识间回答出“主要是UDP,但区域传送用TCP”,那就说明底子还不够。

2. 传输层核心:TCP的可靠性到底靠什么撑起来的

2.1 三次握手与四次挥手

TCP是面向连接的,连接怎么建立、怎么断开,这是计网笔试和面试的必考内容。三次握手的流程是:

  • 客户端发SYN报文,seq=x,表示请求建立连接。
  • 服务器回SYN+ACK报文,seq=y,ack=x+1,表示同意建立连接并同步自己的序号。
  • 客户端再回ACK报文,seq=x+1,ack=y+1,连接建立成功。

为什么不能两次握手?原因很简单:TCP要确认双方的收发能力都正常,还要同步初始序号。两次握手只能确认客户端的发送能力和服务端的接收能力,没法确认服务端的发送能力和客户端的接收能力。另外,如果网络里残留了旧的SYN报文,两次握手下,服务器可能稀里糊涂建立一个过期连接,白白占着资源。三次握手能通过序号机制规避这种历史连接问题。

四次挥手的流程是:

  • 主动方发FIN,表示数据发送完毕。
  • 被动方回ACK,表示收到,但被动方可能还有数据要发。
  • 被动方数据发完后,发FIN。
  • 主动方回ACK,然后等待2MSL后关闭。

很多新人不理解为什么挥手要四次,握手只要三次。因为握手时客户端的SYN和服务端的SYN+ACK可以在一个包里合并,而挥手时被动方收到FIN只能先回ACK,至于它还有没有数据要发、什么时候发完,主动权在被动方,所以FIN和ACK被拆开了。

2MSL等待是干嘛的?第一是确保最后一个ACK能被对方收到,如果对方没收到还会重发FIN,主动方可以再回一次ACK。第二是让当前连接里迟到的数据包在网络里自然消失,避免干扰新连接。

2.2 滑动窗口、拥塞控制与可靠传输

TCP的可靠不止体现在握手挥手,更体现在传输过程。可靠传输靠三项机制:校验和、确认应答(ACK)和超时重传。发送方发一个数据段,接收方收回来算校验和,对上了就回ACK,发送方等不到ACK就会重传。

但问题来了:如果发一个等一个,网络利用率就太低了。所以TCP引入了流水线和滑动窗口。简单理解,滑动窗口就是发送方“不等确认就能连续发出去的字节数”。窗口越大,管道越满,吞吐率越高。前提是接收方的接收缓存能兜住,所以TCP头里有个“窗口”字段,接收方可以动态告诉发送方“你现在能发多少”。

流量控制和拥塞控制是两码事,我当年总混。流量控制解决的是“发送方太猛,接收方来不及收”的问题,治的是局部边界;拥塞控制解决的是“网络中间环节(路由器队列)已经塞满丢包”的问题,治的是全局路径。TCP拥塞控制有几个经典阶段:慢启动、拥塞避免、快重传、快恢复。慢启动是每轮RTT指数增长,到慢启动阈值后进拥塞避免线性增长,检测到丢包就把阈值减半。这套机制的核心思想是“渐进试探,遇堵回退”。

2.3 UDP的特点与应用选型

UDP没那么复杂,但它有自己的位置。它无连接、尽最大努力交付、不保证可靠、没有拥塞控制。好处是头部只有8字节,延迟低,处理开销小,而且天然支持广播和多播。

实际工程里什么时候必须用UDP?视频会议、语音通话、直播推流,这些场景对实时性要求极高,偶尔丢一帧不致命,但等TCP重传就会卡得没法用。QUIC协议虽然是基于UDP实现的,但它在用户态实现了可靠传输和拥塞控制,这其实是给UDP“套了个TCP的马甲外加升级了体验”。所以判断选TCP还是UDP,核心逻辑就一条:你更忍受不了丢数据,还是更忍受不了延迟?前者选TCP,后者选UDP。

3. 网络层核心:IP地址、子网划分与路由选路

3.1 地址与子网掩码的计算

IPv4地址是32位二进制,习惯写成点分十进制,比如192.168.1.10。地址由网络号和主机号组成,具体分界靠子网掩码。例如255.255.255.0,前24位是网络位,后8位是主机位,那么这个子网里可用的主机地址是2^8-2=254个。减2是因为网络号全0和广播地址全1不能用。

子网划分是特别容易考的计算题。比如有一个C类网段192.168.10.0/24,现在要划出4个子网,需要从主机位借几位?4个子网需要2^2=4,所以借2位,子网掩码变成/26,也就是255.255.255.192。每个子网的地址范围、网络号、广播地址,必须会算。我给自己的检查流程是:先算出每个子网步长(256-192=64),然后列四个子网:0、64、128、192,对应的可用主机范围就能一目了然。所有这类计算题,落笔前先把校验子网掩码的二进制画出来,比心算稳得多。

3.2 路由技术:网关与动态路由

路由器工作在第三层,核心是查路由表,决定这个数据包下一条该转发给谁。在家庭网络里,你的默认网关就是路由器的一个接口IP。你在电脑上发一个包,如果目标IP和本机不在同一子网,就会把包扔给网关,由网关帮你继续转发。所以配静态IP时,网关地址配错了,什么都上不了网。

动态路由协议分两类:内部网关协议和外部网关协议。RIP用跳数做度量标准,最大15跳,适合小网络;OSPF基于链路状态算法,收敛快,适合中大型企业网;BGP是自治系统之间的路由协议,互联网骨干网靠它跑。前后端可能不太接触这些,但做运维和云网络的人必须懂OSPF和BGP的基本概念,因为云上专线、对等连接都跟这些协议相关。

3.3 ARP、NAT与ICMP

ARP解决的是“已知IP地址,怎么找MAC地址”的问题。主机发送ARP广播请求,目标IP的设备回单播应答,之后双方把映射关系缓存下来。ARP是局域网运作的地基,但也经常成为攻击目标,比如ARP欺骗,所以在交换式网络里通常要做动态ARP检测或绑定。

NAT解决的是IPv4地址不够用的问题。最常用的是NAPT:一个公网IP加不同端口映射多个内网设备。你在家里开电脑访问网站,路由器会把你内网地址从192.168.1.10:12345转换成公网IP:2048,回包再原路转回来。过程建立在连接跟踪表上。这也解释了为什么NAT后面的服务器没法直接被外网访问——因为没做端口映射,外网数据包根本不知道该怎么转进来。

ICMP用来传递控制消息,ping命令用的就是它。但有些所谓“禁ping”的做法其实就是防火墙丢弃了ICMP Echo请求,这不代表主机不通。判断连通不能只靠ping,还要结合TCP握手和业务层面的探测。

4. 数据链路层与物理层:局域网里的交换机到底干嘛

4.1 MAC地址与以太网帧

数据链路层拿到的是上层交给它的IP数据报,然后封装成以太网帧。帧里有目的MAC、源MAC、类型字段和数据,最后还有一个帧校验序列。交换机转发时不看IP,只看目的MAC,查自己的MAC地址表,表里有就单播转发,没有就泛洪广播到除入端口外的所有端口。

MAC地址表是交换机转发效率的核心。所以当运维或者网络工程师说“交换机学表”,指的就是它记住了“哪个MAC从哪个端口进来”。这里有个坑:MAC地址表老化很快(默认300秒左右),如果你把网线拔了插到另一个口,还没来得及学到新位置就往外发流量,有时候第一包会广播找位置,这是正常的,别慌。

4.2 二层交换机 vs 三层交换机 vs 路由器

很多刚入门的朋友分不清交换机和路由器的区别。一句话:交换机工作二层,转发靠MAC地址表;路由器工作三层,转发靠路由表。家用“路由器”其实是多合一的盒子,里面既有路由器功能,又有交换机功能,还有无线AP功能。三层交换机则在硬件层面集成了路由查找能力,大公司园区网内部用三层交换机做VLAN间路由,性能远高于普通路由器,但不能像企业路由器那样灵活配置NAT、策略路由等高级功能。

VLAN是二层隔离的主要手段。把一台交换机切成多个逻辑广播域,不同VLAN之间默认不能直接通信,需要三层设备做网关路由。比如公司里财务网段和办公网段不通,很多人说“没设VLAN”,其实只是没配三层接口和路由,配置完之后各VLAN就能按策略互访了。

5. 应用层实战:HTTP、DNS与CDN

5.1 HTTP协议细节:状态码、请求方法与报文结构

应用层接触最多的就是HTTP。一个HTTP请求包含请求行(方法、URL、版本)、请求头(Host、User-Agent、Accept、Cookie等)、空行和请求体。响应包含状态行(版本、状态码、原因短语)、响应头和响应体。

状态码记成几组就行:2xx表示成功,3xx表示重定向,4xx表示客户端错误,5xx表示服务端错误。面试爱问的和实际排查常用的:301永久重定向、302临时重定向、304协商缓存生效(服务器说“你本地缓存还能用”)、401未认证、403禁止访问、404不存在、429请求太频繁、500服务器内部错误、502网关拿到无效响应、503服务暂时不可用、504网关超时。尤其是502和504,排查方向完全不同,502多半是后端进程崩了或没起来,504才是后端响应太慢或者前面代理配置超时时间太短。

HTTP是无状态协议,所以引入了Cookie让服务端能记住你是谁,Session就是服务端保存的会话数据,SessionID通过Cookie传给浏览器。现在前后端分离的架构里,JWT取代Session的场景越来越多,核心区别就是会话状态存客户端算签名,服务端只需验签,不存状态。

5.2 DNS解析的完整链路

DNS把域名映射成IP。你访问www.example.com,完整解析过程是:先查浏览器缓存,再查系统hosts文件和本地DNS缓存,然后才去问配置的递归服务器。递归服务器先查根域名服务器,获知.com顶级域的地址;再查.com顶级域服务器,获知example.com权威服务器地址;最后查example.com权威服务器,拿到具体IP,并逐级缓存返回给你。

这个过程中关于TCP和UDP的经典问题:标准DNS查询用UDP端口53,因为每个响应通常只一个包,UDP快且开销小。为什么区域传送(从主DNS复制整个区域到从DNS)要用TCP?因为数据量大,需要可靠传输,而且TCP的报文可以承载超过512字节的大量记录。别背错借口,这个面试问题我碰见过两次。

5.3 CDN原理与缓存命中

CDN的本质是“把内容推到离用户更近的地方”。它通过DNS调度,把用户解析到距离最近的CDN边缘节点。节点上有缓存,如果目标资源没缓存,就回源站拉一次,然后缓存下来。所以同样的静态资源,第二次访问一定比第一次快,就是这个道理。

排查询问题的时候脑子要转一下:如果源站更新了图片,CDN却没更新,你会看到旧内容。常规做法是给资源文件加版本号或hash值,比如app.abc123.js,然后上传新版本时文件名变化,CDN自然回源拿新文件。很多新手改了服务器上的文件但忘了刷新CDN,或者忘了给文件换名,排查半天浪费时间。

6. 故障排查与学习心得

6.1 网络不通时按什么顺序排查

我实际排查网络问题,很少直接上抓包。先把问题切成两端:通不通、通得顺不顺。通不通用ping测三层连通性,关注丢包和延迟;Telnet/nc测四层端口通不通;curl测七层服务能不能正常响应。一层层往上测,基本就能定位到是哪层断了。

常见几个场景:

  • 能ping通内网IP,但上不了外网:DNS失效、网关没配、路由器没做NAT出口,三选一。
  • 能上微信但网页打不开:多半是DNS配置异常,或者HTTP代理设置残留。
  • 客户端报连接超时,服务端日志无记录:数据包根本没到路由货服务端,检查安全组、防火墙、NAT映射。
  • 浏览器提示证书错误:证书过期、证书域名不匹配、中间人设备替换了证书。

每一条对应一个典型层级,排查思路就当流水线:先物理/链路,再网络,再传输,再应用。

6.2 抓包分析的两个实用技巧

抓包工具是理解网络协议最好的老师。Wireshark抓包看三次握手、四次挥手,肉眼看到SYN、ACK、FIN,比对着书背十遍都有效。讲几个实测技巧:抓本地回环包需要装Npcap/WinPcap支持,选择Loopback接口;过滤HTTP流量用http.host == "example.com";过滤特定TCP流可以在TCP包上右键“Follow TCP Stream”,把整个交互过程按顺序还原。这个“Follow TCP Stream”是排查问题时最常用的功能,能把乱七八糟的包摊平,按时间顺序看请求和响应。

命令行环境下tcpdump也很好用。比如想确认某个IP是否在频繁发SYN包:

sudo tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0' src 192.168.1.100

抓包时有一个特别值得注意的细节:网卡可能支持TCP分片卸载之类的功能,导致解析结果误导判断。如果你验证TCP校验和或者深入分析传输段的时候发现数据不太对,先看看Wireshark里有没有“TCP checksum offload”的警告。这不是网络有问题,而是抓包的时间点数据还在网卡缓冲区里、校验和由网卡硬件填充,属于正常现象,不代表网络丢包或损坏。

6.3 计网复习刷题的正确姿势

学计网最忌讳的是只看不练,各种参数、状态转换必须凭默写输出才能算过。我复习时给自己定了几个硬性指标:三次握手、四次挥手的状态转换图,能不看笔记画出来;TCP报文头每个字段能背出来并说出作用;A类到C类地址范围、私有网段、回环地址范围能条件反射报出来;常见端口号这种基础东西更是不能错。

端口这个坑很多人踩过:HTTP默认80,HTTPS默认443,SSH是22,DNS是53,DHCP服务端用67、客户端用68,不要跟HTTP的80和HTTPS的443搞混。还有时可能问到某服务占用了8080端口,其实8080是常用的HTTP备选端口,很多公司把内网Web系统部署在上面,端口本身不是固定规则,但你必须知道趋势和为什么会这样选。

刷题的过程里建议配合抓包对照,把书上的报文头字段翻译成Wireshark里的实际展示,比如看到Seq=1 Ack=1,要比写着“序号是1,确认号是1”清楚得多,因为你能看到这个值是怎么随数据流动变化的。抓包看几轮以后再回头看抽象模型,理解会有一个跃升。

我自己觉得这个网络基础,就跟盖楼打地基一样。TCP三次握手、IP子网划分这些知识,过段时间不用可能忘了,但抓包、排障的思路一旦形成,是用不丢的。这套逻辑在后面学K8s网络、云上VPC、微服务调用链时都会反复用到,值得花时间彻底搞通透。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询