链路层位于OSI参考模型的第二层,负责在直接相连的设备之间传输数据帧
本文将深入探讨Linux链路层的相关设置,包括以太网帧格式、MAC地址、MTU(最大传输单元)、链路聚合以及ARP协议等关键概念
一、以太网帧格式 以太网是目前应用最广泛的局域网技术,它不仅仅是一种网络,更是一种技术标准
以太网帧包含了数据链路层的内容以及部分物理层的内容,如网络拓扑结构、访问控制方式、传输速率等
以太网帧的基本格式包括源地址、目的地址、帧协议类型字段和CRC校验码
- 源地址和目的地址:这是网卡的硬件地址,也称为MAC地址,长度为48位(6个字节)
MAC地址在网卡出厂时就已经确定,无法修改,并且通常是唯一的
MAC地址用于识别数据链路层中相连的节点,采用16进制数字加冒号的形式表示,如08:00:27:03:fb:19
- 帧协议类型字段:该字段有三种值,分别对应IP、ARP(地址解析协议)和RARP(反向地址解析协议)
- CRC校验码:帧末尾的CRC(循环冗余校验)码用于检测数据在传输过程中是否出错
二、MAC地址 MAC地址是链路层中的关键概念,用于唯一标识网络中的设备
它描述的是数据在传输路径上每一个区间的起点和终点
与IP地址不同,MAC地址只在局域网内有效,当数据交给路由器时,需要重新解包封装,MAC地址会改变
在实际应用中,虚拟机中的MAC地址并非真实的MAC地址,可能会发生冲突
有些网卡支持用户配置MAC地址,但这并不常见
MAC地址的重要性在于它是交换机转发数据帧的依据
交换机内部有一个MAC地址表,记录了网络中所有MAC地址与该交换机各端口的对应信息
当交换机收到数据时,它会检查目的MAC地址,并将数据从目的主机所在的接口转发出去
三、MTU(最大传输单元) MTU相当于在发快递时对包裹尺寸的限制,这个限制是由不同的数据链路对应的物理层产生的
以太网帧中的数据长度规定最小为46字节,最大为1500字节,这个最大值称为以太网的最大传输单元(MTU)
不同的网络类型有不同的MTU,如果一个数据包从一个网络路由到另一个MTU较小的网络上,需要对数据包进行分片
MTU对IP协议、UDP协议和TCP协议都有重要影响: - IP协议:由于数据链路层MTU的限制,较大的IP数据包需要进行分片
每个分片都会打上标签,并在到达对端时按顺序重组
如果任意一个小包丢失,接收端的重组就会失败,但IP层不会负责重新传输数据
- UDP协议:UDP携带的数据超过1472字节(1500 - 20(IP首部)- 8(UDP首部))时,会在网络层分成多个IP数据报
这些IP数据报有任意一个丢失,都会引起接收端网络层重组失败,导致整个数据被丢失的概率大大增加
- TCP协议:TCP的一个数据报也不能无限大,受限于MTU
TCP的单个数据报的最大消息长度称为MSS(Maximum Segment Size)
TCP在建立连接的过程中,通信双方会进行MSS协商,选择较小的MSS值作为最终MSS
在Linux系统中,可以使用`ifconfig`命令查看网卡的MTU
四、链路聚合 链路聚合是提高网络带宽和可靠性的重要技术
Linux系统中,常用的链路聚合模式有bond和team两种
- bond模式:最多可以添加两块网卡,支持多种聚合策略,如balance-rr(平衡抡循环策略)、active-backup(主-备份策略)、balance-xor(平衡策略)、broadcast(广播策略)、802.3ad(IEEE 802.3ad动态链接聚合)、balance-tlb(适配器传输负载均衡)和balance-alb(适配器适应性负载均衡)
- team模式:最多可以添加八块网卡,支持broadcast、activebackup、roundrobin(轮询模式)、loadbalance(负载均衡)和lacp等聚合策略
轮询模式和负载均衡模式都能增加带宽,同时支持容错能力
在Linux中,可以使用nmcli命令来配置bond和team
例如,配置一个bond接口bond0,并将ens33和ens37两块网卡添加到bond0中,然后配置bond0的IP地址、网关等参数,最后启动bond0
同样,也可以为team接口配置相应的参数,并添加网卡到team中
五、ARP协议 ARP(地址解析协议)是一个介于数据链路层和网络层之间的协议,用于通过IP地址获取对应的MAC地址
在网络通讯中,源主机的应用程序知道目的主机的IP地址和端口号,但不知道目的主机的硬件地址(MAC地址)
因此,在通讯前必须获得目的主机的硬件地址
ARP协议的工作流程如下: 1. 源主机发出ARP请求(广播),询问目标IP地址的主机的硬件地址是多少,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播)
2. 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中
3. 源主机收到ARP应答后,将目的主机的MAC地址缓存起来,以便后续通讯使用
每台主机都维护一个ARP缓存表,可以使用`arp -a`命令查看
缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还需要发ARP请求来获得目的主机的硬件地址
总结 Linux链路层的设置涉及多个关键概念和技术,包括以太网帧格式、MAC地址、MTU、链路聚合和ARP协议等
这些概念和技术在网络通讯中发挥着重要作用,对于提高网络带宽、可靠性和安全性具有重要意义
在Linux系统中,可以使用ifconfig、nmcli等命令来查看和配置链路层的参数,以满足不同的网络需求
通过深入理解Linux链路层的设置,网络管理员可以更好地管理和优化网络环境,确保网络的稳定性和高效性
同时,对于学习网络技术的人来说,掌握这些概念和技术也是必不可少的