数据封装与转发全过程分析(极其重要)
数据封装转发过程
通过案例理解,涉及以下4台设备,分别是PC、路由器R1、R2、服务器WebServer

其IP地址的编址情况如下图所示

PC通过浏览器访问服务器时,在浏览器中输入服务器的IP地址进行访问。
PC的封装
应用层:PC的应用层产生一个应用层数据DATA,为HTTP载荷

传输层:PC的传输层为应用层数据DATA封装传输层头部

网络层:PC的网络层封装IP层头部,TCP的IP层协议号字段值为6,UDP的IP层协议号字段为17

数据链路层:PC的数据链路层封装数据链路层头部,源MAC为本机MAC,目的MAC为网关的MAC地址,因为数据链路层负责一段链路的传输,保证从链路的一个端传递到另一个端,比如从PC的网口传递到R1的FE0/0口

物理层:比特流传输

到达R1处理
数据链路层:R1发现数据包的目的MAC地址为自己的FE0/0口地址,就去掉数据链路层头部,得到网络层数据

网络层解封装:R1得到IP层数据包,得到目的IP地址,查询自己的路由表,得知应从自己的FE1/0口进行转发

网络层重新封装:于是R1对IP数据报进行重新封装,源MAC地址为自身R1的FE1/0口的地址,目的MAC地址为R2的FE0/0口的MAC地址,数据包源目IP地址不会变化(笔者注:可见在同一个网络内部,通信是根据MAC地址进行寻址的,数据包的源目IP地址不随经过网络而变化)

封装后再发送至R2

到达R2处理
数据链路层解封装:发现是发给自己的数据帧

网络层解封装:发现目的IP地址,查询自己的路由表,得知应当从自己的FE1/0口进行转发

数据链路层重新封装:源MAC地址为R2自己FE1/0的MAC地址,目的MAC地址为服务器MAC地址

重新封装之后再发送给服务器

到达服务器处理
数据链路层解封装:发现是发给自己的数据帧

网络层解封装:发现是发给自己的数据包,去掉IP头部识别协议号交给传输层TCP

传输层解封装:发现目的端口号80,交给Web服务处理

应用层处理:Web服务处理应用层数据DATA

根据提供的信息,下面是数据从PC通过路由器R1、R2到达Web服务器的封装与转发过程的总结表格:
| 阶段 | 设备 | 层次 | 操作描述 |
|---|---|---|---|
| 发起请求 | PC | 应用层 | 生成HTTP载荷(DATA) |
| 传输层 | 为DATA添加传输层头部(TCP或UDP) | ||
| 网络层 | 添加IP头部,包含源IP、目的IP及协议号(TCP=6, UDP=17) | ||
| 数据链路层 | 添加数据链路层头部,源MAC为PC MAC,目的MAC为R1的FE0/0口MAC地址 | ||
| 物理层 | 比特流传输 | ||
| 转发过程 | R1 | 数据链路层 | 去掉数据链路层头部(基于目的MAC匹配) |
| 网络层 | 解封装IP数据包,查询路由表,决定从FE1/0口转发 | ||
| 网络层(重封装) | 重新封装IP数据包,源MAC变为R1的FE1/0口MAC,目的MAC变为R2的FE0/0口MAC,IP地址保持不变 | ||
| R2 | 数据链路层 | 去掉R1的数据链路层头部(基于目的MAC匹配) | |
| 网络层 | 解封装IP数据包,查询路由表,决定从FE1/0口转发 | ||
| 数据链路层(重封装) | 重新封装数据链路层头部,源MAC为R2的FE1/0口MAC,目的MAC为服务器MAC地址 | ||
| 到达服务器 | WebServer | 数据链路层 | 去掉R2的数据链路层头部(基于目的MAC匹配) |
| 网络层 | 解封装IP数据包,识别目的IP为自己,移除IP头部,根据协议号(如TCP=6)转发给传输层 | ||
| 传输层 | 根据目的端口号(例如80)将数据交给Web服务处理 | ||
| 应用层 | Web服务处理接收到的应用层数据(DATA) |
此表格概括了数据从PC到Web服务器的整个封装与转发流程,包括每个设备和层次上执行的关键操作。