当前位置: 首页 > news >正文

数据链路层以太网协议

目录

一、以太网协议格式

二、局域网通信

三、碰撞避免

四、MTU

五、交换机


实现网络通信,首先要实现的是局域网通信。例如,分别处于两个局域网中的主机1和主机2,要想实现主机1和主机2的通信,首先得实现各自局域网中主机与路由器的通信,即局域网通信。数据链路层解决的就是局域网通信问题。

一、以太网协议格式

网络层的数据交付给数据链路层,经过数据链路层封装后的数据统称为数据帧。数据链路层采用的是以太网协议,则称为以太网帧;采用PPP协议,则称为PPP帧;采用WiFi协议,则称为WiFi帧

此处介绍的是以太网协议,即以太网帧。以太网协议采用的是定长报头,14字节。

  • 目的地址:目标主机的MAC地址
  • 源地址:当前主机的MAC地址
  • 类型:标识数据中封装的网络层协议类型,例如IP协议、ARP协议、RARP协议
  • 数据:网络层数据
  • CRC:检测数据帧在传输过程中是否发生比特错误

二、局域网通信

以太网是数据链路层最常用的协议之一,主要用于有线局域网的通信。

假设同一个局域网中存在主机1~6,主机1想要给主机6发送数据,要经过如下步骤:

  • 主机1网络层:将网络层数据交给数据链路层
  • 主机1数据链路层:网卡对网络层数据进行封装,称为数据帧,并将数据帧交给物理层
  • 主机1物理层:网卡将数据帧转换成比特流,再使用物理编码将比特流转换为光/电信号后交给物理传输介质(光缆、电缆)
  • 其他主机物理层:局域网中的所有主机的网卡都能收到光/电信号,将光/电信号转换为比特流。网卡再解析比特流,将比特流转换为数据帧,最后将数据帧交给数据链路层
  • 其他主机数据链路层:提取数据帧报头,对比目的地址和当前主机的MAC地址。MAC地址相同,则去除数据帧报头得到网络层数据,将网络层数据交给网络层;MAC地址不相同,直接丢弃该数据帧。
  • 主机6数据链路层:MAC地址相同,去除数据帧报头,将余下的网络层数据交给网络层

三、碰撞避免

由于局域网中多台主机共享同一个传输媒介,数据的光电信号在传输媒介中会相互干扰,即数据碰撞,而局域网也被称为碰撞域。因此局域网通信时不允许两台主机同时发送数据。

局域网引入了碰撞避免机制,如果发生数据碰撞,那么对应的主机会进行休眠,休眠时间结束后再进行数据重传。

四、MTU

MTU是数据链路层传输的数据帧的有效载荷最大字节数,不同的数据链路层协议规定的MTU不同,以太网协议规定的MTU是1500字节。假设传输层使用TCP协议(20字节报头),网络层使用IP协议(20字节报头),那么网络层交给数据链路层的数据最大只能是1460字节(不考虑协议选项)。对于超过MTU的数据,网络层例如IP协议会进行IP分片解决问题。

设置MTU的原因就是,发送较长的数据会导致占用共享传输介质的时间更久,发生碰撞的概率越大,因此要限制数据帧的大小。

五、交换机

尽管局域网中有碰撞避免算法减少数据碰撞,但是当同一个局域网中的数据越来越多时,发生数据碰撞的概率必然会增大,就会导致数据链路层要频繁地进行数据重传,造成网络卡顿(这也是为什么人多的地方网速慢地原因)

为了解决这个问题,引入了交换机。交换机的作用就是划分碰撞域,它将局域网的一整个大的碰撞域划分为多个小碰撞域,从而降低数据碰撞的概率。

例如一个局域网存在主机1~6,在该局域网中引入一个交换机,它将局域网这个大碰撞域划分为两个小碰撞域A和B,并且交换机有两个接口A和B分别连接碰撞域A和B。碰撞域A中是主机1~3,碰撞域B中是主机4~6。开始时交换机并不知道各个主机在哪一个碰撞域中,当主机1给主机6发送数据时,交换机本身也在局域网中,也会收到主机1发送的数据,它会将数据转发到碰撞域B中,同时记录接口A连接的碰撞域A中有主机1。通过这种方式,当主机之间发送数据时,交换机就可以知道每台主机分别在哪一个碰撞域中。如果主机1再对主机2发送数据,那么交换机就不需要对数据进行转发,因为它知道主机1和主机2再同一个碰撞域中。

通过交换机,将大碰撞域划分为多个小碰撞域,各个碰撞域之间相互隔离,只有经过交换机的转发才可以将数据发送到其他碰撞域。这样降低了数据碰撞的概率,不同碰撞域中的主机可以同时发送数据。

相关文章:

  • XYCTF2025 web 全wp
  • 【C++】stack和queue
  • Linux平台搭建MQTT测试环境
  • 使用scoop一键下载jdk和实现版本切换
  • Python数据分析-NumPy模块-矩阵的运算
  • Vue3+Ts封装ToolTip组件(2.0版本)
  • Vue.js 中 v-if 的使用及其原理
  • Nginx漏洞复现
  • andorid 查找没有使用的资源
  • Navicat和PLSQL在oracle 使用语句报ORA-00911: 无效字符
  • Mysql专题篇章
  • SQL Server 数据库邮件配置失败:SMTP 连接与权限问题
  • zookeeper平滑扩缩容
  • 蓝桥杯 C/C++ 组历届真题合集速刷(二)
  • 数字IC后端项目典型问题之后端实战项目问题记录
  • Linux驱动开发:SPI驱动开发原理
  • sql-labs靶场 less-1
  • fabric.js基础使用
  • CrystalDiskInfo电脑硬盘监控工具 v9.6.0中文绿色便携版
  • 平台算法暗战:ebay欧洲站搜索词长度同比缩短2.3字符的应对策略
  • 李公明谈“全球南方”与美术馆
  • 工人日报:“鼠标手”被纳入职业病,劳动保障网越织越密
  • 食用城市|食饭识人
  • 飙升至熔断,巴基斯坦股市两大股指收盘涨逾9%
  • 长沙查处疑似非法代孕:有人企图跳窗,有女子被麻醉躺手术台
  • 张笑宇:物质极大丰富之后,我们该怎么办?