计算机网络基础(一):协议分层、封装分用与地址体系

计算机网络的核心问题是:不同厂商、不同操作系统、不同硬件和不同程序,如何按照统一规则交换数据。

解决方案不是设计一个包揽全部工作的巨大协议,而是将复杂通信过程划分为多个层次,每一层只解决一组相对稳定的问题,并向上层提供服务。

一、计算机网络的发展

1.1 独立模式

早期计算机彼此独立,数据通常依赖磁盘、磁带等介质人工搬运。优点是结构简单,缺点是共享与协作效率低。

1.2 网络互联

多台计算机通过通信链路连接后,可以共享文件、打印机、数据库和计算资源。

1.3 局域网与广域网

  • LAN(Local Area Network):覆盖家庭、办公室、园区或数据中心等相对有限范围;
  • WAN(Wide Area Network):跨越城市、国家甚至全球,连接多个局域网。

局域网和广域网更多是范围与管理方式上的相对概念,并不存在一条绝对的距离分界线。

1.4 互联网

Internet 的本质是“网络的网络”:不同组织管理的网络通过路由器和标准协议互联。

二、协议是什么

协议是通信双方共同遵守的规则,至少应描述:

  1. 语法:数据长什么样,各字段如何排列;
  2. 语义:每个字段表示什么;
  3. 时序:谁先发送、何时确认、超时怎么办;
  4. 错误处理:丢包、重复、损坏或状态冲突时如何处理。

例如只说“发送字符串”还不够,双方还要约定:

  • 字符编码是 UTF-8 还是其他编码;
  • 一条消息在哪里结束;
  • 是否包含长度;
  • 大小端如何处理;
  • 错误如何表示;
  • 协议版本如何协商。

网络通信能跨平台,依赖的正是公开、稳定、可互操作的协议规范。

三、为什么要分层

如果一个模块同时负责网线信号、局域网寻址、跨网路由、可靠传输和网页格式,任何一处变化都可能影响整个系统。

分层带来的主要价值:

  • 降低复杂度:每层只关注自己的职责;
  • 封装实现:上层通过接口使用下层服务;
  • 便于替换:应用可以运行在以太网、Wi-Fi 等不同链路上;
  • 促进标准化:不同厂商只需遵守层间接口和协议;
  • 便于排错:可以按链路、IP、传输层、应用层逐层定位。

分层不是说实现之间完全没有联系。MTU、拥塞、硬件卸载等因素都会产生跨层影响,但分层仍是理解网络的主框架。

四、OSI 七层模型

OSI 参考模型把网络功能分为七层:

层次 名称 主要职责 常见例子
7 应用层 面向用户或应用的网络服务 HTTP、DNS、SMTP
6 表示层 编码、压缩、加密、数据表示 字符编码、序列化、部分 TLS 职责
5 会话层 会话建立、保持与恢复 会话控制概念
4 传输层 端到端传输、端口复用 TCP、UDP、QUIC 的传输能力
3 网络层 逻辑地址与路由 IPv4、IPv6、ICMP
2 数据链路层 同一链路上的帧传输 Ethernet、Wi-Fi、ARP 的邻接作用
1 物理层 比特在介质上的传输 双绞线、光纤、无线电波

OSI 更适合理论划分。实际互联网工程通常使用 TCP/IP 模型。

五、TCP/IP 四层与五层模型

5.1 四层模型

TCP/IP 层 主要职责 典型协议或技术
应用层 组织业务数据 HTTP、DNS、SSH、SMTP
传输层 进程到进程通信 TCP、UDP
网际层 跨网络寻址和路由 IP、ICMP
网络接口层 本地链路传输 Ethernet、Wi-Fi

5.2 五层模型

教学中常把网络接口层拆成:

  • 数据链路层;
  • 物理层。

因此形成应用层、传输层、网络层、数据链路层、物理层的五层模型。

5.3 模型之间的对应关系

OSI TCP/IP 五层 TCP/IP 四层
应用层、表示层、会话层 应用层 应用层
传输层 传输层 传输层
网络层 网络层 网际层
数据链路层 数据链路层 网络接口层
物理层 物理层 网络接口层

六、每一层解决什么问题

6.1 应用层:数据代表什么

应用层决定业务消息格式。例如 HTTP 规定请求方法、目标资源、头字段和消息体如何表达。

同一个 TCP 连接中到底怎样区分两条业务消息,通常也是应用层协议要解决的问题。

6.2 传输层:交给哪个进程

IP 地址定位主机或网络接口,端口号用于在主机上区分网络通信端点。

传输层典型协议:

  • TCP:可靠、有序、面向字节流、连接导向;
  • UDP:无连接、保留数据报边界、尽力而为。

6.3 网络层:下一跳往哪里走

IP 层负责逻辑寻址和路由。路由器根据目的 IP 与路由表选择下一跳,并不会理解大多数应用层业务内容。

6.4 数据链路层:当前链路交给谁

以太网帧使用源 MAC 和目的 MAC 标识同一链路上的发送方与下一跳接收方。

跨越路由器时,IP 源地址和目的地址通常保持端到端含义,而链路层 MAC 地址会逐跳改变。NAT 是可能修改 IP/端口的额外机制,不能把它当作普通路由的必然行为。

6.5 物理层:比特怎样通过介质

物理层规定电、光或无线信号的编码、速率、接口、传输距离和抗干扰能力。

七、数据的封装

假设浏览器向服务器发送一段 HTTP 数据。发送端大致经历:

  1. 应用层生成 HTTP 消息;
  2. 传输层添加 TCP 首部,形成 TCP 段;
  3. 网络层添加 IP 首部,形成 IP 数据报;
  4. 数据链路层添加以太网首部和尾部,形成帧;
  5. 物理层把帧编码为介质中的比特信号。

常见称谓:

层次 协议数据单元常见名称
应用层 消息、报文
传输层 TCP 段(segment)
传输层 UDP 用户数据报(datagram)
网络层 IP 数据报、包(packet)
数据链路层 帧(frame)
物理层 比特(bit)

“包”在日常交流中经常泛指多种层次,分析问题时最好明确是哪一层的数据单元。

八、数据的分用

接收端执行相反过程:

  1. 网卡接收帧并进行链路层检查;
  2. 根据 EtherType 等字段交给 IPv4、IPv6 或其他上层;
  3. IP 根据协议号交给 TCP、UDP 或 ICMP;
  4. TCP/UDP 根据端口和连接状态找到套接字;
  5. 应用进程从套接字读取数据并解析应用协议。

这个过程称为解封装与分用(demultiplexing)。

常见分用字段:

所在层 用于选择上层或端点的字段
以太网 EtherType
IPv4 Protocol
IPv6 Next Header
TCP/UDP 源/目的端口与连接五元组
HTTP Host、路径、方法、头字段等

九、同一网段内的通信

假设主机 A 与主机 B 位于同一 IPv4 子网:

  1. A 根据目的 IP 和子网掩码判断 B 在本地链路;
  2. A 查询邻居缓存,若没有 B 的 MAC,则通过 ARP 解析;
  3. A 生成以 B 的 MAC 为目的 MAC 的以太网帧;
  4. 交换机根据 MAC 地址表转发;
  5. B 的网卡接收帧,协议栈逐层分用到应用。

这里不需要路由器转发,但默认网关仍可存在于网络配置中。

十、跨网段通信

当 A 判断目的 IP 不在本地子网时:

  1. A 查询路由表,选择下一跳,通常是默认网关;
  2. A 解析的是下一跳路由器接口的 MAC,不是远端主机 MAC;
  3. A 构造帧:目的 MAC 为网关 MAC,目的 IP 仍为远端主机 IP;
  4. 路由器接收帧,移除当前链路层封装;
  5. 路由器检查 IP 首部、递减 TTL,并查路由表;
  6. 路由器在下一条链路上重新封装新的链路层帧;
  7. 重复以上过程直到到达目标网络。

因此可以记住:

  • IP 地址解决端到端的逻辑寻址;
  • MAC 地址解决当前链路到下一跳的交付;
  • 路由表决定下一跳与出口接口。

十一、IP 地址

11.1 IPv4

IPv4 地址长度为 32 位,常用点分十进制表示:

1
192.168.1.10

每一段对应 8 位,范围为 0 到 255。

IPv4 地址要结合前缀长度理解:

1
192.168.1.10/24

/24 表示前 24 位为网络前缀。只看 IP 字符串而不看掩码,无法完整判断两个地址是否位于同一子网。

11.2 IPv6

IPv6 地址长度为 128 位,使用十六进制冒号表示,支持零压缩:

1
2001:db8::1

IPv6 不只是“地址更多”,还在邻居发现、自动配置、首部结构等方面与 IPv4 存在差异。

十二、MAC 地址

以太网 MAC 地址通常为 48 位:

1
08:00:27:03:fb:19

MAC 地址用于本地链路上的帧交付。常见误区:

  1. MAC 地址并不会在整个互联网中端到端携带;
  2. 网卡出厂可能带有地址,但操作系统、虚拟机和容器可以配置本地管理地址;
  3. “MAC 永远不可修改且全球绝对唯一”不是可靠的安全假设;
  4. 路由器每转发一跳,链路层首部通常会重新构造。

十三、交换机、路由器与集线器

设备 主要工作层次 转发依据 说明
集线器 物理层 不理解地址 将信号复制到其他端口,现代网络少见
二层交换机 数据链路层 MAC 地址表 在局域网内转发以太网帧
路由器 网络层 IP 路由表 连接不同网络并逐跳转发 IP 包

现代设备可能集成多层功能,例如三层交换机、防火墙、NAT 和负载均衡,因此表格描述的是核心职责,不是硬件的绝对能力边界。

十四、常用观察命令

14.1 地址与接口

1
2
ip address show
ip link show

14.2 路由表

1
2
ip route show
ip -6 route show

14.3 邻居缓存

1
ip neigh show

14.4 套接字

1
2
ss -lntup
ss -ntp

14.5 抓包

1
sudo tcpdump -ni any 'host 192.0.2.10'

抓包可能包含敏感数据,生产环境使用时要取得授权并控制文件权限。

十五、分层排错方法

遇到“网络不通”时,可以按顺序检查:

  1. 物理/链路:接口是否 UP,网线、Wi-Fi、VLAN 是否正常;
  2. 地址:本机 IP、前缀、网关配置是否正确;
  3. 邻居:能否解析网关或同网段目标的 MAC;
  4. 路由:是否存在到目标网络的路由;
  5. 网络层:ICMP 是否可达,TTL 在哪里结束;
  6. 传输层:目标端口是否监听,防火墙是否放行;
  7. 应用层:协议、域名、证书、Host、路径和权限是否正确。

注意:ping 不通不一定代表 TCP 服务不可达,因为 ICMP 可能被过滤;ping 通也不代表目标端口一定开放。

十六、两台计算机通信的完整主线

以访问 https://example.com/ 为例,过程可能包括:

  1. DNS 将域名解析为 IP;
  2. 主机查路由表选择出口与下一跳;
  3. ARP 或 IPv6 邻居发现解析下一跳链路地址;
  4. TCP 建立连接,或 QUIC 基于 UDP 建立安全传输;
  5. TLS 验证服务器身份并协商密钥;
  6. HTTP 发送请求;
  7. 数据经传输层、IP 层和链路层封装后逐跳传输;
  8. 服务器逐层分用并处理请求;
  9. 响应沿可用路由返回;
  10. 浏览器解析资源并渲染页面。

这一过程不是“一个协议完成全部工作”,而是多个层次和协议协作的结果。

十七、常见误区

17.1 “同一局域网只看前三段 IP”

错误。必须结合子网掩码或 CIDR 前缀进行按位判断。

17.2 “数据到远端主机时,目的 MAC 一直不变”

错误。MAC 只对当前链路有效,经过路由器通常会更换链路层首部。

17.3 “IP 地址唯一标识一台物理计算机”

一台主机可有多个接口和多个 IP;一个 IP 也可能因 NAT、负载均衡、迁移或共享地址机制对应复杂后端。

17.4 “交换机只会广播”

交换机会学习源 MAC 与端口的关系,已知单播通常只转发到对应端口;未知单播、广播等场景才会在相应广播域内泛洪。

17.5 “分层意味着每层完全独立”

分层提供抽象边界,但性能、安全和 MTU 等问题经常需要跨层理解。

十八、总结

  1. 协议规定通信数据的格式、含义、时序与错误处理。
  2. 分层把复杂网络拆成应用、传输、网络、链路和物理职责。
  3. 发送端逐层封装,接收端逐层解封装并分用。
  4. IP 地址负责逻辑寻址,端口标识通信端点,MAC 地址服务于当前链路。
  5. 同网段直接交付,跨网段则由路由器根据路由表逐跳转发。
  6. 排查网络故障时应沿协议栈逐层验证,不要只凭一个命令下结论。