当前位置: 首页 > news >正文

数据链路层 (以太帧 MAC地址 ARP协议)

"以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内
容, 也包含了一些物理层的内容.以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN 等;

以太网帧格式

  • 目的 MAC 地址(6 字节)

    • 目标设备的 MAC 地址,决定数据包的接收者。
  • 源 MAC 地址(6 字节)

    • 发送设备的 MAC 地址,表示数据包的来源。
  • 类型字段(Type,2 字节)

    • 标识上层协议类型,例如:
      • 0x0800:IPv4
      • 0x86DD:IPv6
      • 0x0806:ARP
  • 数据和填充(46-1500 字节)

    • 实际承载的数据部分,最少 46 字节,最大 1500 字节
    • 若数据不足 46 字节,需要填充 0 使其达到最小值。

源地址和目的地址是指网卡的硬件地址(也叫 MAC 地址), 长度是 48 位,是在网卡出厂时固化的;

MAC 地址

MAC 地址是网卡(网络接口)在数据链路层(第二层)用于标识设备的唯一地址。

特点

  • 长度:48 位(6 字节)。
  • 格式:通常以十六进制表示,例如 00:1A:2B:3C:4D:5E00-1A-2B-3C-4D-5E
  • 层级:工作在 数据链路层(OSI 第 2 层)。
  • 作用:用于局域网(LAN)内的数据传输,确保设备能够在本地网络中通信。
  • 分配方式
    • 全球唯一性:MAC 地址由网卡制造商烧录到设备中,全球唯一。
    • 厂商标识:前 3 个字节是 OUI(组织唯一标识符),用于标识制造商,如 00:1A:2B 代表某厂家。
    • 后 3 个字节 是厂商自行分配的序列号。

IP 地址

IP 地址是分配给联网设备的逻辑地址,在网络层(第三层)用于设备间的通信。

特点

  • 层级:工作在 网络层(OSI 第 3 层)。
  • 作用:用于全球互联网或局域网通信,标识网络中的主机或设备。
  • 分类
    • IPv4:32 位(4 字节),通常表示为 192.168.1.1
    • IPv6:128 位(16 字节),表示为 2001:db8::ff00:42:8329

为什么不能直接用 IP 地址通信?

  • 数据链路层(Layer 2) 只能识别 MAC 地址,不理解 IP 地址。
  • 交换机(Switch)只根据 MAC 地址转发数据包,无法处理 IP 地址。
  • 局域网内的通信是基于以太网帧进行的,而以太网帧的目标地址是 MAC 地址

为什么不能直接用 MAC 地址进行所有通信?

如果 MAC 地址能够唯一标识每台设备,为什么还需要 IP 地址?

(1) MAC 地址不能跨网段寻址

  • MAC 地址只能在局域网(LAN) 内唯一,不适用于广域网(WAN)。
  • 路由器不存储 MAC 地址,而是使用IP 地址进行跨网段转发

(2) MAC 地址不可变

  • MAC 地址通常是网卡出厂时写入的,无法像 IP 地址那样动态分配。
  • IP 地址可以按地理位置分配,而 MAC 地址不能

(3) 路由器和交换机的不同作用

设备使用的地址类型作用
交换机(Switch)MAC 地址在同一局域网内转发数据
路由器(Router)IP 地址在不同子网或互联网间转发数据

总结

  • MAC 地址 是设备的物理地址,在数据链路层(第 2 层)用于局域网通信。
  • IP 地址 是设备的逻辑地址,在网络层(第 3 层)用于网络间通信。
  • MAC 地址唯一且固定,IP 地址可以动态分配和更改。
  • 局域网内通信主要依赖 MAC 地址,跨网络通信主要依赖 IP 地址。

MTU 最大传输单元

MTU 是指数据链路层(Layer 2) 设备(如网卡、交换机)在一次传输中能够承载的最大数据包大小(以字节为单位)。它定义了网络帧在 以太网、Wi-Fi、VPN、PPPoE 等不同网络环境下的最大长度

以太网帧中的数据长度规定最小 46 字节,最大 1500 字节,ARP 数据包的长度不够 46 字节,要在后面补填充位;

MTU 主要包括 IP 头 + 传输层数据(TCP/UDP + 应用数据)

以太网标准 MTU = 1500 字节,其中:

  • IP 头部(IPv4):20 字节
  • TCP 头部:20 字节
  • MSS(TCP 最大段大小): MSS=1500−20−20=1460(字节)(UDP 携带的数据最多 1472,UDP首部8)

TCP 在建立连接的过程中, 通信双方会进行 MSS 协商.
最理想的情况下, MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU).
双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值.
然后双方得知对方的 MSS 值之后, 选择较小的作为最终 MSS. 避免因路径上的不同 MTU 限制导致 IP 分片,提高传输效率。
MSS 的值就是在 TCP 首部的 40 字节变长选项中(kind=2);

局域网通信 

在同一个局域网中的主机,为了避免数据碰撞,只会有一台主机发送报文,其它主机都会接收到链路层,如果目标地址就是我就处理,不是就抛弃。如果发生数据碰撞,所有发送数据的主机都立即停止发送,每个设备等待一个随机时间(指数级增长的退避时间)。再次尝试发送数据,直到成功。

数据碰撞的影响

  • 延迟增加:每次碰撞都会导致数据重传,影响吞吐量。
  • 吞吐量降低:网络中的主机越多,碰撞发生的概率越高,整体效率降低。
  • 无法同时通信:在共享介质网络(Hub)中,只有一个设备能成功发送数据。

交换机

有没有减少数据碰撞的方法?通过交换机,它工作在 数据链路层(Layer 2),用于根据 MAC 地址转发数据包,提高网络效率,减少数据冲突

交换机自动学习每台设备的 MAC 地址,并存储在 MAC 地址表(CAM 表) 中。知道各个主机的位置。在图中主机B和主机E之间放置了一台交换机,经过一段时间学习,交换机知道了主机ABD在局域网的左边,主机CE在右边。这样主机C向主机E发送报文时,交换机就不会把报文送到左边主机ABD上,划分了局域网,减少了数据碰撞。

ARP协议

我们在前面说过局域网内通信主要依赖 MAC 地址,跨网络通信主要依赖 IP 地址。设备之间通信依赖 IP 地址(网络层 L3)。但数据链路层(L2)只认识 MAC 地址,无法直接使用 IP 地址传输数据。

如果主机B给主机C发报文,与子网掩码按位&后发现目标IP地址不在当前局域网,就把报文发给默认网关(路由器F),但路由表中只有路由器F的IP地址。在局域网通信需要的是MAC地址,这就需要ARP协议把IP地址转为MAC地址。

主机和路由器都有路由表吗?
功能主机的路由表路由器的路由表
作用仅管理本地网络和默认网关管理多个子网,决定数据包的转发路径
主要内容1. 本地子网条目
2. 默认网关(默认路由,下一跳)
1. 直连子网(LAN)
2. 默认路由(缺省路由)
3. 多个子网的下一跳
跨网段通信必须通过默认网关可直接路由到多个子网
设备例子PC、服务器、笔记本互联网路由器、企业级路由器
  • 主机(PC)也有路由表,但一般只有默认网关,不存储多个子网信息
  • 路由器维护完整的路由表,用于跨网段和互联网数据转发
  • 主机只关心如何找到默认网关,路由器才负责真正的路由转发

ARP怎么把IP地址转MAC地址的呢?简单说一说,还是上面的例子,主机B要获取路由器F的ARP地址,会在局域网中发送ARP请求(相当于报文),在这个局域网中所有主机路由器都会收到并进行处理,处理后发现该报文的目标IP地址不是我就丢弃,是我就发给主机B ARP应答(里面包含我的MAC地址),虽然所有主机都获取到了给主机B发的ARP应答,但不会处理而是直接丢弃。这样主机B就获取了路由器F的MAC地址,就可以把报文根据MAC地址直接转给路由器F。

格式

ARP报文通常封装在以太网帧中,通过以太网进行通信。

ARP 报文由 以太网帧头部 + ARP 数据 组成

字段名称长度(字节)说明
以太网目的地址6ARP 请求:FF:FF:FF:FF:FF:FF(广播),ARP 响应是单播
以太网源地址6发送方的 MAC 地址
帧类型20x0806(表示 ARP 协议)
硬件类型(HTYPE)21 = 以太网
协议类型(PTYPE)20x0800 = IPv4
硬件地址长度(HLEN)16(MAC 地址长度)
协议地址长度(PLEN)14(IPv4 地址长度)
操作码(OPER)21 = ARP 请求,2 = ARP 响应
发送端以太网地址(MAC)6发送方的 MAC 地址
发送端 IP 地址4发送方的 IP 地址
目的端以太网地址(MAC)6目标设备的 MAC 地址(请求时为空)
目的端 IP 地址4目标设备的 IP 地址
 

帧类型: 数据链路层(L2) 告诉以太网帧内的数据是什么协议(ARP, IPv4, IPv6) 固定(2 字节,0x0806 代表 ARP)

协议地址长度: 网络层(L3) 告诉 ARP 协议,它解析的目标协议地址有多少字节(IPv4: 4, IPv6: 16) 可变(IPv4: 4,IPv6: 16)

操作码(OP):1 = ARP 请求,2 = ARP 应答

数据链路层 下层 负责 封装 MAC 帧 并控制数据传输。

ARP 协议位于 网络层 和 数据链路层 上层。

  • ARP 解析的是 IP 地址(L3 逻辑寻址)
  • ARP 使用的是 MAC 地址(L2 物理寻址)
  • ARP 报文通过以太网广播(L2 传输机制)
  • ARP 作用是让网络层能够正确地使用数据链路层通信

总结:ARP 是网络层的辅助协议,但它依赖数据链路层进行广播和通信。

ARP 的具体过程

路由器R想给主机E发信息,但不知道E的MAC地址。就通过构建ARP请求获取E的MAC地址,在ARP帧中填入自己IP地址 MAC地址,目标IP地址,但目标MAC地址不知道就填入(FFFF FFFF)表示广播,全部主机都能收到。

现在所有主机都收到了来自R的报文,都会获取并处理,1.先查看帧类型发现是ARP,再看ARP字段OP,OP==1说明是ARP请求。2.再看目标IP地址是否是自己不是就丢弃 3.如果是我就构建ARP应答,填入自己的MAC地址,单播到路由器R上。

现在路由器R已经获取到了主机E的MAC地址,封装MAC帧向主机E发送报文。

    假设 主机 A(192.168.1.10) 需要向 主机 B(192.168.1.20) 发送数据,但 A 只知道 B 的 IP 地址,不知道 B 的 MAC 地址。ARP 过程如下:

    📌(1)主机 A 先查询 ARP 缓存表

    • A 运行 arp -a,检查是否已有 192.168.1.20 -> MAC 记录。
    • 如果 ARP 缓存中有 B 的 MAC 地址,A 直接使用,无需发送 ARP 请求。
    • 如果没有,A 需要广播 ARP 请求。

    📌(2)A 发送 ARP 请求(广播)

    • A 发送 ARP 请求,询问 "谁是 192.168.1.20?请告诉我你的 MAC 地址!"
    • 该 ARP 请求通过 以太网帧广播(MAC 目的地址 FF:FF:FF:FF:FF:FF,所有同一局域网的设备都收到此请求。

    📌(3)B 接收 ARP 请求并发送 ARP 响应(单播)

    • 只有 192.168.1.20(B)匹配目标 IP,才会回应 ARP 响应,其他设备丢弃该请求(见下方"无关主机丢弃情况")。
    • B 发送 ARP 响应(单播),告诉 A:"我是 192.168.1.20,我的 MAC 地址是 00:1B:44:11:3A:B7"。
    • 这个 ARP 响应是单播的,只发给 A,不会广播给所有设备。

    📌(4)A 记录 B 的 MAC 地址

    • A 在本地 ARP 缓存表中存储 192.168.1.20 -> 00:1B:44:11:3A:B7,下次无需再次发送 ARP 请求。
    • 数据传输开始,A 现在可以正确封装 MAC 帧,直接向 B 发送数据

    在该局域网中处了主机E,路由器R,还有其它无关主机,它们在处理 ARP 请求和 ARP 响应的两次丢弃过程中有什么不同吗?
    1.收到ARP请求时,因为该ARP报文的目标MAC地址是全FFFF(广播),所有主机接收数据,通过链路层进入网络层。进入网络层后,如果目标 IP 不是自己,则丢弃。

    2.收到ARP应答时,在数据链路层发现,目标MAC地址和我不匹配,就直接丢弃,不会进入网络层。

    • ARP 请求(广播)时,所有设备都接收,网络层(L3)决定是否处理,非目标 IP 设备丢弃。
    • ARP 响应(单播)时,只有请求者的 MAC 地址匹配才能接收,数据链路层(L2)决定是否处理,非目标 MAC 设备丢弃。

    相关文章:

  • 基于SpringBoot的手机销售网站设计与实现(源码+SQL脚本+LW+部署讲解等)
  • Liunx(CentOS-6-x86_64)使用Nginx部署Vue项目
  • 水下机器人推进器PID参数整定与MATLAB仿真
  • 同步模式之顺序控制,如何控制三个线程依次输出: abc abc abc abc abc?
  • 本地部署Navidrome个人云音乐平台随时随地畅听本地音乐文件
  • 无刷电动智能充气泵方案【天吉智芯】
  • 【软件逆向】QQ 连连看小游戏去广告与一键消除实现
  • 数据量过大的时候导出数据很慢
  • 蓝桥杯备赛-基础训练(四)字符串 day17
  • 初识Spring Batch:开启批处理的高效之旅
  • 软件性能测试与功能测试联系和区别
  • 采用面向对象方式计算三角形面积 - V2.0
  • 【C语言】考研复试上机代码题(基础篇)
  • 经销商管理系统选型解析:8款产品详评
  • 惊喜操作!强制DeepSeek和豆包轻松生成你的专属图片提示词
  • MySQL(社区版)安装过程
  • NAT NAPT
  • RK3568 SD卡调试记录
  • listen EACCES: permission denied 0.0.0.0:811
  • AI Agent开发框架分析:前端视角
  • 默茨当选德国总理
  • 德国联邦议院6日下午将举行总理选举第二轮投票
  • 青年与城市共成长,第六届上海创新创业青年50人论坛将举办
  • 世界哮喘日丨张旻:哮喘的整体诊断率不足三成,吸入治疗是重要治疗手段
  • “穿越看洪武”,明太祖及其皇后像台北故宫博物院南园展出
  • 越老越妖的库里,成了火箭季后赛里一晃十年的噩梦