基础网络层专门用于解决数据的长距离传输中路径选择的问题。而数据链路层则专门用于解决数据如何前往下一个路由器的问题。数据链路层有很多种技术其中最广泛使用的是以太网。以太网使用的报文是MAC帧MAC帧的报头长度是固定的能够轻松与有效载荷分离。源地址和目的地址是指网卡的硬件地址(也叫 MAC 地址)长度是 48 位。在网卡出厂时就固定了。类型字段用于表示帧类型不同类型的MAC帧会将数据交给上层的不同协议。它有三种值分别对应 IP、ARP、RARP三种协议。与MAC地址相比IP 地址描述的是路途总体的起点和终点而MAC 地址描述的则是路途上的每一个区间的起点和终点。这部分已经在计算机网络网络基础-CSDN博客 中讲过不再赘述。数据长度限制我们知道以太网内同一时刻只能有一台主机通过以太网向外传输数据否则不同的数据会相互干扰导致数据由于一些硬件原因被意外修改这个被称为数据碰撞。因此以太网内的主机发送数据时应该尽可能地快为此数据帧就不能太长也不能太短如果太短发生数据碰撞时可能碰撞信号还没返回发送方已经发送完了误以为发送成功导致数据丢失。所以在MAC帧中数据长度有上限也有下限。数据长度的上限被称为最大传输单元MTU不同数据链路层标准的MTU是不同的以太网的MTU是1500字节。上层的网络层、传输层的协议报文长度都会收到MTU的限制因为太长的话会在网络层分片增加数据丢失的概率。对于TCP协议而言由于最终让数据链路层拿到的报文不能超过MTU将MTU减去IP协议和TCP协议的标准报头长度就得到了TCP协议的报文中数据的最大长度它被称为最大段尺寸MSS。TCP 在建立连接的过程中通信双方会进行 MSS 协商。双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS最终选择较小的那个MSS。对于UDP协议而言由于它是面向报文的不会对数据做分割所以会将所有数据都塞给网络层。如果长度超限了报文就会被网络层分片同时UDP协议也不会管数据丢失的问题所以发生丢失的概率大大增加。ARP协议ARP协议是以太网的地址解析协议属于数据链路层的协议其它种类的局域网也有类似的协议。当数据送达目标主机所在局域网的路由器时如果只知道目标主机的IP地址不知到对方的MAC地址那也没办法将数据送达。所以需要通过ARP协议将IP地址转换为MAC地址。当然ARP协议也没办法直接将IP地址转换成MAC地址而是提取数据的报头中的IP地址生成一份ARP请求报文并在局域网内广播其它主机收到后就会将其丢弃对应的主机收到后就会填写一份ARP应答报文并发回其中就有主机自己的MAC地址。ARP请求/应答格式如图。由于该长度不足MAC帧要求的数据字段长度下限46字节所以其后面会填充一些无意义的内容。另外由于ARP协议并不是用来传输上层协议的数据的所以只有报头没有有效载荷。注意到源MAC 地址图中的以太网地址、目的 MAC 地址在以太网报头和 ARP 报头中各出现一次 对于链路层是以太网的情况这个重复是多余的。但如果链路层是其它类型的网络则有可能是必要的。ARP报头中硬件类型字段指的是数据链路层的网络类型为1 表示是以太网。协议类型指要转换的地址类型为0x0800表示要转换 IP 地址。对于以太网地址硬件地址长度的值为 6字节。对于 IP 地址协议地址长度的值为 4字节。op 字段为 1 表示 该报文是ARP 请求为 2 表示是 ARP 应答。交换机如果一个局域网内主机过多会频繁出现数据碰撞此时需要通过交换机来划分碰撞域。交换机是工作在数据链路层的设备在局域网中主机发送的数据一般会被局域网内的所有主机收到但是引入交换机后交换机会将交换机两侧的主机发送的数据隔开如下图。如果主机将要数据发送到另一侧交换机会进行中转但如果主机发送的数据是给同一侧的主机的那么交换机不会将数据发送到另一侧例如上图的主机A将数据发给路由器右侧的主机就收不到。这样一来就能减少不必要的数据传输进而减少发生数据碰撞的概率。