局域网 络传输流程图

封装的本质
1. 核心定义
封装:发送端自上而下,每层在上层交付的有效载荷 (payload) 前追加本层协议报头 (header),数据逐层打包。 完整报文通用公式: 完整报文 = 本层报头(header) + 上层交付的有效载荷(payload)
2.协议 = 结构体,报头 = 结构体变量
在 C 语言视角理解(网络内核底层实现):
- 每一层协议(TCP、IP、以太网协议)本质都是提前定义好的结构体,规定报头里面有哪些字段(源地址、目标地址、长度、校验和等)
- 发送数据时,内核创建这个结构体变量,填充各项控制信息,这个结构体实例就是报头
- 报头后面拼接上层传来的数据(有效载荷),组合成本层完整报文
举例:IP 协议就是内核定义的
struct iphdr结构体,发送数据包时填充这个结构体,拼上 TCP 报文段,组成完整 IP 数据包。
3. 每层协议必须完成两件核心工作
- 分离报头和有效载荷 收到报文之后,能够区分:哪一部分是本层协议的控制报头,哪一部分是交给上层的数据载荷。依靠结构体固定大小 + 长度字段解析。
- 识别上层协议,交付给正确上层协议 本层剥离报头后,要知道这个载荷该交给上层哪一个协议处理。
例子:IP 报头里面有协议字段,标识载荷是 TCP (6) 还是 UDP (17),内核根据这个字段,把数据交给 TCP 模块或 UDP 模块。
协议本质是一个结构体类型
而报头就是一个结构体变量
跨网络传输的流程
IP
一、IP 协议版本区分
IP 协议存在两大版本:IPv4、IPv6 课件约定:若无特殊说明,提到 IP 默认指代 IPv4
- IPv4:32 位(4 字节),目前广泛使用,但公网地址资源枯竭
- IPv6:128 位(16 字节),用来解决 IPv4 地址耗尽问题,逐步推广
二、IPv4 地址核心知识点
1. IP 地址作用
IP 地址工作在网络层,用来在整个互联网范围内,唯一标识一台主机。 MAC 只管局域网内相邻设备;IP 负责跨网段全网寻址。
2. IPv4 地址格式
- 底层本质:32 位二进制整数(4 字节)
- 人类可读写法:点分十进制 写法范例:
192.168.0.1规则:使用小数点分割 4 段数字,每一段代表 1 字节(8bit),取值范围 0 ~ 255 举例拆解:192.168.0.1分为 4 个字节:192、168、0、1
底层存储是完整 32 位整数,点分十进制只是方便人阅读的展示形式,程序内部传输使用二进制。
IP侧重点更多是:标识公网中唯一一台主机(类似于学生的学号)
MAC vs IP
两套地址
1.src: 东土大唐 dst:西天 ---->从哪来到哪去 ---->IP地址
2.last_src:车迟国 last_dst:女儿国 ----->上一站从哪来,下一站到哪去 -------MAC地址
- IP 地址(网络层)
- 作用 :在整个互联网范围内,标识通信的起点主机和终点主机。
- 特点 :数据包从发送方到接收方的全过程中,源 IP 和目的 IP 始终保持不变。
- 类比:唐僧的出发地「东土大唐」和目的地「西天」,不管中间经过多少国家,起点终点不变。
- MAC 地址(数据链路层)
- 作用 :在同一个局域网内 ,标识相邻两个设备,完成这一跳的数据交付。
- 特点 :数据包每经过一个路由器(每一跳),源 MAC 和目的 MAC 都会被重新改写。
- 类比:唐僧当前这一段路,是从「车迟国」走到「女儿国」;走完这段,下一段就变成从「女儿国」走到「火焰山」------ 每一段路的起止点都在变。
为什么需要两套地址?只用一套不行吗?
核心原因:两套地址分工不同,缺一不可。
只用 IP 地址行不行?
不行。IP 地址是逻辑地址,可以动态变化(比如手机从家里 WiFi 切到校园网,IP 就变了)。 而数据链路层(网卡、交换机)只认识 MAC 地址,不认识 IP。交换机靠 MAC 地址把帧送到正确的设备,没有 MAC,局域网内部根本无法交付数据。
只用 MAC 地址行不行?也不行。MAC 地址是网卡出厂固化的,48 位扁平地址,没有层次结构,无法用来做路由选路。 互联网有几十亿台设备,如果靠 MAC 地址寻址,每台路由器都要记住全世界所有 MAC,路由表会爆炸。 而 IP 地址是分层的(网络号 + 主机号),路由器可以按网络号聚合路由,大大减小路由表规模。

路由器核心处理流程
路由器不会完整解封装到传输层 / 应用层,只解封装到网络层
- 收到以太网帧:剥离以太网二层头部(以太网帧头、CRC),取出里面的 IP 数据包
- 读取 IP 报头的目的 IP,查询路由表,确定转发下一跳
- 重新封装二层帧 :因为对端是令牌环网络,不再使用以太网帧,改用令牌环帧头封装 IP 数据包
- 通过令牌环链路,转发给目标局域网内的 FTP 服务器
路由器转发时:IP 数据包整体保留(源 IP、目的 IP 不变),二层帧完全重封装,适配不同底层链路 这也是路由器可以连接以太网、令牌环、PPP 等多种异构网络的根本原因

场景
用户 A(IP:192.168.2.2,MAC:macA)要给用户 B(IP:172.168.2.2)发数据:你好。
网络层的核心判断
网络层不知道主机具体是谁,但可以知道:当前报文是发给「自己局域网」还是「其他网络」。
网络层拿到目的 IP 172.168.2.2,和自己的 IP 192.168.2.2 对比,发现不在同一个网段。
路由决策
路由:发现不是发给自己局域网主机的报文,就推送给路由器。
既然目标不在本局域网,数据链路层封装帧时:
- 源 MAC :
macA(自己的网卡) - 目的 MAC :
macLeft(路由器左侧网卡的 MAC,不是目标主机的 MAC!)
关键:跨网段通信时,二层帧的目的 MAC 填的是下一跳路由器的 MAC,不是最终目标主机的 MAC。因为 MAC 只负责相邻设备一跳交付。
同局域网其他主机的反应
交换机把帧广播到局域网所有主机,其他主机(192.168.2.3、192.168.2.4)收到帧后,对比目的 MAC,发现不是自己的 MAC,直接丢弃。只有路由器左侧网卡匹配 MAC,接收这个帧

路由器的处理流程
路由器不会把数据完整解封装到应用层,只解封装到网络层:
- 解封装二层 :剥离以太网帧头(
src:macA, dst:macLeft),取出里面的 IP 数据包。 - 读 IP 头部 :查看目的 IP
172.168.2.2,查询路由表,确定下一跳是右侧局域网,从右侧网卡转发。 - 重新封装二层帧 (课件标注:「向下交互要重新封装」):
- 源 MAC :改为路由器右侧网卡的 MAC
macRight - 目的 MAC :改为目标主机 B 的 MAC
macB - IP 数据包整体原封不动 (
src:192.168.2.2, dst:172.168.2.2, data:你好)
- 源 MAC :改为路由器右侧网卡的 MAC
✨ 核心结论:
- IP 层:源 IP、目的 IP 全程不变(网络层收发的是同一个报文)
- 二层帧:源 MAC、目的 MAC 每经过一跳路由器就重新封装
目标主机 B 接收
B 的网卡收到帧,对比目的 MAC macB,匹配成功,接收帧;逐层解封装,最终把你好交给应用层。

局域网标准并不统一 → 标准不同,实现方式不同 → 会阻碍互联网发展
现实中存在多种局域网技术:以太网、令牌环、Wi-Fi...... 它们的帧格式、MAC 寻址方式都不一样。如果没有统一的上层标准,不同局域网之间根本无法互通。
IP 协议的作用:屏蔽底层差异
IP 网以上标准统一
IP 协议在网络层提供了一套统一的地址格式(IP 地址)和统一的报文格式(IP 数据包)。 不管底层是以太网还是令牌环,到了网络层以上,全部用统一的 IP 报文交互。
路由器的地位
路由器是实现 IP 通信的最重要硬件
IP地址在整个路由过程中,一直不变(目前,我们只能这样说明,后面在修正)
Mac地址一直在变
目的IP是一种长远目标,Mac是下一阶段目标,目的IP是路径选择的重要依据,mac地址是局域网 转发的重要依据