python 数据链路层发送数据_请问数据包packet在网络层封装之后,是不是还要在数据链路层封装成数据帧frame以便在底层传输?...

本文详细解释了网络分层的原因,特别是数据链路层与网络层的职责划分。数据链路层通过MAC地址确保数据帧在物理层传输,并处理共享链路的冲突,确保数据的可靠传输。网络层则依赖数据链路层来隐藏不同传输介质的细节,实现IP协议在多种网络间的通信。
摘要由CSDN通过智能技术生成

在OSI参考模型中,每一个路由器都必须实现网络层、数据链路层和物理层的功能,如下图:

其中数据链路层和物理层的结合非常紧密,很多协议比如802系列协议都是同时对数据链路层和物理层进行了规范。

在TCP/IP协议栈里,每个路由器也要实现网络层、数据链路层和物理层的功能。

网络层使用IP地址、查路由表来决定将数据发送到哪里去。但是因为网络的分层设计,实际上数据还要在物理链路层进行组帧,此时会加上数据链路层的帧头和帧尾(在有些链路层协议中没有帧尾),交给物理层发送,数据链路层使用MAC地址来寻找下一跳,mac地址就包含在数据链路帧的帧头里。

具体来讲,广泛使用的以太网协议、802.11无线局域网协议,HDLC协议和PPP协议,都规定了不同格式的数据链路帧帧头(有些还包含了帧尾),你可以查看相关的协议,寻找到底这些协议把mac地址放在哪里了,下面帖一张HDLC和PPP协议的帧头格式

为什么有了网络层的IP地址,还要有数据链路层的MAC地址存在呢?我个人理解

这是网络分层设计的必然要求。

网络为什么要分层设计,只设计一层行不行?当然是行的,但这样就势必非常复杂。网络层为什么和数据链路层分开,也是为了设计的简单化,当时在设计IP协议的时候,设计思路就是让网络层的功能尽可能地简单,其他非必须功能由其他层完成。因为互联网是“把采用不同协议的子网连接起来构成的网络之网络”,如果IP层协议太复杂,势必会导致各种子网接入的困难。

比如说,网络层和数据链

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值