数据链路层在网络分层中处于倒数第二层,是在物理层上面的一层。他的作用主要是负责处于同一种数据链路节点中的两个设备之间进行传递数据。在数据链路层,将上层网络层下交的IP数据包封装成帧。本文就以太网、MAC、MTU三个重点进行解析。
以太网
在众多的数据链路中,最为出名的就是以太网(Ethernet),他的规范简单,使用网卡及驱动程序实现。
- 以太网是一种标准,它包括了数据链路层的内容,也包含了物理层的内容。
- 以太网中必须使用双绞线,传输速度有10M、100M、1G、10G等
- 跟以太网一起并列的有令牌环网、无线LAN等
以太网帧格式
以太网帧的前端有一个叫做前导码的部分,由0、1交替组合而成,表示一个以太网帧的开始,网卡通过该字段来进行同步识别。前导码一共占用八个字节,最后两个比特位为11,将其称为SDF。在前导码之后就是以太网帧的首部。
以太网帧
- 目标MAC地址和源MAC地址:在同一个数据链路上的两个MAC地址,表示着发送端的和目的端。MAC地址是6个字节的。
- 类型:两字节的上层协议类型,用来拆包之后交付给的上层协议。常见的有:0800IPv4;0806ARP;0835RARP。
- 数据:指的是IP层下交的IP数据包。数据包的大小是46~1500字节。
- 帧尾:是一个校验字段,FCS占四个字节。使用的是CRC校验。
MAC地址
MAC地址是在全世界范围内唯一的地址,它代表的是设备。用来识别数据链路中互联的节点。MAC地址的长度是6字节(48比特位)。一般常见的格式是用十六进制表示,每一个字节之间用:进行分隔。
MTU
**MTU指的是数据链路中的最大传输单元,不同的数据链路中具有不同的MTU。常用的以太网的MTU是1500字节;**FDDI(令牌环网)是4352字节;在以太网中,如果数据包的大小小于46字节,会通过补充0的方式,让它满足46字节(RAP包)
MTU对IP协议的影响
IP层的数据包有可能会超过这个大小,此时就必须将IP数据包进行分片操作。
- 超过1500字节的IP数据包在以太网内会被分成小包,每一个小包都会被打上标签,也就是IP首部中的3位标志位和13位偏移量来标识。
- 每一个小包都有自己的IP首部,使用同一个id字段。
- 到达对端的时候,会进行按序重组,组装之后再上交给传输层。
- 一旦这些小包出现丢失,就会导致重组失败,IP协议会将该数据包丢弃,但是IP协议不会负责重传。数据的可靠性由传输层来保证。
MTU对UDP协议的影响
如果UDP数据报不想被分片操作,那么UDP的数据不能超过1472字节(1500字节-IP首部(20字节,没有变长选项)-UDP首部(8字节))。一旦超过了这个字节,在数据链路层进行传输的时候就会被分片。此时只要丢失了其中一个小包,IP层无法组装成一个完整的数据报。因为UDP是一个不保证可靠性的协议,就会导致IP协议和UDP协议不会要求重传,该报文就默默的丢失了。
MTU对TCP协议的影响
在TCP协议报头中有一个16位总长度,这样表示着TCP报文可以传送大约6万个字节的数据。但是很不巧的是我们以太网的MTU上限是1500字节。所以TCP报文也不能设定得很大。
- 在TCP首部中有一个MSS(单个数据报的最大长度)字段,该字段在选项字段中。
- 当我们进行三次握手建立连接的时候,客户端和服务器端会相互发送各自的MSS,最后会取小的MSS作为最大传输数据报长度。其中MSS不包括TCP报头,指的是TCP报中的数据部分。
- 最理想的MSS就是TCP报文长度+IP包头长度等于1500字节,这样一次传输的数据最多,同时不会被分片。
- 如果发送了分片,同时出现了丢包的情况,TCP获取到数据报的时候,可以通过确认机制请求重传,从而保证了可靠性。
参考资料
- 图解TCP/IP