数据链路层
一、关于数据链路层
在数据链路层,任何设备(包括主机、路由器、交换机等)都被称为节点,链接相邻节点的通信信道称为链路。
数据链路层的基本作用就是将网络层的数据包封装成帧交给物理层发送到链路上,或者把从物理层中接收到的帧中的数据报取出并交给网络层。
因此,数据帧是数据链路层最基本的协议数据单元,局域网中最常见的Ethernet以太网使用的是MAC帧。
数据链路层的服务大部分通过网络适配器(亦称网卡,Network Interface Card,NIC)完成。而高层链路层功能由运行在CPU上的软件完成。因此,链路层是硬件和软件的结合体,是协议栈中软件与硬件交接的地方。
二、局域网通信原理
以太网是使用最广泛的局域网技术。在网络中,计算机使用传输介质(例如网线)进行连接,数据通过传输介质进行传输来完成整个通信过程。
在局域网里,计算机要查找彼此并不是通过IP进行的,而是通过MAC地址。
1、MAC地址
MAC地址是用于唯一标识网卡的6字节十六进制数,形如00:0C:35:CA:EA:61
,也被称作物理地址、以太网地址、硬件地址。
在Linux下可以通过ifconfig
指令查看MAC地址。
2、以太网的工作流程
以太网中所有节点都可以看到在网络中发送的所有信息,因此,以太网是一种广播网络。
当以太网中的一台主机要传输数据时,工作过程如下:
-
监听信道上是否有信号在传输。如果有,则表示信道处于忙碌状态,此时继续监听,直到信道空闲为止。
-
若没有监听到任何信号,即信道空闲,就传输数据。
-
传输数据的时候继续监听,如果发现冲突,则执行退避算法。随机等待一段时间后,重新执行步骤1。当冲突发生时,涉及冲突的计算机会返回监听信道状态。若未发现冲突,则表示发送成功。
注:如果是要局域网内所有节点接收并处理数据,则需要使用广播MAC地址。
3、令牌环网
在局域网中,任何时刻只允许一个节点向网络发送数据,所以局域网本质是一种临界资源,如果有多个节点同时发出数据,则会导致数据碰撞。
因此,令牌环网应运而生,通过“令牌”限制访问网络,以解决冲突。但是这种局域网技术在21世纪后不再常见。
三、以太网MAC帧
-
目的MAC与源MAC:即接收方与发送方的MAC地址
-
类型:上层协议的类型。由于上层协议众多,所以在处理数据的时候必须设置该字段,标识数据交付哪个协议处理。例如,字段为 0x0800 时,表示将数据交付给 IP 协议,0x0806表示交付ARP协议,0x8035表示交付RARP协议。
-
数据:即网络层交付下来的数据包,大小必须控制在46~1500字节
-
CRC:用来检测该MAC帧是否出现差错。
MTU
MTU,即最大传输单元(Maximum Transmission Unit),是数据链路层提供给上层协议的一次传输数据的最大大小,即:帧的有效载荷最大长度。
MTU的值一般都设为1500。
以太网要求有效MAC帧的长度为64~1518字节,而**MAC帧的基本控制字段为18字节(6+6+2+4),因此MAC帧数据字段的大小必须控制在46~1500字节**。
当上层交给数据链路层的数据小于46字节时,会被填充至最小长度。
以典型的TCP和IP协议为例(设MTU为1500):
当上层为IP协议,那么IP数据包的大小必须小于等于1500,如果IP报头不包含选项,那么IP报文的有效载荷不得超过1480字节,即TCP报文段不得超过1480。而TCP报头的基本长度为20字节(不包括选项),那么TCP的有效载荷不得超过**1460**!
因此,又引入了最大报文段长度(MSS, Maximum Segment Size)的概念,用来控制TCP数据段的最大长度,该值缺省为1460。MSS在三次握手阶段通过报文的选项字段进行交换。
当然,从发送方到目的地的路径上每条链路都可能使用不同的链路层协议,且每种协议可能具有不同的MTU,因此会导致IP分片的问题。
四、ARP协议
ARP协议,即地址解析协议(Address Resolution Protocol),是工作在网络层和数据链路层之间的协议,用于将IP地址转换成MAC地址供局域网通信。
1、ARP报文格式
![img](https://i-blog.csdnimg.cn/blog_migrate/4de6be55961ed14848857f5ed9d9abfa.jpeg)
-
硬件类型:表示数据链路层的网络类型,1表示以太网;
-
协议类型:表示要将哪种协议的地址转换成物理地址,0x80表示IP协议;
-
硬件地址长度:对于以太网MAC地址为6字节;
-
协议地址长度:对于IP地址为4字节;
-
OP:为1表示ARP请求报文,为2表示ARP应答报文
2、ARP协议工作原理
-
当报文传递到数据链路层时,主机/路由器会根据报文的目的IP到本地的ARP缓存中查找IP:MAC地址的映射关系;
-
如果查找不到,则发起ARP请求,将OP置为1,然后填写发送方MAC和IP以及目的IP、目的MAC(这里应为广播MAC地址,即全1)等信息;填写完毕后,将请求广播至局域网内的所有主机;
-
局域网内的主机将ARP请求报文的目的IP与自己的IP进行比对,不匹配则丢弃;
-
若IP匹配,则将请求方的IP:MAC映射缓存到本地,然后返回ARP应答,将OP置为2,然后填写发送方和接收方的MAC与IP;
-
接收方收到ARP应答报文后,将对方的IP:MAC映射缓存至本地,至此完成IP->MAC地址的转换。
注:ARP缓存有生存期TTL,通常为20分钟,生存期结束后会重新进行上述过程