目录
  1. 1. 链路层主要目的
  2. 2. 以太网
  3. 3. 环回接口(loopback)
  4. 4. 最大传输单元MTU、路径MTU

链路层主要目的

 TCP/IP支持多种链路层协议,不同的网络硬件设备使用不同链路层协议,如:以太网协议、令牌环、FDDI和PPP等。链路层主要有三个目的:

  • 为IP模块发送和接受IP数据报
  • 为ARP模块发送ARP请求和接受ARP应答
  • 为RARP模块发送RARP请求和接受RARP应答

以太网

 以太网是目前TCP/IP在局域网中最主要的技术,采用CSMA/CD(带冲突检测的载波侦听多路接入)接入方法,地址为48bit(既MAC地址)。然而以太网是几家公司联合发布的一个技术标准,后来IEEE发布802标准(802.3针对CSMA/CD网络)。但实际上目前局域网中绝大多数都是以太网包,802.3的包有使用但极少。以太网帧结构和802.3帧结构是完全不同的,以下我主要记录以太网包相关的内容。

###以太网帧结构
 以太网规定以太网帧中的数据长度在46~1500字节之间。最小不少于46字节,不足46字节的必须加入填充(PAD)字节;最大不得超过1500字节(1500既MTU)。所以一个正常的以太网帧长度应该在64~1518字节之间,由帧头部+数据+帧尾校验组成

1
| 目的地址(6) | 源地址(6) | 类型(2) | 数据(46~1500) | CRC(4) |

###以太网帧中的类型字段
 在以太网帧结构中有2字节的类型字段,其主要目的是为了标识上层协议类型。常见的有以下三种类型,更详细的类型参见这里

  • IP协议——0x0800
    IP数据报在以太网帧中的类型字段以0x0800表示,数据部分大小依旧是46~1500字节

    1
    | 目的地址(6) | 源地址(6) | 0x0800 | 数据(46~1500) | CRC(4) |
  • ARP协议——0x0806
    ARP的请求或应答包在以太网帧中的类型字段以0x0806表示,但数据部分ARP包只有28字节,不满足以太网规定的最小46字节,所以ARP包的数据部分会有18字节的PAD填充字节

    1
    | 目的地址(6) | 源地址(6) | 0x0806 | ARP请求/应答数据(28) + PAD填充字节(18) | CRC(4) |
  • RARP协议——0x0835
    RARP和ARP差不多,数据部分也只有28字节,需要填充18字节

环回接口(loopback)

 通常我们会把127.0.0.1分配给环回接口并命名为localhost传给环回接口的IP包不能出现在任何网络上。环回接口是个比较特殊的接口,此接口会有些有趣或特殊的应用,比如LVS的DR模式中会将VIP配置在RealServer的lo:0环回设备上。
 以下三种情况环回接口处理数据包时,数据包直接经过环回接口驱动程序传入上层,数据包并没有经过网卡输出到以太网后再返回。所以当我们ping 127.0.0.1或本机IP地址时,数据包是直接通过环回驱动程序再回到上层。

  • 目的IP为环回接口地址。IP输出函数——>环回驱动程序——>IP输入函数
  • 目的IP为广播或多播地址。
  • 目的IP为本机接口IP地址。

除以上三种情况外的目的IP数据包会通过ARP协议找到目的IP的MAC地址后进行发送到以太网

最大传输单元MTU、路径MTU

 数据帧中可容最大数据长度称为MTU,在不同帧结构中MTU是不同的,以太网的MTU是1500字节。我们可以通过netstat -in命令查看MTU信息
 当网络上两台主机通信时,会经过路由选路确定一条路径,在这条路径上可能会有不同的网络或设备的MTU。所谓的路径MTU则是在这条路径中最小的MTU。两台主机间的路径MTU并不一定是固定的,因为路径MTU取决于所选路径。
 由于链路层有MTU限制,所以当IP层要传的数据包大于MTU时,网络层则需要进行IP分片,而且由于路径上的MTU可能会不同,所以数据包可能会被进行多次分片。有关IP分片的详细内容会在网络层做详细介绍。
 大于MTU的包会有两种处理方式:

  • 直接丢弃。丢弃后会发送ICMP报文告诉源端包太大并通告自身的MTU
  • 重新分块后再发送

Powered: Hexo, Theme: Nadya remastered from NadyMain