数据链路层的重点协议
数据链路层的重点协议
在另一篇介绍 IP 协议的博客中:https://blog.csdn.net/m0_61925333/article/details/126028282?spm=1001.2014.3001.5502
解析了IP协议的header后,可以发现,在首部中并没有存放下一跳,即短期目标的空间
事实上下一跳的IP主要是给数据链路层使用的
以太网
“以太网” 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了 一些物理层的内容
除了以太网之外的局域网技术还包括有以太网、令牌环网、无线协议
以太网通过以太帧(Ethernet Frame)来进行数据的封装,封装好之后,将以太帧作为数据包通过物理介质进行真正的传输
以太网帧的格式:
- 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的
- 帧协议类型字段有三种值,分别对应IP、ARP、RARP
- 帧末尾是CRC校验码
抓包之后,来看看以太网帧的存储的mac地址
在以太帧的首部中,封装了短期目标的mac地址
同时我们已经知道在数据链路层,是通过mac地址来唯一确定两台主机的,那么数据链路层是怎么把IP地址转换成mac地址的?
先问一个问题,下一跳的IP地址,是否属于当前局域网内(或者是其网络号是否一致)?
答案是肯定的,在数据链路层只能处理同一个LAN内部的主机通信问题,如果下一跳的IP地址不在同一局域网内,那么数据链路层就无法处理了,反过来,想要通过数据链路层完成通信,下一跳的IP地址一定是同一局域网内的
如果说在不同的局域网之间,私有IP可能会重复,但是在同一个局域网之内,私有IP是不能重复的
那么数据链路层就能通过一张ARP表来维护每台主机的IP与mac地址,使其称为唯一对应,这样,数据链路层就能通过将IP地址转换为mac地址,完成短期目标的通信
比如上图中存在3个设备,左右两侧为主机,中间为路由器,左侧IP为192.168.1.9的主机中,算出下一跳的地址为192.168.1.1,然后数据链路层就能根据下一跳的IP地址,算出mac地址为mac2,然后数据传输到mac2,到达中间的路由器;由于中间的路由器连接两个路由器,因此两边各有一个局域网,两者的IP不同,于是根据另一个局域网的IP100.76.0.3/24地址算出下一跳的IP地址是100.76.0.1/24,然后数据链路层有根据这个IP地址得到mac地址mac4,最后完成数据的传输
当所有数据都封装好之后,就是这样的:
ARP协议
通过ARP协议能够知道同一LAN下,其他主机的IP与mac地址之间的映射关系
在本地内部通过一张ARP表来进行维护,类似于Map<IP, MAC>这样的结构
静态地址是自带或者手动配置的
其中这些动态计算出来的mac地址是怎么计算的?
通过ARP(Address Resolution Protocol)协议
可广播一份ARP请求说:我的mac地址是aaa,我想知道xxx IP的mac地址
然后应答一份ARP响应:我是xxx,mac地址是bbb
MTU
MTU全称为 Maximum Transmission Unit - 最大传输单元,MTU是数据链路层对每次能发送数据的大小限制
由于物理层存在硬性限制,因此对应的数据链路层也有一定的大小范围,因此有了MTU
MTU的存在,对其它层也会有一定的影响
- 对IP层:表现为分片问题
- TCP协议:MSS受制于MTU
- UDP协议:有最大报文大小