数据链路层

1.1 Ethemet II协议

  1. 帧格式:D.MAC + S.MAC + Type + Data + FCS
    • D.MAC:目的MAC地址
    • S.MAC:源MAC地址
    • Type:上层使用的协议
    • Data:数据
    • FCS:帧校验序列,校验使用
  2. 一个设备收到帧时
    • 1️⃣先检查D.MAC是不是自己,如果不是自己,直接扔了
    • 2️⃣查看FCS,校验是否通过,如果不通过,直接扔了
    • 3️⃣查看Type,上层的协议
  3. 优点就是简单,缺点就是,Type字段,必须所有设备都要支持该协议,如果某些厂商想要研发一些「私有化的协议」,那么就不能使用E2协议

1.2 IEEE802.3协议

  1. 注意,该协议和E2协议,都是以太网协议
  2. 帧格式:D.MAC + S.MAC + Length + LLC + SNAP + Data + FCS
    • D.MAC:目的MAC地址
    • S.MAC:源MAC地址
    • Length:上层数据的大小,即Data的大小,单位是字节
    • LLC:逻辑链路控制
      • D.SAP:目标服务接入点,目标的上层协议是什么,如果使用「私有化协议」,这里会标识SNAP(0xaa),否则不会有SNAP字段
      • S.SAP:源服务接入点,源的上层协议是什么,如果使用「私有化协议」,这里会标识SNAP(0xaa),否则不会有SNAP字段
      • Control:保留字段0x03
    • SNAP:子网络服务接入点,「私有化协议」才会有这个,如果是公有化协议,没有这个字段
      • org Code:机构标识,「这个私有协议谁开发的?」
      • Type:标识「私有化协议」是什么
    • Data:数据
    • FCS:帧校验序列,校验使用

1.3 MTU

  1. MTU:最大传输单元,网络层的包最大值 ,也就是上述的Data最大值。
  2. 注意,一个数据包,分片是在网络层完成的,网络层在交付给数据链路层时,会查看MTU,如果超过了,则分片,如果禁止分片,那么继续往下传;但是数据链路层会检查MTU,如果此时超过了MTU大小,会直接丢弃。
    • 错误理解:网络层先不理会MTU,当数据链路层发现超过MTU了,再交给网络层分片。

1.4 MAC地址

  1. 单播mac地址:高位到低位(从左往右),第八位,一定是0
  2. 组播mac地址:高位到低位(从左往右),第八位,一定是1,只能充当目的mac地址
    • 组播:通信形式上,点对多点,单对多的通信。
  3. 广播mac地址:只能充当目的mac地址,全为1
  4. 注意,在转发报文时,源mac和目的mac一直会变,例如A通过路由器C发送到B(假设A和路由器接口1相连,B和路由器接口2相连),A发现B和自己不是一个网段的,因此发给网关,所以,源mac就是A的mac,目的mac就是路由器接口1的mac,然后路由器拿到数据包后,会将源mac改成接口2的mac,目的mac改成B的mac。

1.5 ARP协议

  1. 封装在数据链路层之上,ARP之上没有协议了。

  2. 主要字段

    • sender-ip:源IP地址

    • sender-mac:源mac地址

    • target-ip:目标ip地址

    • target-mac:填全0。

  3. 如果数据链路层使用E2

    • D.MAC:ARP请求时,全f,广播。ARP响应时,是对应的mac,单播。
    • S.MAC:源mac
  4. 免费ARP

    • 配置完一个IP地址后,会发送一个包,源IP地址,和目的IP地址都是自己,源mac是自己,目的mac是全f,也就是广播,如果没有人回包,说明这次没有冲突,如果有人回包里,说明冲突了。
    • 免费ARP用来探测IP地址是否冲突。
posted @   ouyangxx  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示