【计算机网络】数据链路层——ARP协议

article/2025/6/9 22:34:35

🔥个人主页🔥:孤寂大仙V
🌈收录专栏🌈:计算机网络
🌹往期回顾🌹:【计算机网络】网络层IP协议与子网划分详解:从主机通信到网络设计的底层逻辑
🔖流水不争,争的是滔滔不息


  • 一、数据链路层
  • 二、以太网帧格式
  • 三、MTU对IP协议的影响
    • MTU 对 UDP 协议的影响
    • MTU 对于 TCP 协议的影响
  • 四、ARP协议
    • ARP的功能
    • ARP 数据报的格式
    • ARP过程

一、数据链路层

数据链路层是OSI模型中的第二层,位于物理层之上、网络层之下。主要负责在直接相连的节点间进行可靠的数据传输,通过帧(Frame)的形式组织数据,并处理物理层可能引入的比特级错误。其核心功能包括帧封装、错误检测、流量控制和介质访问控制(MAC)。

数据链路层 vs 网络层

网络转发,本质是在子网和子网之间进行转发。网络层的ip协议的ip地址的概念,使得报文传输有了源ip地址和目的ip地址。但是在报完从源主机到目的主机途中要经过许多路由器,最终才能把报文交给目的主机。我们把源主机到目的主机途中的一台主机到一台路由器,一台路由器到一台路由器,看做一个子网,所以说在同一个子网中,一个主机怎么把数据交给另一台主机(路由器),解决这一局域网通信的问题是由数据链路层来解决的。链路层通过MAC地址和ARP协议,完成子网内的报文交付,从而解决了局域网通信的问题。

网络通信传输数据不是目的,是手段。交换应用层的报文才是目的。

网络层负责“跨子网”走得远,链路层负责“同子网”走得通。


认识以太网

"以太网"不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
例如以太网中的网线必须使用双绞线; 传输速率有 10M, 100M, 1000M 等;
以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN 等;


二、以太网帧格式

在这里插入图片描述
目的地址和源地址是网卡中硬件地址(也叫MAC地址),长度48位,网卡出场时候就带的。帧协议类型字段有三种值,分别对应IP、ARP、RARP。帧尾是CRC效验码。
分离与封装,因为MAC帧是固定的。分用看帧类型。

MAC地址

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

MAC地址vsIP地址(网络基础那篇说过)

IP地址描述的是路途总体的起点和终点。
MAC地址描述的是路途上的每一个区间的起点和终点。
网络层负责“跨子网”走得远,链路层负责“同子网”走得通。

三、MTU对IP协议的影响

由于数据链路层 MTU 的限制, 对于较大的 IP 数据包要进行分包。
将较大的 IP 包分成多个小包, 并给每个小包打上标签。每个小包 IP 协议头的 16 位标识(id) 都是相同的。每个小包的 IP 协议头的 3 位标志字段中, 第 2 位置为 0, 表示允许分片, 第 3 位来表示结束标记(当前是否是最后一个小包, 是的话置为 1, 否则置为 0)。到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层。一旦这些小包中任意一个小包丢失, 接收端的重组就会失败.,但是 IP 层不会负责重新传输数据。
在这里插入图片描述
在这里插入图片描述
不同机器的MTU的大小不一样。

MTU 对 UDP 协议的影响

一旦 UDP 携带的数据超过 1472(1500 - 20(IP 首部) - 8(UDP 首部)), 那么就会在网络层分成多个 IP 数据报。
这多个 IP 数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果 UDP 数据报在网络层被分片, 整个数据被丢失的概率就大大增加了。

MTU 对于 TCP 协议的影响

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

四、ARP协议

引入ARP
在这里插入图片描述
主机A为什么要把数据交给主机B?

从路由角度
路由是指在网络中决定数据包从源主机(主机A)传输到目标主机(主机B)的路径的过程。路由器(或具有路由功能的设备)通过以下步骤决定数据是否能到达主机B:
IP地址解析:主机A发送数据时,会附上目标主机B的IP地址。路由器根据目标IP地址查询路由表,决定数据包的下一跳(next hop)。
路由表:路由表包含网络地址、子网掩码、下一跳地址等信息,路由器根据这些信息选择最佳路径。
转发决策:如果路由表中存在通往主机B的路径,数据包会被转发到正确的接口,最终到达主机B;如果没有合适的路径,数据包可能被丢弃或返回错误。
因此,路由决定了数据包是否能从主机A到达主机B,以及通过哪条路径到达


为什么以太网数据帧有最小和最大长度限制?

以太网本质上是一个共享式的通信介质,也就是说,所有主机在同一时间内共享同一个通信信道。局域网就是一个碰撞域,任何时刻只能有一台设备发送数据帧,否则就会发生冲突(碰撞)。
这种通信方式就像多个线程访问一个临界资源:谁先抢到资源谁就可以操作,其他人必须等待。
正因为以太网是一种竞争访问机制,所以:

  • 帧不能太短:太短的话发送完了都还没来得及检测碰撞,冲突就无法被发现;

  • 帧也不能太长:太长会占用信道太久,其他设备等待时间过长,降低网络效率;

  • 帧不能太多:否则容易造成拥塞和碰撞频繁;

  • 帧也不能太少:否则信道利用率太低。

因此,以太网帧设计了最小长度(64 字节)和最大长度(1518 字节,不含扩展字段),这个范围是经过精心计算和平衡的,刚好满足可靠性与效率之间的需求。


为什么我们只知道目标主机的ip啊,不知道对方的MAC地址啊,是如何发给对方数据帧的?
需要一种协议,把IP转换为对应的MAC地址,这个协议是ARP协议。

数据帧是报文在链路层封装后的结果,包含报文以及传输所需的控制信息。在网络物理层上流动的数据是数据帧


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

ARP的功能

ARP 协议建立了主机 IP 地址 和 MAC 地址 的映射关系。

ARP的主要功能是将网络层的IP地址解析为数据链路层的MAC地址,以便在局域网(LAN)内进行数据帧的传输。
在数据链路层,设备通过MAC地址进行通信,而ARP负责建立IP地址与MAC地址的映射,因此它被视为数据链路层的协议。
ARP数据包被封装在数据帧中(如以太网帧),直接在链路层传输。

在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址。
数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。
因此在通讯前必须获得目的主机的硬件地址。

ARP协议通过对目的IP的广播,让这个局域网内的主机都收到,各个主机进行进行判断,目标主机收到进行应答,返回去的是MAC地址。

注意:局域网中,任何主机可能收到ARP请求,也可能收到ARP应答。

ARP 数据报的格式

在这里插入图片描述
注意到源 MAC 地址、 目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。

  • 硬件类型指链路层网络类型,1 为以太网;
  • 协议类型指要转换的地址类型,0x0800 为 IP 地址;
  • 硬件地址长度对于以太网地址为 6 字节;
  • 协议地址长度对于和 IP 地址为 4 字节;
  • op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。

ARP过程

在这里插入图片描述

假如路由器传来源主机的报完要找这个局域网中的目的主机E。在路由器的数据链路层的ARP协议会对ARP数据报进行封装,以太网目的地址当前不知道,填全FFFF就是在当前局域网内进行广播,以太网源地址肯定有,帧类型填0806,这是以太网首部。ARP请求,各个字段根据规定填,注意这里是请求OP填1,发送端以太网地址肯定也有,发送端IP地址肯定也有,目的以太网地址就不知道了,目的IP地址肯定也有。然后封装MAC帧,数据帧在局域网中进行广播,所有主机都能收到这个数据帧。
各个主机拿到数据帧在自己的数据链路层对数据帧进行分离解析,最先关注目的ip地址看看这个ip地址和自己的ip地址是否相符,如果不相符就丢弃。如果相符就是目的主机,目的主机在数据链路层的ARP协议对ARP数据报进行封装,这回以太网目的地址填路由器的mac地址,以太网网源地址填当前主机的mac地址,现在是应答了OP是2,发送端以太网地址填当前主机的mac地址,发送端ip地址填当前主机的ip地址,目的以太网地址填路由器的mac地址,目的ip地址填路由器的ip地址,其实就是反过来了。这回有具体的mac地址了不用广播了,路由器收到了,路由器对数据报解包先看op,然后尽心解析,然后路由器就可以找到目的主机了。

当一个 IP 数据报从源主机出发,经过路由器,准备投递给同一个局域网内的目标主机(例如主机 E),但路由器此时只知道目标主机的 IP 地址,而不知道其 MAC 地址,此时就需要使用 ARP 协议完成地址解析。
🛰️ ARP 请求的构造与广播
路由器的数据链路层会构造一个 ARP 请求报文,并封装成以太网帧,过程如下:

  1. 以太网帧首部:
  • 目的 MAC 地址:FF:FF:FF:FF:FF:FF(广播地址)
  • 源 MAC 地址:路由器的出接口 MAC 地址
  • 类型字段:0x0806(表示这是 ARP 协议)
  1. ARP 请求报文字段:
  • 操作码(OP):1,表示请求
  • 发送端 MAC 地址:路由器的接口 MAC
  • 发送端 IP 地址:目标主机所属的网关 IP(通常为路由器该接口 IP)
  • 目标 MAC 地址:未知,填 0
  • 目标 IP 地址:目标主机 E 的 IP 地址

构造完成后,整个帧在局域网内以广播方式发送,网络中所有主机都可以接收到该帧。
📩 ARP 应答的返回与单播
局域网内所有主机收到 ARP 请求后,会查看报文中的目标 IP 地址是否与自己匹配:

  • 如果不匹配,则直接丢弃。
  • 如果匹配(例如主机 E),则说明自己就是被查找的目标主机。

主机 E 会构造 ARP 应答报文,并封装成以太网帧发送给路由器,过程如下:

  1. 以太网帧首部:
  • 目的 MAC 地址:路由器的接口 MAC 地址
  • 源 MAC 地址:主机 E 的 MAC 地址
  • 类型字段:0x0806
  1. ARP 应答报文字段:
  • 操作码(OP):2,表示应答
  • 发送端 MAC 地址:主机 E 的 MAC
  • 发送端 IP 地址:主机 E 的 IP
  • 目标 MAC 地址:路由器的接口 MAC
  • 目标 IP 地址:路由器的接口 IP

这次的帧是单播形式发送给路由器。
📡 路由器更新 ARP 缓存,完成转发
路由器接收到 ARP 应答后,会将主机 E 的 IP 和 MAC 地址绑定关系记录到本地 ARP 表中。之后,路由器就可以将原本的数据报封装为以太网帧,目的 MAC 设置为主机 E 的 MAC 地址,源 MAC 为自身接口地址,然后将数据报投递给主机 E。

主机会在一段时间内记录下来,各个ip和mac地址的映射。


http://www.hkcw.cn/article/trXCnciYBt.shtml

相关文章

群晖 NAS 如何帮助培训学校解决文件管理难题

在现代教育环境中,数据管理和协同办公的效率直接影响到教学质量和工作流畅性。某培训学校通过引入群晖 NAS,显著提升了部门的协同办公效率。借助群晖的在线协作、自动备份和快照功能,该校不仅解决了数据散乱和丢失的问题,还大幅节…

基于LLaMA-Factory和Easy Dataset的Qwen3微调实战:从数据准备到LoRA微调推理评估的全流程指南

随着开源大模型如 LLaMA、Qwen 和 Baichuan 的广泛应用,其基于通用数据的训练方式在特定下游任务和垂直领域中的表现仍存在提升空间,因此衍生出针对具体场景的微调训练需求。这些训练涵盖预训练(PT)、指令微调(SFT&…

视觉语言动作模型 (VLAs) :赋予机器行动的智慧

文章目录 一、VLA 的诞生:从单模态到多模态的飞跃二、深入剖析 VLA:核心组件与工作原理三、前沿进展:那些令人瞩目的 VLA 模型与趋势四、VLA 的广阔天地:应用场景一览五、挑战与荆棘:VLA 面临的难题六、未来展望&#…

C/S医学影像系统源码,全院一体化PACS系统源码,实现全院检查预约和信息共享互通

全院一体化PACS系统源码 全院级PACS系统不仅仅具有安全、高效、稳定的访问/存储/调阅架构和强大的影像后台处理功能;还是一个全院一体化的PACS系统,覆盖了医院所有影像科室(放射、超声、内镜、病理、心脑电等);从影像…

力扣刷题Day 69:搜索二维矩阵(74)

1.题目描述 2.思路 首先判断target是否有可能在矩阵的某一行里,没可能直接返回False,有可能就在这一行里二分查找。 3.代码(Python3) class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> boo…

生成JavaDoc文档

生成 JavaDoc 文档 1、快速生成 文档 注解 2、常见的文档注解 3、脚本生成 doc 文档 4、IDEA工具栏生成 doc 文档 第一章 快速入门 第01节 使用插件 在插件工具当中,找到插件 javaDoc 使用方式,在代码区域,直接点击右键。选择 第02节 常用注…

攻防世界RE-1000Click

首先按一千次肯定是不可能的,观察到验证flag时会有一个输出: 直接在ida中搜索这个错误提示词: 往上找找就能找到flag: flag: flag{TIBntXVbdZ4Z9VRtoOQ2wRlvDNIjQ8Ra}

【嵌入式(2)深入剖析嵌入式开发:从基础到实战】

为打造符合CSDN高质量博文标准的内容,我以清晰目录架构梳理知识,插入代码示例、时序图等增强可读性,并添加投票互动,提升文章吸引力与互动性。 目录 [引言一、嵌入式处理器的分类及特点二、硬件、软件与固件:嵌入式系…

数据库-联合查询(内连接外连接),子查询,合并查询

一.为什么要使用联合查询 在数据设计时由于范式的要求,数据被拆分到多个表中,那么要查询一个条数据的完整信息,就要从多个表中获取数据,如下图所示:要获取学生的基本信息和班级信息就要从学生表和班级表中获取&#xf…

dvwa6——Insecure CAPTCHA

captcha&#xff1a;大概是“我不是机器人”的一个勾选框或者图片验证 LOW: 先输入密码正常修改试一下&#xff08;123&#xff09;&#xff0c;发现报错 查看源码&#xff1a; <?phpif( isset( $_POST[ Change ] ) && ( $_POST[ step ] 1 ) ) {// Hide the C…

通过基于流视频预测的可泛化双手操作基础策略

25年5月来自中国电信、西北工业大学和香港科大的论文“Towards a Generalizable Bimanual Foundation Policy via Flow-based Video Prediction”。 由于动作空间巨大且需要协调手臂运动&#xff0c;学习可泛化的双手操作策略对于具身智体而言极具挑战性。现有方法依赖于视觉-…

隧道监测预警系统:构筑智慧交通的安全中枢

在交通基础设施体系中&#xff0c;隧道作为关键节点&#xff0c;其安全运营直接关系到整个路网的畅通与稳定。隧道监测预警系统通过多维度感知网络与智能分析中枢的有机融合&#xff0c;构建起全天候、立体化的安全防护体系&#xff0c;成为守护隧道安全的智能防线。 一、系统…

【相机基础知识与物体检测】更新中

参考&#xff1a; 黑马机器人 | 相机标定&物体检测https://robot.czxy.com/docs/camera/ 01-相机基础 相机基础概述 相机是机器视觉的基础&#xff0c;相机直接产生了相机数据。所有视觉算法都是作用在相机数据上的。相机数据的好坏&#xff0c;或者对相机数据的理解方式…

Nginx实战

更多推荐阅读&#xff1a; 前端性能&异常分析排查流程-CSDN博客 关于列表性能分析与标准-CSDN博客 Fullcalendar常用功能介绍-CSDN博客 目录 Nginx介绍 下载和安装 实战分享 场景一、localhost代理线上环境 场景二&#xff1a;通过本地路径访问其他域名的地址信息 防盗链功…

java实用类

文章目录 SystemSystem.exit(int status);currentTimeMillis String 类String两种创建方式String提供的常用方法 Runtime作用演示 Object类常用方法重写 toString()重写 equals() 和 hashCode() BigInter类BigInter 构造方法常用方法演示 BigDecimal类常见构造器常用方法演示 S…

windows安装多个版本composer

一、需求场景 公司存在多个项目&#xff0c;有的项目比较老&#xff0c;需要composer 1.X版本才能使用 新的项目又需要composer 2.X版本才能使用 所以需要同时安装多个版本的composer二、下载多个版本composer #composer官网 https://getcomposer.org/download/三、放到指定目…

【域控制器EMC】域控制器EMC设计总结

一&#xff1a;总结 汇总项目设计当中关于EMC的设计要点&#xff0c;主要从原理设计、Layout、结构、外设部分总结。 满足要求的器件和合理的电路能降低电磁干扰&#xff1b; 正确的布局、接地、信号路径、屏蔽等可以减少电磁辐射。 结构件设计也会对EMC性能产生影响 二&a…

01 RK3568调试4G 模块 EG800AK-CN

1、添加pid、vid信息 为了识别模块&#xff0c;需将模块的VID和PID信息添加到[KERNEL]/drivers/usb/serial/option.c文件中&#xff0c;对应的VID和PID下图所示&#xff1a;EG800AK参考EC800M static const struct usb_device_id option_ids[] { #if 1 //此处为添加的代码&a…

Redis底层数据结构之跳表(SkipList)

SkipList是Redis有序结合ZSet底层的数据结构&#xff0c;也是ZSet的灵魂所在。与之相应的&#xff0c;Redis还有一个无序集合Set&#xff0c;这两个在底层的实现是不一样的。 标准的SkipList&#xff1a; 跳表的本质是一个链表。链表这种结构虽然简单清晰&#xff0c;但是在查…

Modbus转ETHERNET IP网关:快速冷却系统的智能化升级密钥

现代工业自动化系统中&#xff0c;无锡耐特森Modbus转Ethernet IP网关MCN-EN3001扮演着至关重要的角色。通过这一技术&#xff0c;传统的串行通讯协议Modbus得以在更高速、更稳定的以太网环境中运行&#xff0c;为快速冷却系统等关键设施的自动化控制提供了强有力的支撑。快速冷…