链路层主要有三个目的:

  1. 为IP模块发送和接收IP数据报
  2. 为ARP模块发送ARP请求和接收ARP应答
  3. 为RARP发送RARP请求和接收RARP应答

TCP/IP常用的链路层协议有:以太网,令牌环网等。并且大多数都实现了环回(loopback)驱动程序。

以太网

以太网是TCP/IP采用的主要局域网技术,采用称作CSMA/CD的媒体接入方法,意思是带冲突检测的载波侦听多路接入。

以太网的封装格式:

  • 使用48bit(6字节)的目的地址
  • 使用48bit(6字节)的源地址 - 硬件地址,ARP和RARP协议对32bit的IP地址和48bit的硬件地址进行映射。
  • 2字节的类型:定义了后续数据的类型
  • 数据字节:46到1500字节不等,最低46字节,不足的空间插入填充字节,最大受限于MTU
  • CRC:用于帧内后续字节差错的循环冗余检验 4字节

为何是46字节

最初协议标志定义的Ethernet Frame的最小值:Preamble + SFD + MAC destination + MAC source + Ethertype + Payload + CRC = 7 + 1 + 6 + 6 + 2 + 46 + 4 = 72 Bytes = 576 bit

576bit就是72字节,减去前导符和帧开始符,剩下64字节,再减去目的地址和源地址和类型以及CRC,就剩46字节。

最大传输单元MTU

以太网对数据帧的长度有一个限制,最大值是1500和1492字节,链路层的这个特性称作MTU,最大传输单元。(标准以太网接口缺省的MTU为1500,而现在的以太网接口普遍可以通过配置使得MTU远远大于1500。)

如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就要进行分片(fragmentation)。

可以在系统上执行netstat -in查看本机的MTU

路径MTU

在网络上,每个网络的链路层可能有不同的MTU,所以重要的不是两台主机所在网络的MTU,而是两台通信主机路径中的最小MTU,被称为路径MTU。

环回接口

允许运行在同一台主机上的客户端和服务器程序通过TCP/IP通信,A类网络号127就是为环回接口预留的。大多数系统把IP地址127.0.0.1分配给这个接口,并且命名为localhost。一个传给环回接口的IP数据报不能在任何网络上出现。

一般在传输层检测到目的端地址是环回地址的时候就可以省略部分传输层和所有网络层的逻辑。但是目前大部分还是完成传输层和网络层的过程,在IP数据报在离开网路层的时候把它返回给自己。

传回环回地址的数据都会被作为IP输入,放入IP输入队列中。环回接口可以看作网络层下面的另一个链路层,网络层将一份数据报传送给环回接口,就像传给其他链路层一样,只不过环回接口把它返回到IP的输入队列中。

而且任何传给该主机IP地址的数据均送到环回接口。

附录

  1. 车小胖谈网络:Ethernet Frame