目录
以太网
以太网帧格式
MAC地址
MAC 地址的结构
MAC 地址 和 IP 地址
ARP协议
ARP的工作原理
ARP缓存
RARP 协议
MTU
MTU 对 IP 协议的影响
MTU 对 UDP 协议的影响
MTU 对 TCP 协议的影响
数据链路层是 TCP/IP 五层协议模型中的第二层,主要负责 在相邻的网络节点之间传输数据帧
以太网 不是一种具体的网络,而是一种技术标准,是当前应用最广泛的局域网技术,它定义了数据链路层和物理层的标准,使得不同设备能够在同一个网络中进行有效的通信
以太网数据传输的单位是 帧,接下来,我们就来学习 以太网帧格式
6 位目的地址(Destination MAC Address):目标设备的 MAC 地址
6 位源地址(Source MAC Address):发送设备的 MAC 地址
2 位类型(Type):指示上层协议类型
数据(Data):46-1500 字节,实际传输的数据
4 位CRC校验码:用于检测传输错误
其中源地址和目的地址使用的是 MAC 地址,那么,什么是 MAC 地址?MAC 地址和 IP 地址有什么区别呢?我们接着来学习
MAC地址(网卡的硬件地址)用于识别数据链路层中相邻的节点,是用于在网络上唯一标识设备的物理地址。每个网络接口卡(NIC)或网络设备都有一个独特的MAC地址
长度:MAC 地址的长度为 48 位,即 6 字节,以16进制表示
格式:通常写成 6对 十六进制数,每对数字之间使用 冒号 : 或 短横线 - 分割,如:
00:8a:2b:5c:4d:13
00-8a-2b-5c-4d-13
由于 MAC 地址的长度为 48 位,也就是 2 的 48 次方,是足够用的,因此,MAC 地址在网卡出厂时就确定了,与网卡一对一绑定,不能修改,MAC 地址通常是唯一的(虚拟机中的 MAC 地址不是真实的 MAC 地址,可能会冲突,此外,有的网卡支持用户配置 MAC 地址)
IP 地址作用于网络层,描述的是 路途总体的起点和终点,侧重于全局的转发
MAC 地址作用于数据链路层,描述的是路途上的每一个区间的起点和终点,侧重于局部的转发
例如:需要将数据从主机A发送到主机B
由于不能直接从主机A到达主机B,因此,需要规划从主机A到主机B的路线:
主机A -> 路由器1 -> 路由器4 -> 主机B
主机A -> 路由器1 -> 路由器3 -> 路由器4 -> 主机B
主机A -> 路由器1 -> 路由器2 -> 路由器5 -> 路由器4 -> 主机B
......
上述规划路线的过程就是网络层路由选择的过程,假设选择了
主机A -> 路由器1 -> 路由器4 -> 主机B
这条路线
每经过一个路由器(或交换机),源MAC 地址 和 目的 MAC地址 都会发生改变,若不考虑 NAT,源 IP 和 目的 IP 始终不会改变
主机A -> 路由器1
源IP:主机A IP 目的IP:主机B IP
源MAC:主机A MAC 地址 目的MAC:路由器1 MAC 地址
路由器1 -> 路由器4
源IP:主机A IP 目的IP:主机B IP
源MAC:路由器1 MAC 地址 目的MAC:路由器4 MAC 地址
路由器4 -> 主机B
源IP:主机A IP 目的IP:主机B IP
源MAC:路由器4 MAC 地址 目的MAC:主机B MAC 地址
通过路由表,可以通过 IP 查询走哪个网络接口,但此时并不知道下一个节点的 MAC 地址
如何确定下一个节点的 MAC 地址,就需要使用 ARP 协议
ARP(地址解析协议,Address Resolution Protocol)主要用于将网络层(IP地址)地址解析为数据链路层(MAC地址)地址。ARP在局域网(LAN)中非常关键,因为它允许 设备通过IP地址找到其他设备的MAC地址,从而进行数据传输
当一个设备(源设备)需要与网络上另一个设备(目标设备)通信时,它知道目标地址的IP地址,但不知道其 MAC 地址
源设备会广播一个 ARP 请求包到网络上,该请求包包含 源设备的 IP 地址 和 MAC 地址,以及目标设备的 IP 地址,询问 :“这个IP地址是谁的?请告诉我你的MAC地址”
网络上所有设备都会接收到这个 ARP 请求,只有拥有该目标 IP 地址的设备会做出回应
目标设备会发送一个 ARP 响应包,包含自己的 MAC 地址,告知源设备自己的 MAC 地址(响应包是单播的,直接发送到源设备的 MAC 地址)
源设备接收到 ARP 响应后,将目标设备的 IP 地址和 MAC 地址映射存储到本地的 ARP 缓存中,以便后续通信直接使用
同理,目标设备也可以将源设备的 IP 地址 和 MAC 地址映射存储在自己的 ARP 缓存中
ARP缓存(ARP Cache):是设备内存中的一个表格,用于存储IP地址到MAC地址的映射。缓存可以加快数据传输,因为设备不需要每次都广播ARP请求,而是可以直接使用缓存中的信息
ARP缓存中的条目会有一个过期时间,过期后,设备会再次发送ARP请求以更新缓存。这样可以确保MAC地址的变化得到及时反映
在了解了 ARP 之后,我们来看 RARP 协议
RARP(逆地址解析协议,Reverse Address Resolution Protocol)用于让网络设备通过它的MAC地址请求到相应的IP地址
ARP 是通过 IP 地址 查找 MAC 地址
RARP 是通过 MAC 地址 查找 IP 地址
通常在设备启动时使用,尤其是在那些没有持久存储的设备上
设备广播一个RARP请求包到网络,包中包含设备的 MAC 地址,询问网络中的 RARP服务器 其对应的IP地址
RARP 服务器接收到请求后,根据 MAC 地址查找对应的 IP 地址,并将其封装在 RARP 响应包中,发送回请求设备
设备接收到 RARP 响应后,配置其 IP 地址,并继续启动过程
MTU(最大传输单元,Maximum Transmission Unit)指 网络中可以传输的最大数据包的大小,决定了单个数据包的最大字节数(包括数据和头部)
相当于发快递时对包裹尺寸/重量的限制
以太网帧中的数据长度规定最小 46 字节,最大 1500 字节,ARP数据包的长度不够 46 字节时,要在后面补填充位;最大值 1500 为以太网的最大传输单元(MTU),不同的网络类型有不同的 MTU
由于数据链路层 MTU 的限制,当一个IP数据包的大小超出了网络中某个链路的最大传输单元,就需要将其分成多个较小的数据包进行传输
分包:
将较大的 IP 包分成多个小包,并给每个小包打上标签,
每个小包 IP 协议头的16位标识(id)都是相同的,
每个小包的 IP 协议的 3位标志字段中,第二位置为0,表示允许分片,第三位表示结束标记,若当前是最后一个包,则置为1,否则置为0
当到达对端时,会将这些小包按顺序重组,拼装后再传给传输层
组包:
每个分片都带有标识符,通过 标识(id)识别它们是否属于同一个原始数据包
检查分片标志,确保是否所有的分片都已到达
通过片偏移字段确定每个分片的位置
一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但IP层不负责重新传输数据
UDP数据报文不提供分片功能,因此,当UDP数据包超过链路的MTU时,就会在网络层分成多个IP数据报
这些 IP 数据报若有任意一个丢失,都会引起接收端网络层重组失败,这也就意味着,若 UDP 数据报在网络层被分片,整个数据丢失的概率就会大大增加
TCP 的一个数据报也不能无限大(受制于 MTU),TCP的单个数据报的最大消息长度,称为 MSS(Max Segment Size)
TCP 在建立连接的过程中,通信双方会进行 MSS 协商
最理想的情况下,MSS的值正好是在IP不被分片处理的最大长度
双方在发送 SYN 时,会在 TCP 头部(选项中)写入自己能支持的 MSS 值
双方在得知对方的 MSS 值后,选择较小的作为最终 MSS