OSI模型中,发送数据时为什么先到网络层,再到数据链路层?

admin 2026-01-28 06:53:50 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文章解析OSI模型数据封装顺序,解释发送端为何先网络层后链路层,因接收端需物理层向应用层逐层解包。通过PC直连、交换机中继及路由器转发场景,阐述以太网帧与IP报文的处理逻辑,强调封装顺序的物理必然性及网关MAC替换机制。 综合评分: 85 文章分类: 网络安全


cover_image

OSI模型中,发送数据时为什么先到网络层,再到数据链路层?

原创

车小胖谈网络 车小胖谈网络

车小胖谈网络

2026年1月27日 18:19 美国

一般发送数据时是应用(终端)→交换机→路由器,最后路由器再进行转发这个顺序, 而且交换机工作在数据链路层,路由器工作在网络层,那为什么先去在路由器封装IP再到交换机封装MAC呢?

学习OSI参考模型时,彻底忘记交换机、路由器、防火墙、集线器等等不相关的元素。做到化繁为简,因为它们的存在会干扰你的视线。

PC1网线直连PC2

PC1发:

PC1给PC2发一个packet时,通常是

应用程序的payload,由传输层[TCP/UDP]【payload】加一层外包装。

再由网络层[IP][TCP/UDP]【payload】加一层外包装。

然后由链路层[Ethernet] [IP][TCP/UDP]【payload】加一层外包装。

最后,经由物理层载波传输,一帧光电信号(Frame)发出去了。

PC2收:

物理层(一层)

物理层根据帧头的同步信号发现(Frame)是否到来。如果NO,一直静静等待。物理层(一层)开始。

如果Yes,开启接收模式,将光电信号(Frame)映射为0、1串流,物理层(一层)功能结束。

链路层(二层)

检查FCS,通过接收。失败丢弃,链路层(二层)功能开始。

根据预设置的MAC地址(单播MAC,组播MAC、广播MAC),如果matched到Destination MAC地址,接收。链路层(二层)功能势力范围。

根据ether-type,call不同的callback。如果ether-type ==0x0800, call ip_recv。链路层(二层)功能结束。

网络层(三层)

Sanitiy check,checksum校验。确保IP报文格式正确。

对于PC2来说,检查目的IP==自己的任意一个接口IP地址。

如果no,丢弃。

如果yes,根据protocol来决定callback。

假如protocol =17, callback =udp_recv。

传输层(四层)

Sanitiy check,checksum校验。确保UDP报文格式正确。

用四元组计算得到的hash值,找到正确的hash bucket。这是一个链表。就好比一条队伍的学生,一个一个matched四元组。

如果没有matched到,丢包。要给PC1发ICMP Error Message“Port Unreachable”。

如果matched到,得到socket实例,将packet放在socket的receive queue的末尾。

如果socket-> wait_queue  not NULL,尝试wake up等待的进程接收。用户进程resume,将packet 从socket receive queue copied到用户内存。

如果socket-> wait_queue =NULL,说明没有用户进程在read,省略。

应用层(七层)

Copied到用户进程的不是[Ethernet] [IP][TCP/UDP]【payload】。

是什么?

Payload

应用层开始处理这个payload,game over。

也许你很好奇,为何PC1要[Ethernet] [IP][TCP/UDP]【payload】这么打包?

难道这样[IP] [Ethernet] [TCP/UDP]【payload】不行吗

当然不行。因为PC2的链路层先处理,如果它看到的第一个字节是IP头,它一定会崩溃。

也许你还会问,为何PC1的发送物理层一定要安排在最后,PC2的接收物理层为何安排在最前,这是什么逻辑?

PC1除了物理层可以将0、1转换成模拟信号,其它的谁能?站出来!没有吧?

PC2除了物理层可以将模拟信号转换成0、1,其它的谁能?站出来!没有吧?

OSI参考模型的顺序安排,其实是非常合乎逻辑的。

如果上文看懂了,再将交换机加上。交换机的存在有几个方面原因:

  • 信号中继,可以将物理信号传输的更远。
  • 可以full mesh通信。没有交换机只能P2P通信。
  • 交换机还可以设置VLAN,隔离广播域。

即使有交换机的存在。PC1发给PC2的packet。依然是

[Ethernet] [IP][TCP/UDP]【payload】

只是这个packet先到达交换机,然后交换机的物理层工作,然后链路层工作。找打PC2连接的端口,从该端口将[Ethernet] [IP][TCP/UDP]【payload】原封未动发出去。

剩下的一样。

然后再将路由器加上去,PC1要发一个packet给8.8.8.8。

[Ethernet] [IP][TCP/UDP]【payload】

只是,[Ethernet]里的Destination MAC不是8.8.8.8的,而是Router(Gateway)的。

这个packet首先到达switch,先是switch的物理层,然后switch的链路层。找到Router(Gateway)连接的端口,然后将[Ethernet] [IP][TCP/UDP]【payload】

原封未动发出去了。

Packet到达Router(Gateway),先是物理层,后是链路层。然后网络层得到Destination IP =8.8.8.8,查询路由表,得到的出口为eth0,下一跳为x.x.x.x。

Router向物理接口eth0发ARP Request x.x.x.x,请求其MAC地址。

假如得到的MAC = y.y.y.y.y.y。

Router重新打包:

[Ethernet] [IP][TCP/UDP]【payload】

其中Ethernet:

Destination MAC =y.y.y.y.y.y (x.x.x.x的MAC)

Source MAC =r.r.r.r.r.r (eth0接口的MAC)

经过N次类似Router的迭代操作,packet最后到达了8.8.8.8。它的接收过程和PC2也是一模一样的。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:车小胖谈网络 车小胖谈网络 车小胖谈网络《OSI模型中,发送数据时为什么先到网络层,再到数据链路层?》

评论:0   参与:  0