TCP/IP协议族的数据链路层基础(1)——MTU

     数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介(比如以太网,令牌环网等)上的传输。不同的物理网络具有不同的电气特性,网络驱动程序隐藏了这些细节,为上层协议提供了一个接口。
    数据链路层常用的两个协议是ARP协议(Address Resolve Protocol,地址解析协议)和RARP协议(Reverse Address Resolve Protocol,逆地址解析协议)。它们实现了IP地址和机器物理地址(通常是MAC地址,以太网,令牌环网,无限网卡等都是使用的MAC地址)之间的相互转换。
    网络层必须先将目标机器的IP地址转化为物理地址才能够使用数据链路层提供的服务,这就是ARP协议的用途。而RARP仅用于网络上的某些无盘工作站,它们无法记住自己的IP地址,但可以利用网卡上的物理地址来向网络管理者(服务器或网络管理软件)查询自己的IP地址

以太网
  • 以太网不是一种具体的网络,而是一种技术标准;既包含了数据链路层内容,又包含了物理层的内容。
  • 以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M
  • 与以太网并列的还有无线LAN,令牌环网等

以太网帧格式
TCP/IP协议族的数据链路层基础(1)——MTU
  • 目的地址和源地址是指网卡的硬件地址(即MAC地址 ),长度是48位(6字节),是在网卡出厂时固化的
  • 帧协议类型字段有三个值:分别对应IP(0x800)、ARP(0x806)、RARP(0x835)
  • 帧末尾是CRC校验码

MAC地址
  • MAC地址用来用来识别数据链路层中相连的节点
  • 长度是48位(6个字节),一般用16进制数加上冒号的形式来表示(如08:00:27:03:fb:19)
  • MAC地址在网卡出厂时就设定了,不能修改。MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址)

MAC地址与IP地址的区别(下面这样理解很好理解)
  • IP地址描述的路途的起点与终点
  • MAC地址描述的是这个路途中某一段区间的起点和终点
TCP/IP协议族的数据链路层基础(1)——MTU
MTU (最大传输单元)
        MTU相当于是数据在数据链路层被打包后最大的一个包大小(以太网是1500字节),这个限制是不同的数据链路对应的物理层产生的限制
  • 以太网帧中的数据长度规定为最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位
  • 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,需要对数据包进行分片
  • 不同的数据链路层标准的MTU是不同的

MTU对IP协议的影响
由于数据链路层MTU的限制,就要对较大的IP数据包进行分包
  • 将较大的IP包分成多个小包,为每个小包打上标签
  • 每个小包的IP协议头的16位标识部分都是相同的
  • 每个小包的IP协议头的3位标志字段中,第2位置为0(为0表示可以分片),第三位表示结束标记(当前包是否为最后一个包,如果是则置为1,否则置为0)
  • 到达对端时再将这些小包按顺序重组,拼装到一起返回给传输层
  • 一旦小包中任意一个丢失,接收端的重组就会失败,但是IP层不会负责重新传输数据

TCP/IP协议族的数据链路层基础(1)——MTU

MTU对UDP协议的影响
TCP/IP协议族的数据链路层基础(1)——MTU
  • 一旦UDP的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么就会在网络层分成多个IP数据报
  • 这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败,这就意味着,如果UDP数据报在网络层被分片,整个数据报被丢失的可能性就大大增加了

MTU对TCP协议的影响
  • TCP的一个数据报也不能无限大,还是受限制于MTU,TCP的单个最大数据报的最大消息长度,称为MSS(Max Segment Size)
  • TCP在建立连接的过程中,通信双方会进行MTU协商
  • 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然受限制于数据链路层的MTU)
  • 双方在发送SYN的时候会在TCP首部写入自己能支持的MSS值
  • 然后双方得知对方的MSS之后,选择较小的作为最终MSS
  • MSS的值就是在TCP首部的40字节变长选项中(kind=2)

下图是关于MSS和MTU的两者之间的关系图
TCP/IP协议族的数据链路层基础(1)——MTU