首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【计网】从零开始认识arp协议

【计网】从零开始认识arp协议

作者头像
叫我龙翔
发布于 2024-10-30 00:57:34
发布于 2024-10-30 00:57:34
3790
举报

愿你在尘世里获得幸福,

我只愿面朝大海,春暖花开。

--- 海子 《面朝大海,春暖花开》---


从零开始认识数据链路层
  • 1 基础知识
  • 2 为什么需要arp协议
  • 3 arp协议工作流程
  • 4 arp协议结构

1 基础知识

传输层协议提供一种策略保证通信的稳定性;网络层协议提供一种能力保证可以进行通信。数据链路层是用于两个设备(同一种数据链路节点)之间进行传递。

网络通信中,主机A向主机B发送数据时,并不是直接将报文发送到目标主机,而是会经过很多台路由器的转发!要在一台一台路由器之间不断的跳转。跨网络转发的本质是进行多次的子网转发!所以路由器就要先保证在同一个网段中相互之间可以进行转发。

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

在以太网中发送数据是以以太网帧的格式进行发送的:

  • 6字节目标地址:MAC地址是6字节,所以目标地址是6字节。
  • 6字节源地址:MAC地址是6字节,所以源地址是6字节。
  • 2字节帧协议类型:有三种值,分别对应 IP、 ARP、 RARP;
  • 4字节CRC 校验码

对于这个以太网协议我们依然需要解决两个问题:

  1. 如何解包? 以太网帧采用的是定长报头,进行解包就直接去除定长的报头与报尾结构即可
  2. 如何分用?

这里我们模拟一下局域网通信的过程: 在局域网中有若干主机ABCD...,主机A此时向G发送信息。主机A就先把MAC帧先填好目的地址与源地址:

主机A将这个MAC帧放到网络中,其他主机的的数据链路层会先获取到MAC帧,因为报头是定长,可以快速取到报头,判断是否是发送给自己的报文。许多的MAC帧之间会发生碰撞,越长的数据越容易产生碰撞,所以数据链路层才有MTU限制一次发送的大小! 同样的也有最小数据帧限制MSS,对于不够的数据,会填充垃圾数据,那么会影响报文长度,这也就是为什么IP协议要带总长度字段!

随着主机数的增加,每台主机处理的MAC帧就会越来越多,出现大面积的碰撞。通信成功的概率就越来越小(这也是人数密集的地方网络差的原因)。这里会涉及到交换机:交换机会把不同的主机划分成不同的区域!交换机对于所有主机的数据都可以收到,其转发的数据对象就是数据帧,所以也是工作在数据链路层!

交换机会对数据帧进行分析,将数据帧发放到对应的区域,这样可以很好的优化碰撞发生的概率!有效管理数据帧的扩散范围。

这里通过MTU和MSS联系一下TCP建立连接

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

2 为什么需要arp协议

讲解arp协议之前,我们先来看看目前的通信过程中是否完善? 目前为止我们讲解了传输层,网络层,数据链路层。为了保证通信可靠性传输层TCP协议的超时重传机制,快重传机制,滑动窗口机制…,提供跨网络通信能力的IP协议,用于局域网两个设备之间进行通信的数据链路层协议。看似已经十分完备,实际上有一个严重问题!

  • 路由器中都有一个路由表,储存目的IP 与对应的子网掩码。可以找到对应的路由器!
  • 但通信时要找到下一跳的节点,必须知道吓一跳节点的MAC地址!因为要封装MAC帧
  • 那么要如何知道MAC地址呢???

IP地址和MAC地址在网络通信中有各自的重要作用。

  • IP地址用于逻辑寻址和路由选择,使数据包能够跨越多个网络到达目标设备。
  • MAC地址用于物理寻址,确保数据帧能够在同一局域网内正确传输。

通过ARP协议,路由器可以在目标网络中找到目标设备的MAC地址,确保数据包能够顺利传输到最终目的地。 这种机制使得IP地址和MAC地址相互配合,共同完成数据的传输和通信。

目前,在只知道目的IP的情况下,报头中带有源IP和目的IP。路由器的每一次路由转发都会改变源IP,最终到达路由器中,但是不知道目的主机的MAC地址,就不知道是子网中的哪一台主机!

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

所以,为了可以在局域网中进行通信,我们需要可以通过目的IP转换成MAC地址的能力。这里就需要ARP协议! arp协议是在数据链路层的,结构如下:

arp协议工作数据链路层,对于IP地址与MAC帧的转换时是在这里进行的!

3 arp协议工作流程

新生入学第一天,每名同学都有一个学号。老师手里只有学号表,并不知道谁是谁,于是就会问:“谁是10号同学呀?”。这时张三回答是他,那么老师在心中就会记住学号与名字的映射关系,下一次就会直接叫张三而不是10号同学!

这个例子就类似arp协议工作过程:

  1. 当数据包到达目标网络的路由器时,路由器知道目标设备的IP地址,但不知道其MAC地址。路由器在目标网络中广播一个ARP请求: “谁是IP地址为172.20.1.2的设备?请告诉我你的MAC地址。”
  2. 网络中的所有设备接收到ARP请求后,只有目标设备(即IP地址为172.20.1.2的计算机B)会响应。计算机B会发送一个ARP响应包,包含其MAC地址:“我是IP地址为172.20.1.2的设备,我的MAC地址是08:00:20:74:CE:EC。”

arp协议工作流程可以总结为:先广播,再正常通信! 具体来看,主机A在发送一条广播后,可能会接收到一条arp应答。那么每一台主机都有可能收到arp应答与arp请求!所以就要求arp协议要区分自己是请求还应答!

网络层收到了一个报文 ,但是此时主机并不知道这个IP对应哪一台主机,所以就要进行广播。进行广播前,在arp协议层需要构建一份arp请求:源IP与源MAC,目的IP与未知目的MAC。然后回将报文构建mac帧。注意:arp层与mac帧层是上下层协议的关系!

所以就会对还会对arp请求进行封装,帧类型设置为0806说明是发送给arp层。目的mac地址设置为fff...表示广播

封装好就将mac帧发到局域网中,当其他主机获得到时,会分析目的mac,发现是fff...,知道是广播。然后分析到帧类型是发送给arp协议的,就将这个报文解析后发送给arp协议。然后就可以判断IP地址是否是自身,那么就丢弃(当前理解下是丢弃)。

当目标IP主机收到arp请求后,根据oper发现arp请求,那么就会生成一份arp应答!

其他主机收到这个mac帧,通过目的MAC判断进丢弃。路由器A最终就会收到这个应答!路由器A发现这个是arp应答,这时就会保留源IP与源MAC,建立了IP与MAC的映射!下一次向主机E发送报文,就可以建立mac帧进行发送了!

注意: 虽然mac帧报头中有源mac地址,但是这是mac协议层获取的信息,arp层获取不到这个信息,所以要在报文中记录源IP与源Mac!

这个IP与MAC的映射会暂时缓存起来,我们可以看看我们机器里缓存的mac地址:

arp只在局域网中有效,每个网络都是一个子网,每个网络都维护arp,不会出现横跨网络的情况!

4 arp协议结构

  • 注意到源 MAC 地址、 目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
  • 硬件类型指链路层网络类型,1 为以太网;
  • 协议类型指要转换的地址类型,0x0800 为 IP 地址;
  • 硬件地址长度对于以太网地址为 6 字节;
  • 协议地址长度对于和 IP 地址为 4 字节;
  • op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。

其中关键的五元组是:oper , 源IP ,源mac,目的IP,目的MAC。arp协议层中可以对数据进行处理,建立映射…

至此,网络协议栈通信过程完成了!arp协议补全了路由过程中在不知道目的主机MAC地址应该如何处理的方法! 保证数据链路层可以生成MAC帧完成通信!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【计算机网络】数据链路层
假设我们要将数据从主机A推送到主机B,根据我们之前的理解,是可以通过网络层进行路由的,这就是网络层在做决策,所以在网络层就要先决策该报文是要转发给和我处于同一网段的其它主机,还是交到下一跳,决策了之后再把报文向下交付,最后把报文交到路由器中。
YoungMLet
2024/03/30
2150
【计算机网络】数据链路层
ARP 简介
地址解析协议(ARP)是网络通信中不可或缺的一部分,它工作在OSI模型的第二层(数据链路层),负责将网络层的IP地址映射为数据链路层的MAC地址。这一过程对于网络数据包的正确传输至关重要。本文将详细介绍ARP的工作原理、应用场景、以及与之相关的技术细节。
Michel_Rolle
2024/10/11
3K0
【Linux】网络--数据链路层--以太网
以太网是一种技术标准,包含数据链路层以及物理层的内容,是当今世界上应用最广泛的局域网技术,其兼容性强,成本低,扩展性高
s-little-monster
2025/06/10
1010
【Linux】网络--数据链路层--以太网
【Linux网络】网络层IP协议,数据链路层:以太网、ARP协议
但是随着互联网的飞速发展,这种划分方案的局限性很快显现出来,A 类地址很容易浪费,于是提出了新的划分方案:CIDR(Classless Interdomain Routing)
_小羊_
2025/03/02
2111
【Linux网络】网络层IP协议,数据链路层:以太网、ARP协议
常用的数据链路层协议_数据链路层和网络层
虽然网络中各个局域网所采用的通信技术可能的不同的,但是IP屏蔽了底层网络的差异,对于网络通信双方的IP层及其往上的协议来说,它们并不需要关心底层具体使用的是哪种局域网技术。
全栈程序员站长
2022/11/01
9810
彻底搞懂系列之:ARP协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;
网络工程师笔记
2021/05/17
3.7K0
彻底搞懂系列之:ARP协议
Linux网络-MAC协议
注: ARP属于局域网通信的协议标准,因此一台主机不能跨网络向另一台主机发起ARP请求
用户9645905
2022/11/15
2.7K0
Linux网络-MAC协议
【Linux网络编程】数据链路层 | MAC帧 | ARP协议
数据链路实现某一区间(一条)内的通信,而IP实现直至最终目标地址的通信(点对点)。
南桥
2025/01/14
3590
【Linux网络编程】数据链路层 | MAC帧 | ARP协议
【Linux】:数据链路层(以太网 & 局域网通信 & ARP协议 & ARP 欺骗 & DDos 攻击)
数据链路层 位于物理层和网络层之间,其作用是将源自物理层来的数据可靠地传输到相邻节点的目标主机的网络层,主要通过物理介质(如以太网,Wi-Fi等)将数据分割成帧,并在相邻节点之间进行传输。
IsLand1314
2025/03/02
4210
【Linux】:数据链路层(以太网 & 局域网通信 & ARP协议 & ARP 欺骗 & DDos 攻击)
一次web请求用到的arp、ip、udp、tcp、rip、http协议详解
本文面向有一定计算机网络基础的读者,通过实验剖析请求环节中的报文附加一些类比,帮助读者更清晰的了解常用的网络协议工作细节。 本文数据链路层以以太网为例介绍。 概念链接: MAC地址 IP地址 子网掩码 默认网关 。
mooner
2022/12/04
1.6K0
一次web请求用到的arp、ip、udp、tcp、rip、http协议详解
【JavaEE初阶】TCP/IP协议(二)
如果一个IP数据报携带的数据载荷太长了,超过64kb,就会在网络层针对数据进行拆分。把一个数据拆分成多个IP数据报。再分别发送给接收方,再重新拼装。 接收方:数据链路层,针对两个数据帧进行分用,得到两个IP数据报,交给网络层,网络层针对这俩IP数据报进行解析,把里面的载荷拼成一个,交给传输层。
xxxflower
2023/10/16
2600
【JavaEE初阶】TCP/IP协议(二)
转发表(MAC表)、ARP表、路由表总结
计算机网络中一个关键步骤在于通信路径上不同节点对于流经本节点的数据包转发,常见的交换设备主要是交换机(第二层、三层)和路由器(第三层),在实际运行时,它们各自维护一些表结构帮助完成数据包的正确寻址与转发,本文详细介绍了三张至关重要的表:转发表、ARP表与路由表的在网络数据包转发功能中发挥的作用,以及它们协同工作的原理,顺便也会接着之前的文章继续谈谈交换机和路由器的一些事儿。
我是东东东
2018/08/01
29.3K4
转发表(MAC表)、ARP表、路由表总结
【计算机网络】网络基础
计算机数量更多了,通过交换机和路由器连接在一起。如下图,路由器的左右侧都是一个局域网,两个局域网用路由器连接起来,构成局域网LAN;在局域网内部,对应的主机用交换机可以互相转化消息;跨局域网经过路由器+交换机进行数据转化。数据经过交换机发现不是本网络的,直接交给路由器,路由器再在对应的子网当中,找到对应的主机。
YoungMLet
2024/03/01
2170
【计算机网络】网络基础
【计算机网络三】一篇文章详解TCP/IP四层协议簇
DNS ,即 Domain Name System ,域名系统。 DNS 是一整套从域名映射到 IP 的系统。
小皮侠
2024/10/29
6860
【计算机网络三】一篇文章详解TCP/IP四层协议簇
【计算机网络】详解TCP/IP分层模型&局域网和跨网络通信的原理
两个概念:交换机:实现位于同一个子网中的主机数据交换。路由器:实现数据包的跨网络转发。
用户10923276
2024/09/22
8400
【计算机网络】详解TCP/IP分层模型&局域网和跨网络通信的原理
计算机网络-数据链路层
透明传输:指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
用户9615083
2022/12/30
9680
计算机网络-数据链路层
【计算机网络】详解数据链路层数据帧&Mac地址&ARP协议
"以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容 。例如:规定了网络拓扑结构,访问控制方式,传输速率等;例如以太网中的网线必须使用双绞线,传输速率有 10M、100M、1000M等。以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等。
用户10923276
2024/10/17
4990
【计算机网络】详解数据链路层数据帧&Mac地址&ARP协议
初识Linux · 数据链路层
前文我们通过OSI模型,一直到TCP/IP四层模型,经过了三篇文章左右的功夫,我们把网络层介绍完毕,主要还是介绍的IP协议的iphdr,以及内网公网的概念,最后是一个IP分片。那么经过一系列介绍,我们最终也到了TCP/IP四层模型的最后一层——数据链路层。
_lazy
2025/05/21
1060
初识Linux · 数据链路层
TCP/IP第二层--数据链路层
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
黄规速
2022/04/14
2K0
TCP/IP第二层--数据链路层
ARP & RARP
对于以太网,数据链路层上是根据48bit的以太网地址来确定目的接口,设备驱动程序从不检查IP数据报中的目的IP地址。ARP协议为IP地址到对应的硬件地址之间提供动态映射。
Nujil
2023/04/12
1.8K0
相关推荐
【计算机网络】数据链路层
更多 >
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
加入腾讯云技术交流站
洞悉AI新动向 Get大咖技术交流群
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档