数据链路层

两个设备在同一个局域网中进行通信.

具体来说:

  1. 同一局域网内
  2. 两个同类型数据链路节点(如网卡、交换机)之间
  3. 直接传递数据帧

以太网协议

以太网帧格式

字段 长度(字节) 作用
目的地址 6 接收方 MAC 地址,用于局域网内寻址
源地址 6 发送方 MAC 地址
类型 2 标识上层协议类型(如0x0800=IPv4,0x0806=ARP)
数据 46~1500 承载上层协议数据(如 IP 数据报、ARP 报文等)
CRC 4 循环冗余校验,用于检测帧传输错误

认识MAC地址

  • 核心作用 :MAC地址是数据链路层中用于唯一标识相连节点的硬件地址,负责在局域网内完成设备间的寻址与数据交付。
  • 格式与长度 :长度为48位(6字节) ,通常采用XX:XX:XX:XX:XX:XX的十六进制冒号形式表示,例如:08:00:27:03:fb:19
  • 唯一性与可变性
    • 物理网卡的MAC地址在出厂时固化,理论上全球唯一,不可随意修改。
    • 虚拟机的MAC地址虚拟分配,并非真实硬件地址,可能出现地址冲突。
    • 部分网卡支持用户手动配置MAC地址(即MAC地址克隆/修改),存在一定灵活性。

认识MTU

MTU(最大传输单元,Maximum Transmission Unit)可以类比为快递包裹的尺寸限制,它是不同数据链路对应的物理层所产生的传输长度约束。

  • 以太网帧数据长度约束 :以太网帧中数据段的长度被规定为最小46字节最大1500字节。若ARP数据包长度不足46字节,需要在其后填充补足(PAD字段)。
  • 以太网MTU定义 :以太网数据段的最大长度1500字节,即为以太网的最大传输单元(MTU);不同网络类型对应不同的MTU值。
  • 跨链路分片机制 :当数据包从以太网路由至拨号链路等其他链路时,若数据包长度超过目标链路的MTU,就需要对数据包进行**分片(fragmentation)**处理,拆分为符合目标链路MTU要求的多个分片
  • MTU的差异性:不同数据链路层标准(如以太网、PPP、令牌环等)所规定的MTU数值各不相同。

使用ifconfig命令, 即可查看ip地址, mac地址, 和MTU

MTU对UDP协议的影响

  • 分片阈值计算 :在以太网MTU=1500字节的场景下,UDP携带的有效数据若超过1472字节(计算:1500 - 20字节IP首部 - 8字节UDP首部),就会在网络层被拆分为多个IP数据报。
  • 分片的可靠性风险 :UDP本身无重传机制,而IP层重组要求所有分片必须完整到达。只要任意一个IP分片丢失,整个UDP数据报的重组就会失败,最终导致完整UDP报文丢失。因此,UDP报文被分片后,数据丢失的概率会显著上升。

MTU对TCP协议的影响(MSS相关)

  • MSS定义 :TCP单个数据报的最大消息长度称为 MSS(Max Segment Size,最大分段大小),它的大小受限于MTU。
  • 存储位置 :MSS的值存储在TCP首部的40字节变长选项 中,类型为kind=2
  • 理想MSS取值:最理想的MSS值,是让IP层不需要分片处理的最大长度,即:

MSS=MTU−IP首部长度−TCP首部长度 \text{MSS} = \text{MTU} - \text{IP首部长度} - \text{TCP首部长度}MSS=MTU−IP首部长度−TCP首部长度

(以太网场景下,MTU=1500,IP首部20字节,TCP首部20字节,因此理想MSS=1460字节)

  • MSS协商机制
    1. TCP在三次握手建立连接时,通信双方会通过SYN报文进行MSS协商。
    2. 双方会在TCP头部的**变长选项(kind=2)**中,写入自己能支持的MSS值。
    3. 最终会选择双方MSS值中较小的那个 ,作为本次连接的有效MSS。

局域网中具体通信过程---共享式以太网广播通信原理

这张图展示了**共享式以太网(如集线器环境)**的广播通信机制:

  • 广播发送特性 :主机A发送的以太网帧(目的MAC为macE,源MAC为macA,类型0800代表IP协议)会被广播到所有连接在同一总线/集线器上的主机(B、C、D、E都会收到该帧)。
  • 目标匹配过滤
    • 只有目的MAC地址匹配的主机E会接收并处理该帧的数据。
    • 主机B、C、D因自身MAC地址与帧中目的MACmacE不匹配,会直接丢弃该帧,不做任何处理。
加入交换机后的通信行为解析

初始状态(交换机MAC地址表为空)

  • 主机A发送目的MAC为macE、源MAC为macA的以太网帧。
  • 交换机收到该帧后:
    1. 学习MAC地址 :将源MACmacA与接收端口绑定,写入MAC地址表(CAM表)。
    2. 泛洪转发 :因MAC地址表中无macE的条目,交换机会将该帧广播到除接收端口外的所有其他端口(B、C、D、E都会收到)。
  • 主机B、C、D因MAC不匹配丢弃帧;主机E匹配目的MACmacE,接收并处理该帧。

交换机学习到macE后(MAC地址表已包含macAmacE

  • 主机A再次发送目的MAC为macE的帧:
    1. 交换机查询MAC地址表,发现macE对应主机E的端口。
    2. 精准单播转发 :仅将该帧转发到主机E所在端口,不会广播到B、C、D
  • 只有主机E收到并处理该帧,其他主机完全感知不到此通信,带宽和安全性大幅提升。

每次通信,交换机都进行学习,当把主机都学习完毕后,下次通信,可以直接发送到交换机,由交换机直接发送消息到达指定主机,而不进行广播.

只要交换机完成 MAC 地址学习,后续通信就可以精准单播转发

ARP协议

在网络通信中,源主机虽然知道目的主机的IP 地址和端口号,但无法直接获知其硬件 MAC 地址:

  • 网卡仅接收硬件地址与本机匹配的数据包,地址不符则直接丢弃。
  • 若没有目的 MAC 地址,以太网帧无法正确封装和交付,通信无法建立。
  • 因此,通信前必须通过 ARP 协议将目的 IP 地址解析为对应的 MAC 地址,才能完成局域网内的数据传输。

ARP协议核心作用 : 建立了主机 IP地址MAC地址 的映射关系.

ARP不是⼀个单纯的数据链路层的协议, 而是⼀个介于数据链路层和网络层之间的协议.

网络层与数据链路层的核心协议关系

"类型" 指的就是以太网帧头部的类型字段,它是上层协议的标识,决定了数据链路层如何交付给上层。

类型值 对应上层协议 作用
0x0800 IP 协议 表示以太网帧的数据部分是 IP 数据报,交付给网络层 IP 协议处理
0x0806 ARP 协议 表示数据部分是 ARP 请求 / 应答,交付给数据链路层 ARP 协议处理
0x8035 RARP 协议 表示数据部分是 RARP 请求 / 应答,交付给数据链路层 RARP 协议处理
  • IP → 以太网:IP 数据报封装进以太网帧时,类型字段设为0x0800,告知对方法数据是 IP 协议。
  • 以太网 → ARP/RARP:当类型字段为0x0806或0x8035时,以太网帧直接将数据交给 ARP/RARP 协议处理,无需经过网络层。
  • ARP → 以太网:ARP 报文封装进以太网帧时,类型字段设为0x0806,用于 IP 到 MAC 的地址解析。
  • RARP → 以太网:RARP 报文封装进以太网帧时,类型字段设为0x8035,用于 MAC 到 IP 的地址解析。

ARP协议的工作流程

  • ARP 请求 :源主机以广播方式(目的 MAC 为FF:FF:FF:FF:FF:FF)发送 ARP 请求,询问 "192.168.0.1对应的 MAC 地址是多少",确保本网段所有主机都能收到该查询。
  • ARP 应答 :只有 IP 地址匹配的目的主机,会单播回复ARP 应答将自身 MAC 地址告知源主机,完成 IP→MAC 的地址映射。

ARP缓存表

每台主机都维护⼀个ARP缓存表 ,可以用arp -a命令查看。缓存表中的表项有过期时间(⼀般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址

bash 复制代码
syb@VM-8-5-ubuntu:~$ arp -a
_gateway (10.1.8.1) at fe:ee:6b:e3:2a:f8 [ether] on eth0

ARP数据报的格式

报文整体结构

  • 以太网首部(14字节):目的MAC地址(6B)、源MAC地址(6B)、帧类型(2B,ARP 为 0x0806)
  • ARP 数据部分(28字节):硬件类型、协议类型、地址长度、操作码、发送端/目的端的 MAC+IP 地址
字段 含义与取值
硬件类型 链路层网络类型,以太网为 1
协议类型 要转换的地址类型,IPv4 为 0x0800
硬件地址长度 MAC 地址长度,以太网为 6字节
协议地址长度 IP 地址长度,IPv4 为 4字节
op(操作码) 1 = ARP 请求,2 = ARP 应答
地址冗余 源/目的 MAC 地址在以太网首部和 ARP 报文中各出现一次,以太网场景下冗余,但兼容其他链路层协议
相关推荐
程序员JerrySUN6 小时前
Jetson 刷机深度解析:flash.sh vs l4t_initrd_flash.sh(含安全与磁盘加密对比)
linux·网络·arm开发·安全·系统安全
视觉AI7 小时前
VS Code Remote-SSH 连接Jetson踩坑完整解决记录(网段不通+主机密钥变更双重故障)
运维·网络·人工智能·windows·ssh·边缘计算
明志数科7 小时前
人形机器人格斗场景下的技术挑战:动力学控制、感知融合与实时决策
网络·数据库
酉鬼女又兒7 小时前
零基础入门 DeepSeek V4 Pro API 开发:从环境搭建、消息格式规范到翻译函数实战、少样本提示、多轮对话聊天机器人与常见报错全流程详解指南
大数据·网络·数据库·人工智能·macos·机器人·github
欧神附体1237 小时前
在虚拟机中添加网卡,修改网卡名并关闭SElinux
linux·服务器·网络
德迅云安全-上官8 小时前
源站隐身 + 流量清洗,高防 IP 品牌实力精选
网络·网络协议·tcp/ip
Triv20258 小时前
Profinet与Modbus协议转换网关HD67602的硬件特性与配置方法
网络·plc·modbus·profinet·工业网关·协议转换
珠***格10 小时前
XGF10-Z-4典型接入方式解析:10千伏专变用户380伏多点分布式光伏如何并网?
网络·人工智能·分布式·安全·边缘计算
盟接之桥10 小时前
跨越数字鸿沟,重塑全球信任:盟接之桥EDI如何以长期主义赋能中国制造出海
网络·人工智能·安全·汽车·制造
一只小菜鸡..10 小时前
Stanford CS144 学习笔记 (四):网络拥塞控制与 AIMD 算法
网络·笔记·学习