数据链路层
1.1 Ethemet II协议
- 帧格式:
D.MAC
+S.MAC
+Type
+Data
+FCS
D.MAC
:目的MAC地址S.MAC
:源MAC地址Type
:上层使用的协议Data
:数据FCS
:帧校验序列,校验使用
- 一个设备收到帧时
- 1️⃣先检查
D.MAC
是不是自己,如果不是自己,直接扔了 - 2️⃣查看
FCS
,校验是否通过,如果不通过,直接扔了 - 3️⃣查看
Type
,上层的协议
- 1️⃣先检查
- 优点就是简单,缺点就是,
Type
字段,必须所有设备都要支持该协议,如果某些厂商想要研发一些「私有化的协议」,那么就不能使用E2协议
1.2 IEEE802.3协议
- 注意,该协议和E2协议,都是以太网协议
- 帧格式:
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
- MTU:最大传输单元,网络层的包最大值 ,也就是上述的
Data
最大值。 - 注意,一个数据包,分片是在网络层完成的,网络层在交付给数据链路层时,会查看MTU,如果超过了,则分片,如果禁止分片,那么继续往下传;但是数据链路层会检查MTU,如果此时超过了MTU大小,会直接丢弃。
- 错误理解:网络层先不理会MTU,当数据链路层发现超过MTU了,再交给网络层分片。
1.4 MAC地址
- 单播mac地址:高位到低位(从左往右),第八位,一定是0
- 组播mac地址:高位到低位(从左往右),第八位,一定是1,只能充当目的mac地址
- 组播:通信形式上,点对多点,单对多的通信。
- 广播mac地址:只能充当目的mac地址,全为1
- 注意,在转发报文时,源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协议
-
封装在数据链路层之上,ARP之上没有协议了。
-
主要字段
-
sender-ip
:源IP地址 -
sender-mac
:源mac地址 -
target-ip
:目标ip地址 -
target-mac
:填全0。
-
-
如果数据链路层使用E2
D.MAC
:ARP请求时,全f,广播。ARP响应时,是对应的mac,单播。S.MAC
:源mac
-
免费ARP
- 配置完一个IP地址后,会发送一个包,源IP地址,和目的IP地址都是自己,源mac是自己,目的mac是全f,也就是广播,如果没有人回包,说明这次没有冲突,如果有人回包里,说明冲突了。
- 免费ARP用来探测IP地址是否冲突。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了