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

计算机网络基础(一):协议分层、封装分用与地址体系
Lichermione计算机网络的核心问题是:不同厂商、不同操作系统、不同硬件和不同程序,如何按照统一规则交换数据。
解决方案不是设计一个包揽全部工作的巨大协议,而是将复杂通信过程划分为多个层次,每一层只解决一组相对稳定的问题,并向上层提供服务。
一、计算机网络的发展
1.1 独立模式
早期计算机彼此独立,数据通常依赖磁盘、磁带等介质人工搬运。优点是结构简单,缺点是共享与协作效率低。
1.2 网络互联
多台计算机通过通信链路连接后,可以共享文件、打印机、数据库和计算资源。
1.3 局域网与广域网
- LAN(Local Area Network):覆盖家庭、办公室、园区或数据中心等相对有限范围;
- WAN(Wide Area Network):跨越城市、国家甚至全球,连接多个局域网。
局域网和广域网更多是范围与管理方式上的相对概念,并不存在一条绝对的距离分界线。
1.4 互联网
Internet 的本质是“网络的网络”:不同组织管理的网络通过路由器和标准协议互联。
二、协议是什么
协议是通信双方共同遵守的规则,至少应描述:
- 语法:数据长什么样,各字段如何排列;
- 语义:每个字段表示什么;
- 时序:谁先发送、何时确认、超时怎么办;
- 错误处理:丢包、重复、损坏或状态冲突时如何处理。
例如只说“发送字符串”还不够,双方还要约定:
- 字符编码是 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 数据。发送端大致经历:
- 应用层生成 HTTP 消息;
- 传输层添加 TCP 首部,形成 TCP 段;
- 网络层添加 IP 首部,形成 IP 数据报;
- 数据链路层添加以太网首部和尾部,形成帧;
- 物理层把帧编码为介质中的比特信号。
常见称谓:
| 层次 | 协议数据单元常见名称 |
|---|---|
| 应用层 | 消息、报文 |
| 传输层 TCP | 段(segment) |
| 传输层 UDP | 用户数据报(datagram) |
| 网络层 | IP 数据报、包(packet) |
| 数据链路层 | 帧(frame) |
| 物理层 | 比特(bit) |
“包”在日常交流中经常泛指多种层次,分析问题时最好明确是哪一层的数据单元。
八、数据的分用
接收端执行相反过程:
- 网卡接收帧并进行链路层检查;
- 根据 EtherType 等字段交给 IPv4、IPv6 或其他上层;
- IP 根据协议号交给 TCP、UDP 或 ICMP;
- TCP/UDP 根据端口和连接状态找到套接字;
- 应用进程从套接字读取数据并解析应用协议。
这个过程称为解封装与分用(demultiplexing)。
常见分用字段:
| 所在层 | 用于选择上层或端点的字段 |
|---|---|
| 以太网 | EtherType |
| IPv4 | Protocol |
| IPv6 | Next Header |
| TCP/UDP | 源/目的端口与连接五元组 |
| HTTP | Host、路径、方法、头字段等 |
九、同一网段内的通信
假设主机 A 与主机 B 位于同一 IPv4 子网:
- A 根据目的 IP 和子网掩码判断 B 在本地链路;
- A 查询邻居缓存,若没有 B 的 MAC,则通过 ARP 解析;
- A 生成以 B 的 MAC 为目的 MAC 的以太网帧;
- 交换机根据 MAC 地址表转发;
- B 的网卡接收帧,协议栈逐层分用到应用。
这里不需要路由器转发,但默认网关仍可存在于网络配置中。
十、跨网段通信
当 A 判断目的 IP 不在本地子网时:
- A 查询路由表,选择下一跳,通常是默认网关;
- A 解析的是下一跳路由器接口的 MAC,不是远端主机 MAC;
- A 构造帧:目的 MAC 为网关 MAC,目的 IP 仍为远端主机 IP;
- 路由器接收帧,移除当前链路层封装;
- 路由器检查 IP 首部、递减 TTL,并查路由表;
- 路由器在下一条链路上重新封装新的链路层帧;
- 重复以上过程直到到达目标网络。
因此可以记住:
- 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 地址用于本地链路上的帧交付。常见误区:
- MAC 地址并不会在整个互联网中端到端携带;
- 网卡出厂可能带有地址,但操作系统、虚拟机和容器可以配置本地管理地址;
- “MAC 永远不可修改且全球绝对唯一”不是可靠的安全假设;
- 路由器每转发一跳,链路层首部通常会重新构造。
十三、交换机、路由器与集线器
| 设备 | 主要工作层次 | 转发依据 | 说明 |
|---|---|---|---|
| 集线器 | 物理层 | 不理解地址 | 将信号复制到其他端口,现代网络少见 |
| 二层交换机 | 数据链路层 | MAC 地址表 | 在局域网内转发以太网帧 |
| 路由器 | 网络层 | IP 路由表 | 连接不同网络并逐跳转发 IP 包 |
现代设备可能集成多层功能,例如三层交换机、防火墙、NAT 和负载均衡,因此表格描述的是核心职责,不是硬件的绝对能力边界。
十四、常用观察命令
14.1 地址与接口
1 | ip address show |
14.2 路由表
1 | ip route show |
14.3 邻居缓存
1 | ip neigh show |
14.4 套接字
1 | ss -lntup |
14.5 抓包
1 | sudo tcpdump -ni any 'host 192.0.2.10' |
抓包可能包含敏感数据,生产环境使用时要取得授权并控制文件权限。
十五、分层排错方法
遇到“网络不通”时,可以按顺序检查:
- 物理/链路:接口是否 UP,网线、Wi-Fi、VLAN 是否正常;
- 地址:本机 IP、前缀、网关配置是否正确;
- 邻居:能否解析网关或同网段目标的 MAC;
- 路由:是否存在到目标网络的路由;
- 网络层:ICMP 是否可达,TTL 在哪里结束;
- 传输层:目标端口是否监听,防火墙是否放行;
- 应用层:协议、域名、证书、Host、路径和权限是否正确。
注意:ping 不通不一定代表 TCP 服务不可达,因为 ICMP 可能被过滤;ping 通也不代表目标端口一定开放。
十六、两台计算机通信的完整主线
以访问 https://example.com/ 为例,过程可能包括:
- DNS 将域名解析为 IP;
- 主机查路由表选择出口与下一跳;
- ARP 或 IPv6 邻居发现解析下一跳链路地址;
- TCP 建立连接,或 QUIC 基于 UDP 建立安全传输;
- TLS 验证服务器身份并协商密钥;
- HTTP 发送请求;
- 数据经传输层、IP 层和链路层封装后逐跳传输;
- 服务器逐层分用并处理请求;
- 响应沿可用路由返回;
- 浏览器解析资源并渲染页面。
这一过程不是“一个协议完成全部工作”,而是多个层次和协议协作的结果。
十七、常见误区
17.1 “同一局域网只看前三段 IP”
错误。必须结合子网掩码或 CIDR 前缀进行按位判断。
17.2 “数据到远端主机时,目的 MAC 一直不变”
错误。MAC 只对当前链路有效,经过路由器通常会更换链路层首部。
17.3 “IP 地址唯一标识一台物理计算机”
一台主机可有多个接口和多个 IP;一个 IP 也可能因 NAT、负载均衡、迁移或共享地址机制对应复杂后端。
17.4 “交换机只会广播”
交换机会学习源 MAC 与端口的关系,已知单播通常只转发到对应端口;未知单播、广播等场景才会在相应广播域内泛洪。
17.5 “分层意味着每层完全独立”
分层提供抽象边界,但性能、安全和 MTU 等问题经常需要跨层理解。
十八、总结
- 协议规定通信数据的格式、含义、时序与错误处理。
- 分层把复杂网络拆成应用、传输、网络、链路和物理职责。
- 发送端逐层封装,接收端逐层解封装并分用。
- IP 地址负责逻辑寻址,端口标识通信端点,MAC 地址服务于当前链路。
- 同网段直接交付,跨网段则由路由器根据路由表逐跳转发。
- 排查网络故障时应沿协议栈逐层验证,不要只凭一个命令下结论。