news 2026/9/9 19:37:44

一张图看懂计算机网络协议:从分层模型到排查实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一张图看懂计算机网络协议:从分层模型到排查实战

很多朋友在学网络知识时,最头疼的不是某一个协议有多难,而是协议数量太多,不知道它们各自属于哪一层,也不知道报文格式长什么样,更不清楚出了问题该用什么命令去排查。

本文整理了一张相对完整的“计算机网络协议地图”,从上到下覆盖数据链路层、网络层、传输层和应用层,把每层的主要协议、报文格式、核心功能以及对应的排查命令串成一条线。建议先收藏,再花 20 分钟通读一遍,之后无论是应付面试、做网络实验,还是排查线上连通性问题,都可以直接回到这篇文章里查。

1. 为什么需要一张“协议地图”

1.1 计算机通信的复杂性

两台设备要完成一次通信,其实非常复杂。比如你用浏览器访问一个网站,背后至少包含:

  • 把域名解析成 IP 地址。
  • 建立 TCP 连接。
  • 发送 HTTP 请求。
  • 经过路由器逐跳转发。
  • 最终把数据交给目标服务器的应用进程。

如果所有逻辑都写在一个协议里,这个协议会非常臃肿,而且很难扩展。所以计算机网络采用了分层的设计思路,每一层专注解决一类问题,层与层之间通过标准接口协作。

1.2 分层模型:OSI 与 TCP/IP

说到分层,最经典的是 OSI 七层模型,但实际互联网采用的是 TCP/IP 四层模型。两者对应关系如下:

OSI 七层模型TCP/IP 四层模型典型协议示例
应用层应用层HTTP、HTTPS、DNS、FTP、SMTP、SSH
表示层应用层TLS/SSL(加密与数据完整性)
会话层应用层RPC、会话管理
传输层传输层TCP、UDP
网络层网络层IP、ICMP、OSPF、BGP
数据链路层数据链路层以太网、ARP、VLAN
物理层数据链路层网线、光纤、Wi-Fi 物理信号

学习时不必纠结 OSI 的表示层和会话层,TCP/IP 模型已经把它们合并进应用层。重点要掌握的是:从上往下,数据一层层封装;从下往上,数据一层层解封装。

1.3 数据封装与解封装

一个 HTTP 请求从应用层出发,会经历这样的过程:

  1. 应用层生成 HTTP 报文。
  2. 传输层添加 TCP 头,形成 TCP 报文段。
  3. 网络层添加 IP 头,形成 IP 数据报。
  4. 数据链路层添加以太网帧头和帧尾,形成数据帧。
  5. 物理层把数据帧转换为比特流,通过介质传输。

接收方则反向操作,逐层去掉头部,最终把 HTTP 报文交给应用程序。

这个过程称为封装与解封装。理解它之后,再看每一层的报文格式,就不会感到孤立。

2. 数据链路层:数据帧的起点

2.1 链路层的作用

数据链路层解决的是“同一段物理链路内,设备之间如何传输数据单元”的问题。它把网络层交下来的 IP 数据报封装成帧,在相邻节点之间传输,同时负责差错检测。

链路层的核心包括:

  • 帧的封装与拆封。
  • MAC 地址寻址。
  • 差错检测(帧校验)。
  • 介质访问控制(如以太网的 CSMA/CD 和无线网络的 CSMA/CA)。

2.2 以太网帧格式

以太网是使用最广泛的链路层技术。标准的以太网帧格式如下:

字段长度(字节)说明
目的 MAC 地址6接收方网卡的物理地址
源 MAC 地址6发送方网卡的物理地址
类型/长度20x0800 表示上层为 IPv4,0x86DD 表示 IPv6
数据46-1500上层协议数据单元(如 IP 数据报)
帧校验序列4CRC 校验结果,用于差错检测

MAC 地址是网卡出厂时烧录的物理地址,全球唯一(从厂商角度说可保证唯一性)。它只在同一链路内有意义,跨网络转发时,帧头会被不断替换。

2.3 ARP 协议与 MAC 地址解析

ARP(Address Resolution Protocol,地址解析协议)用于根据 IP 地址获取同一链路内的 MAC 地址。

假设主机 A 知道目标主机 B 的 IP 是 192.168.1.10,但不知道 B 的 MAC 地址,A 会广播一个 ARP 请求:“谁是 192.168.1.10,请告诉我你的 MAC 地址。”B 收到后回复单播 ARP 响应,A 将结果写入本机 ARP 缓存。

在命令行执行arp -a可以查看本机 ARP 缓存表:

arp -a

输出类似:

接口: 192.168.1.100 --- 0x9 Internet 地址 物理地址 类型 192.168.1.1 a4-2b-b0-xx-xx-xx 动态 192.168.1.10 68-9e-xx-xx-xx-xx 动态

这里192.168.1.1通常是网关 IP,对应的是网关设备的 MAC 地址。注意,即使目标服务器在公网,报文要发送出去,也必须先找到下一跳网关的 MAC 地址。

2.4 链路层常用命令

Windows 与 Linux 下查看链路层信息的命令略有差别,但最常用的是:

# Windows 查看网卡信息,包含 MAC 地址和 IP 地址 ipconfig /all # Linux 查看网卡信息 ip link show # 查看 ARP 缓存 arp -a # 清除 ARP 缓存(需要管理员权限) arp -d *

如果同一局域网内两台主机 ping 不通,第一步就应该检查 IP 是否在同一网段,第二步检查 ARP 是否能解析到对端 MAC。

3. 网络层:跨网络的路径规划

3.1 网络层的作用

网络层解决的是“数据如何从源网络到达目的网络”的问题。它不关心具体哪台主机,而是通过 IP 地址标识主机所在的位置,并通过路由协议选择最佳路径。

网络层的核心功能:

  • IP 地址编址与子网划分。
  • 路由选择。
  • 分组转发。
  • 拥塞控制(辅助性)。

3.2 IPv4 报文格式

IPv4 是当前使用最广泛的网络层协议。它的报文格式需要重点掌握:

字段长度(位)说明
版本4固定为 4,表示 IPv4
首部长度4IP 首部长度,单位是 4 字节
服务类型8区分优先级、延迟、吞吐量等
总长度16IP 数据报总长度,单位是字节
标识16分片时用于重组
标志3是否允许分片、是否还有分片
片偏移13分片在原报文中的偏移位置
生存时间 TTL8每经过一个路由器减 1,为 0 时丢弃
协议8上层协议类型,6=TCP,17=UDP,1=ICMP
首部校验和16只校验 IP 首部
源 IP 地址32发送方 IP
目的 IP 地址32接收方 IP

TTL 字段非常关键。它防止数据报在网络中无限循环。执行 ping 时,TTL 还能帮我们初步判断目标主机的操作系统类型,例如 Windows 默认 TTL 通常是 128,Linux 通常是 64。

3.3 IPv6 与 ICMP

IPv6 是为解决 IPv4 地址枯竭而设计的下一代协议,地址长度为 128 位,不再需要 NAT 也能实现全球唯一寻址。IPv6 报文头比 IPv4 更简洁,固定为 40 字节,并且取消了首部校验和,减轻了路由器处理压力。

ICMP(Internet Control Message Protocol,互联网控制报文协议)是网络层的辅助协议,用于传递差错信息和控制信息。比如:

  • 目标不可达。
  • 超时。
  • 重定向。
  • Echo 请求与应答(ping 命令的基础)。

ping 命令实际发送的就是 ICMP Echo Request,收到 ICMP Echo Reply 就说明目标可达。

3.4 路由协议与常用命令

路由协议按工作范围分为:

  • 内部网关协议:RIP、OSPF、IS-IS。
  • 外部网关协议:BGP。

它们本质上是在路由器之间交换路由信息,帮助路由器构建路由表。实际排错时,我们更关注的是本机路由表和连通性命令:

# Windows 查看路由表 route print # Linux 查看路由表 ip route show # ping 测试连通性 ping -c 4 www.baidu.com # 跟踪路由路径,确认经过哪些中间节点 tracert www.baidu.com # Windows traceroute www.baidu.com # Linux

如果ping通但业务访问失败,问题可能不在网络层,而在传输层或应用层。

4. 传输层:端到端的可靠与高效

4.1 传输层的作用

传输层是网络通信中承上启下的关键一层。它负责端口寻址、分段重组、连接管理和可靠传输,为上层应用提供端到端的通信服务。

传输层最核心的两个协议是 TCP 和 UDP。

特性TCPUDP
连接状态面向连接无连接
可靠性可靠传输尽最大努力交付
传输效率较低较高
数据边界字节流,无边界数据报,有边界
典型应用HTTP、FTP、SMTPDNS、视频通话、游戏

4.2 TCP 报文段格式

TCP 报文段格式是面试和排错中绕不开的重点:

字段长度(位)说明
源端口16发送方端口号
目的端口16接收方端口号
序号32本报文段数据首字节的序号
确认号32期望收到对方下一个字节的序号
数据偏移4TCP 首部长度
保留6保留字段
标志位6URG、ACK、PSH、RST、SYN、FIN
窗口16接收窗口大小,用于流量控制
校验和16覆盖首部和数据的校验值
紧急指针16配合 URG 使用

六个标志位是最常见的考点:

  • SYN:同步序号,用于建立连接。
  • ACK:确认应答。
  • FIN:释放连接。
  • RST:重置连接。
  • PSH:立即上交应用层。
  • URG:紧急数据。

4.3 三次握手与四次挥手

TCP 建立连接通过三次握手完成,目的是让双方都确认自己和对方的收发能力正常。

三次握手过程:

  1. 客户端发送 SYN=1,Seq=x。
  2. 服务端回复 SYN=1,ACK=1,Seq=y,Ack=x+1。
  3. 客户端发送 ACK=1,Seq=x+1,Ack=y+1。

连接建立后,双方进入数据传送阶段。断开连接时使用四次挥手,因为 TCP 是全双工通信,每一方都需要单独关闭发送通道。

四次挥手过程:

  1. 主动方发送 FIN=1,Seq=u。
  2. 被动方回复 ACK=1,Ack=u+1。
  3. 被动方发送 FIN=1,Seq=w。
  4. 主动方回复 ACK=1,Ack=w+1。

排错时观察 TCP 状态很有用,常用的状态有 LISTEN、SYN_SENT、ESTABLISHED、TIME_WAIT、CLOSE_WAIT。比如大量 CLOSE_WAIT 连接堆积,通常说明服务端代码没有正确关闭 Socket。

4.4 UDP 数据报格式

UDP 首部非常简单,只有 8 字节:

字段长度(位)说明
源端口16可选,无用时为 0
目的端口16目标端口
长度16UDP 数据报总长度
校验和16可选校验

优点是开销小、实时性好,适合 DNS 查询、RTP 音视频流、在线游戏等场景。但它不保证数据一定到达,也不保证到达顺序,所以上层应用需要自己做容错处理。

4.5 TLS 安全传输层:TCP 之上的一层安全能力

TLS(Transport Layer Security)常被称为安全传输层协议,但它不是替代 TCP 的传输层协议,而是位于应用层与传输层之间,用于在两个通信应用程序之间提供保密性和数据完整性。HTTPS 实际上就是 HTTP over TLS。

TLS 要解决三个问题:

  • 机密性:使用对称加密加密业务数据。
  • 完整性:使用 MAC 或 HMAC 校验数据是否被篡改。
  • 身份认证:使用数字证书确认服务器身份。

一次简化的 TLS 握手流程如下:

  1. 客户端发送 ClientHello,包含支持的 TLS 版本、加密套件列表和随机数。
  2. 服务端回复 ServerHello,选定加密套件和协议版本,并发送证书。
  3. 客户端验证证书合法性,生成预主密钥,用服务器公钥加密后发送。
  4. 双方根据预主密钥生成会话密钥,后续通信全部加密。

现在的线上业务基本都要求全站 HTTPS。如果开发中用抓包工具查看 HTTP 明文流量没问题,但浏览器地址栏没有小锁,就要检查证书链是否完整、域名是否匹配、TLS 版本是否过旧。

5. 应用层:面向用户的服务协议

5.1 应用层的作用

应用层离用户最近,定义了应用程序之间通信的数据格式和交互规则。我们平时说的“接口开发”“API 对接”,本质上是基于某种应用层协议的数据约定。

应用层协议种类非常多,下面挑几个最常用的展开。

5.2 DNS 域名解析

DNS(Domain Name System,域名系统)负责把人类易记的域名转换成机器可读的 IP 地址。

常见的 DNS 记录类型:

类型说明
A域名指向 IPv4 地址
AAAA域名指向 IPv6 地址
CNAME域名别名,指向另一个域名
MX邮件交换记录
NS指定域名服务器
TXT任意文本记录,常用于域名验证

常用的 DNS 排查命令:

# 查询 A 记录 nslookup www.baidu.com # 查询 AAAA 记录 nslookup -type=AAAA www.baidu.com # Linux 下也可以使用 dig dig www.baidu.com

如果浏览器提示“无法解析服务器的 DNS 地址”,可以先检查本机 DNS 配置,再尝试更换公共 DNS。

5.3 HTTP/HTTPS 协议

HTTP 是 Web 世界的基础协议,基于请求-响应模型。一个 HTTP 请求包含请求行、请求头和请求体,响应则包含状态行、响应头和响应体。

HTTP 状态码要理解语义:

状态码含义典型场景
200请求成功页面正常返回
301永久重定向HTTP 跳转 HTTPS
302临时重定向登录后跳转
404资源不存在路径写错
500服务器内部错误后端代码异常
502网关错误Nginx 后无可用服务
504网关超时接口响应超时

常用的 HTTP 调试命令是 curl:

# 查看响应头 curl -I https://www.baidu.com # 查看完整请求与响应 curl -v https://www.baidu.com # 指定请求方法并传递 JSON curl -X POST https://api.example.com/login \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"123456"}'

5.4 文件与邮件协议

FTP 用于文件传输,使用 20 端口传数据、21 端口传控制命令。不过因为明文传输,现在很多场景已经改用 SFTP。

邮件相关协议:

  • SMTP:发送邮件,25 端口。
  • POP3:收取邮件,110 端口。
  • IMAP:同步邮件,143 端口。

如果做应用层开发,邮件系统通常用 SMTP 发送、IMAP 同步,很少再用 POP3。

5.5 DHCP 与 SSH

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)自动分配 IP 地址、子网掩码、网关和 DNS。新设备接入局域网后,先广播 DHCP Discover,再由 DHCP 服务器提供配置。

SSH 是远程登录的事实标准,默认端口 22,使用非对称加密完成认证和会话密钥协商。日常开发中,通过 SSH 登录服务器执行命令是最常见的操作。

在嵌入式、车载通信、工业控制等“应用层开发”场景中,协议的分层思想同样适用。比如车辆 EMB 制动系统开发中,CAN/LIN 等总线负责底层信号传输,应用层则负责把信号解析成具体的制动请求和执行反馈。无论底层介质怎么变,上层协议的设计仍然遵循分层、封装、可靠性与实时性权衡的思路。

6. 协议排查实战:从应用层下钻到链路层

6.1 一次完整的 HTTP 访问流程

假设你的电脑要访问https://www.example.com,数据包要经历的完整过程是:

  1. 应用层:浏览器发起 HTTPS 请求,完成 DNS 解析得到 IP。
  2. 传输层:与目标服务器建立 TCP 连接,随后完成 TLS 握手。
  3. 网络层:封装 IP 头,查询路由表找到下一跳地址。
  4. 数据链路层:通过 ARP 获取下一跳 MAC 地址,封装帧头。
  5. 物理层:转换为比特流发送出去。

返回数据时,服务器端同样逐层封装,最终浏览器渲染页面。

6.2 常用网络命令组合

排查网络问题,建议按从下到上的顺序执行命令:

排查目标命令说明
网卡是否正常ipconfig /allip link确认 IP、掩码、网关
局域网是否连通ping 网关IP确认链路层和网络层正常
公网是否连通ping 公网IP排除 DNS 干扰
域名解析是否正常nslookup 域名检查 DNS 解析结果
端口是否可达telnet 目标IP 端口检查 TCP 层连通性
路由是否正常tracert 目标IP定位丢包和延迟节点
本机连接状态netstat -an查看端口监听和连接状态

在 Linux/macOS 下,telnet可能未安装,可以使用:

nc -vz 目标IP 端口

6.3 Wireshark 报文过滤基本用法

Wireshark 是最好的协议学习工具,没有之一。抓包后,可以通过过滤表达式快速定位:

# 只看某个 IP 的流量 ip.addr == 192.168.1.10 # 只看 TCP 端口 80 的流量 tcp.port == 80 # 看 HTTP 请求 http.request # 看 DNS 查询 dns.flags.response == 0 # 看 TCP 握手包 tcp.flags.syn == 1 && tcp.flags.ack == 0

抓包是理解报文格式最直观的方式。比如在浏览器访问一个网站,同时用 Wireshark 过滤tcp.port == 443,就能亲眼看到 TCP 三次握手的三个报文,以及 TLS 握手的 ClientHello、ServerHello 等记录。

7. 常见问题与排查表格

下面整理了一些实际排错中高频出现的问题:

问题现象常见原因解决思路
局域网内 ping 不通IP 不在同一网段,或 ARP 解析失败检查子网掩码与网关,执行arp -a确认 MAC 是否正常
公网 IP 能 ping 通,域名访问失败DNS 配置错误执行nslookup检查解析结果,更换公共 DNS
TCP 连接建立失败目标端口未监听,或被防火墙拦截使用netstat -an查看端口监听,用telnetnc测试端口连通性
访问网页出现 502后端服务宕机或网关配置错误检查 Nginx 上游配置,确认后端进程存活
大量 TIME_WAIT 连接短连接频繁建立开启连接复用,或改用长连接
HTTPS 证书报错证书过期、域名不匹配、链不完整检查证书有效期与 SAN 字段,补齐中间证书
视频通话卡顿UDP 丢包或带宽不足检查网络延迟和丢包率,考虑 QoS 策略
服务端大量 CLOSE_WAIT应用未正确关闭 Socket检查代码连接释放逻辑,限制连接空闲时间

遇到问题不要急着看代码。先确认网络几层分别是否正常,再把范围缩小到具体某一层,很多疑难问题都能快速定位。

8. 最佳实践与工程建议

8.1 设计上:遵循分层,但不死守分层

协议分层是学习和排查的框架,但实际工程中会有一些跨层优化。例如 TLS 位于应用层和传输层之间,CDN 会在网络层或应用层做加速,HTTP/3 直接把传输层换成了基于 UDP 的 QUIC。

理解分层之后,要懂得在合适的位置做优化:

  • 高频小数据包:优先考虑 UDP,减少握手开销。
  • 电商交易、转账类接口:必须用 TCP,必要时引入分布式事务。
  • 音视频传输:考虑 UDP 加 FEC 前向纠错,或使用 WebRTC。
  • 接口调用链冗长:考虑 HTTP/2 多路复用或升级 HTTP/3。

8.2 排错上:先分层,再定位

建立一套自己的排错顺序:

  1. 先看应用层:日志有没有报错,接口返回什么状态码。
  2. 再看传输层:端口通不通,TCP 状态正不正常。
  3. 然后看网络层:路由表对不对,TTL 是不是消耗完。
  4. 最后看链路层:ARP 有没有解析成功,网卡是否异常。

每次都按这个顺序走,能避免在错误的方向上浪费时间。

8.3 安全上:最小权限与加密

网络层到应用层每一层都存在安全风险:

  • 链路层:注意 ARP 欺骗,重要网络建议开启端口安全和 DHCP Snooping。
  • 网络层:合理规划 ACL,限制不必要的入站和出站流量。
  • 传输层:线上服务尽量使用 TLS 1.2 以上版本,关闭弱加密套件。
  • 应用层:对所有用户输入做校验,防止注入类攻击。

在生产环境修改防火墙规则、路由表、ACL 之前,一定要先备份原配置,评估影响范围,并在测试环境验证。操作过程遵循最小权限原则,避免在业务高峰期做高风险变更。

8.4 抓包习惯:保留现场

定位复杂网络问题时,抓包是最有力的证据。建议:

  • 抓包时同时抓客户端和服务端两侧,方便对比。
  • 保存抓包文件时带上时间点和问题描述。
  • 用 Wireshark 的 Follow TCP Stream 功能查看完整会话。
  • 不要只抓业务端口,DNS 查询、ARP 请求也要关注。

把每一次踩坑的报文和排查过程记录下来,慢慢就会形成属于自己的“协议地图”。下次再遇到类似的超时、丢包、连接异常,一眼就能看出来问题出在哪一层。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 19:35:18

傅里叶变换为何用负频率?卷积定理背后的符号约定与工程实践

1. 从一道“绕人”的问题说起:负频率到底是什么前几天有个学生拿着《信号与系统》教材跑来问我:老师,傅里叶变换公式里X(ω) ∫ x(t) e^(-jωt) dt,为什么要用负频率去“测”信号?卷积定理说时域卷积等于频域相乘&…

作者头像 李华
网站建设 2026/9/9 19:31:54

opencode不是工具,而是开发环境混沌的诊断信号

1. “opencode”到底是什么?别被名字骗了,它不是开源代码平台,也不是某个大厂新发布的AI编程工具 最近在技术社区和开发者群里,“opencode”这个词出现频率陡增,但翻遍GitHub、npm官网、主流技术媒体甚至招聘平台&…

作者头像 李华
网站建设 2026/9/9 19:30:25

React开发效率翻倍:VSCode必装插件与工程化配置实战

新配了一台机器,或者刚加入一个React团队,第一件事通常不是急着clone代码,而是先把编辑器武装起来。VSCode作为目前前端圈把“编辑器”和“IDE”边界揉得最模糊的工具,装上合适的插件和不装插件,写React项目的效率差距…

作者头像 李华
网站建设 2026/9/9 19:30:22

远程屏幕监控技术全解析:从原理到部署

简介:基于Java的远程屏幕监控示例,面向网络通信与屏幕捕捉的学习者,从实时查看远端桌面的核心需求出发,演示了屏幕捕获、网络传输和图像显示的基本流程,覆盖桌面图像采集到Socket发送的完整实现路径。压缩包共14个文件…

作者头像 李华
网站建设 2026/9/9 19:29:59

基于PaddleOCR的批量扫描件智能重命名工具实践

1. 项目由来:当“批量重命名”遇上乱糟糟的扫描件先说说我为什么要折腾这东西。手头经常要处理一堆PDF发票、合同扫描件、课程截图,还有从微信群里保存下来的各种图片。这些文件的默认命名简直是灾难现场:“微信图片_20250423153012.jpg”“扫…

作者头像 李华