ARP协议个人总结

article/2025/9/16 21:48:49

一:引入

当网络设备要发送数据给另一台设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址而获取目的MAC地址的过程是由ARP协议来实现的。
ARP协议是TCP/IP协议簇中的重要组成部分,ARP能够通过目的IP地址发现目标设备的MAC地址,从而实现数据链路层的可达性。

二:ARP数据包的格式

在这里插入图片描述

ARP协议_ARP
注意:ARP报文不能穿越路由器,不能被转发到其他广播域。
各字段的含义:
Hardware Type表示硬件地址类型,一般为以太网
Protocol Type表示三层协议地址类型,一般为IP
Hardware Length和Protocol Length为MAC地址和IP地址的长度,单位是字节
OPeration Code制定了ARP报文的类型,包括ARP request 和ARP reply
Source Hardware Address 指的是发送ARP报文的设备MAC地址
Source Protocol Address 指的是发送ARP报文的设备IP地址
Destination Hardware Address指的是接收者MAC地址,在ARPrequest报文中,该字段值为0
Destination Protocol Address指的是接受者的IP地址

三:ARP的工作过程

1、同网段的数据传输
ARP之简单请求应答
当两台计算机在同一个局域网通信,我们以ping命令为例,该命令使用的ICMP协议
在这里插入图片描述

PC1依据OSI模型①依次从上至下对数据进行封装,包括对ICMP Date加IP包头的封装,但是到了封装MAC地址的时候,②PC1首先查询自己的ARP缓存表,发现没有IP2和他的MAC地址的映射,这个时候MAC数据帧封装失败。我们使用ping命令的时候,是指定PC2的IP2的,计算机是知道目的主机的IP地址,能够完成网络层的数据封装,因为设备通信还需要对方的MAC地址,但是PC1的缓存表里没有,所以在MAC封装的时候填入不了目的MAC地址。

那么PC1为了获取PC2的MAC地址,③PC1要发送询问信息,询问PC2的MAC地址,询问信息包括PC1的IP和MAC地址、PC2的IP地址,这里我们想到一个问题,即使是询问信息,也是需要进行MAC数据帧的封装,那这个询问信息的目的MAC地址填什么呢,规定当目的MAC地址为ff-ff-ff-ff-ff-ff时,就代表这是一个询问信息,也即使后面我要说的广播。

PC2收到这个询问信息后,将这里面的IP1和MAC1(PC1的IP和MAC)添加到本地的ARP缓存表中,然后④PC2发送应答信息,对数据进行IP和MAC的封装,发送给PC2,因为缓存表里已经有PC1的IP和MAC的映射了呢。这个应答信息包含PC2的IP2和MAC2。PC1收到这个应答信息,理所应当的就获取了PC2的MAC地址,并添加到自己的缓存表中。

经过这样交互式的一问一答,PC1和PC2都获得了对方的MAC地址,值得注意的是,目的主机先完成ARP缓存,然后才是源主机完成ARP缓存。之后PC1和PC2就可以真正交流了。

2、不同网段数据传输
在这里插入图片描述
不同网段的主机通信时,主机会封装网关(通常是路由器)的mac地址,然后主机将数据发送给路由器,后续路由进行路由转发,通过arp解析目标地址的mac地址,然后将数据包送达目的地。具体过程分析如下:

如上图,主机A、B通过路由器连接,属于两个不同的网段子网掩码24(255.255.255.0)

1、主机A有数据发往主机B,数据封装IP之后发现没有主机B的mac地址;然后查询ARP,ARP回应:“我在192.168.3.0/24网段,目标地址在192.168.4.0/24,不属于同一网段,需要使用默认网关”;ARP发现默认网关是192.168.3.2,但是没有网关mac地址,需要先进行查询;

2、主机将数据包先放到缓存中,然后发送ARP查询报文:封装自己的mac地址为源mac,目标mac地址写全F的广播地址,请求网关192.168.3.2的mac地址。然后以广播方式发送出去;

3、路由器收到广播数据包,首先将原192.168.3.1添加到自己的mac地址表中,对应mac地址为0800.0222.2222。路由发现是请求自己的mac地址,然后路由回复一个ARP应答:封装自己的IP地址为源IP自己的mac地址为源mac,主机A的IP为目的IP主机A的mac为目的mac,发送一个单播应答“我是192.168.3.2.我的mac地址为0800.0333.2222”;

4、主机收到应答后,将网关mac地址对应192.168.4.2(跨网关通信,其他网段IP地址的mac地址均为网关mac),然后将缓存中的数据包,封装网关mac地址进行发送;

5、路由收到数据包,检查目的IP地址,发现不是给自己的,决定要进行路由,然后查询路由表,需要发往192.168.4.0网段中的192.168.4.2地址。路由准备从相应接口上发出去,然后查询mac地址表,发现没有主机B的映射。路由器发送arp请求查询主机B的mac地址(原理同2、3步,主机B收到请求后首先会添加网关的mac地址,然后单播回复arp请求);

6、路由器收到主机B的mac地址后,将其添加到路由mac地址表中,然后将缓存中的数据2层帧头去掉,封装自己的mac地址为源mac,主机B的mac地址为目的mac(源和目的IP地址不变),加上二层帧头及校验,发送给主机B;

7、主机B收到数据之后,进行处理,发送过程结束;

8、如果主机B收到数据后进行回复,主机B会进行地址判断,不在同一网段,然后决定将数据发送给网关,主机B查询mac地址表获得网关mac地址,将数据封装后发送(arp地址解析的过程不再需要了,mac地址表条目有一定的有效时间),网关收到数据后直接查询mac表,将二层帧mac地址更改为A的mac发送出去。如此,主机A收到主机B的回复;

综上在跨网段通信过程中有以下过程:
1、判断地址是否同一网段
2、查询目的IP地址的mac(发送arp请求)

3、ARP之广播请求单播回应

上图面的图解是不完全的ARP协议,因为在局域网里边不会只有两台主机,这里就要考虑如何在局域网众多主机里获得目的主机的MAC。
在这里插入图片描述

和上面的一样,刚开始PC1并不知道PC2的MAC地址,同样需要发送ARP请求,但是这个局域网里主机很多,怎么唯独获取PC2的MAC呢,①我们想到和一群陌生人交流一样,可以挨着询问一遍,这就是我们要说的广播,首先PC1广播发送询问信息(信息和上一张图介绍的一样),在这个普通交换机上连接的设备都会受到这个PC1发送的询问信息。

接下来②需要做的是,所有在这个交换机上的设备需要判断此询问信息,如果各自的IP和要询问的IP不一致,则丢弃,如图PC3、Route均丢弃该询问信息,而对于PC2判断该询问信息发现满足一致的要求,则接受,同样的写入PC1的IP和MAC到自己的ARP映射表中。

最后,③PC2单播发送应答信息给PC1,告诉PC1自己的IP和MAC地址。

四:ARP代理

在这里插入图片描述

上图中,主机A需要与主机B通信时,目的IP地址与主机的IP地址位于不同网络,但由于主机A未设置网关,所以他将会以广播的形式发送ARP Request报文,请求B的MAC地址,但是广播报文无法被路由器转发,所以主机B无法收到主机A的请求报文。
在路由器上启用代理ARP功能,就可以解决这个问题。启用代理后,路由器接收到这样的请求,会查找路由表,如果存在主机B的路由表项,路由器会将自己的G0/0/0接口的MAC地址回应该ARP Requestrian。主机A收到ARP Reply后,将一路有油漆的G0/0/0接口MAC地址作为目的MAC地址进行数据转发。
小结:1如果两台主机在同一个网段,则直接发送ARP Request报文就好。
2 如果在不同网段,(1)主机A设置了网关,ARP协议可以正常使用。
(2)主机A没有设置网关,这种情况下,我们要开启ARP代理,路由器来重新封装,转发报文

五: 免费ARP

在这里插入图片描述

主机A将ARP Request 广播报文中的目的IP地址字段设置为自己的IP地址,该网络中的所有主机都会接受到此报文。当目的IP地址已经被某一个主机或网管室友是,该主机或网关就会回应ARP reply 报文,通过这种方式主机A就能探测到IP地址冲突了。


http://chatgpt.dhexx.cn/article/KGfwkwPJ.shtml

相关文章

计算机网络知识点总结(ICMP、PING、OSPF、TIMEWAIT、CLOSEWAIT、HTTPS、HTTP2.0)

概述五层模型物理层数据链路层CSMA/CD协议PPP协议MAC地址局域网交换机 网络层(IP层)IP地址分类IP地址与物理地址的区别ARP协议(重点)ICMP协议(重点)Ping原理(重点)Traceroute原理&am…

DC-1靶机渗透测试记录

攻击机 kali-linux-2020.4-vbox-i386 设置 USB设备关闭,网络连接方式仅主机(Host-Only)网络。 攻击机IP 192.168.56.103 步骤1 靶机目标发现 因为靶机和攻击机在同一个网络内,所以使用KALI上arp-scan -l 进行扫描。扫描确定了靶机…

vue3 无法通过局域网访问Network 项目IP地址 无法通过IP访问项目

首先把防火墙关了 通过ping IP 看看是否链接的通 然后修改vue.config 下的publicPath

windows网络命令:ping、ipconfig、tracert、netstat、arp(附ubuntu)

ping www.baidu.com,从命令执行开始,到结果返回总共需要经过以下几步: 1、DNS解析:www.baidu.com解析成具体的IP地址,因为数据包在网络上传输时只认IP地址。 2、查找路由表:IP地址以后,接下来就…

计算机网络复习

计算机网络 一.计算机网络概述 计算机网络的概念:(*) 1.计算机网络的定义: ​ 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路链接起来,在网络操作系统&#xff0c…

Elasticsearch之快速入门篇(个人笔记)

Elasticsearch概述 Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。   Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库——无论是开源还是私有,但它也仅仅只是一个库。为了充分发挥其功…

【问题整理】计算机相关

目录 缩写 计算机的发展 摩尔定律 冯诺依曼理论 计算机系统的构成 CPU/中央处理器 CPU的性能参数 内存 随机存储器RAM和只读存储器ROM 外存 主板 显卡 定点数和浮点数 网络拓扑结构设计 某医院医保系统故障,如何排错 计算机网络的分层 OSI七层模型 …

验证性实验

验证性实验 一、ipconfig ipconfig 是微软操作系统的计算机上用来控制网络连接的一个命令行工具。它的主要用来显示当前网络连接的配置信息(/all 参数)。 实作一: 使用 ipconfig/all 查看自己计算机的网络配置,尽可能明白每行的…

windows网络命令:ping、ipconfig、tracert、netstat、arp

ping www.baidu.com,从命令执行开始,到结果返回总共需要经过以下几步: 1、DNS解析:www.baidu.com解析成具体的IP地址,因为数据包在网络上传输时只认IP地址。 2、查找路由表:IP地址以后,接下来…

js ftp 上传文件到服务器上,js ftp上传文件到服务器上

js ftp上传文件到服务器上 内容精选 换一换 云堡垒机配置了FTP/SFTP远程备份,报请检查服务器密码或网络连接情况错误,不能启动远程备份。选择备份具体某一天日志,提示备份正在执行,但远程服务器未接收到该备份文件。原因一&#x…

微信/企业微信-本地(MAC)VUE项目调用JS-SDK,开发测试环境搭建

调用微信SDK前置条件 根据官方文档,前端在使用微信的接口前要先进行配置,配置信息得从后端获取,后端在计算signature时需要前端传入当前页面的URL,开发者要在公众平台设置JS SDK安全域名,在这个域名下才能使用微信JS S…

innodb 集群_部署MySQL InnoDB集群以实现高可用性

innodb 集群 In this article, I am going to explain how we can deploy the MySQL InnoDB cluster. InnoDB Cluster is a high availability solution provided by MySQL that has single and multi-master capabilities and failover detection. 在本文中,我将解…

ping命令和它的“亲友”们

前面在《kali主机发现背后的秘密》文章里,介绍了几个*ping的命令。ping可是“可人儿”。瞧,它们都来攀亲戚了,蹭热度来了。今天我们就来认识一下它们。 关系 名称 功能特点 备注 本宗 ping 网络诊断工具,测试互联网协议网络…

搞了运维开发这么多年,原来 Ping 还能这么玩儿

作者:刘勇 腾讯后台研发工程师,就读于北京大学。目前主要从事腾讯云-云拨测项目后台开发相关工作。 网络:良辰有一百种方法让你 Ping 不通,你却无可奈何 为什么 Ping 不通了?为什么又通了? 这些居然都能…

同一局域网下访问vue项目

同一局域网: 在你的电脑上用快捷键windows R打开cmd,使用ping ip地址(想要访问你项目的那台电脑的ip地址),如果成功后就表示你们处于同一局域网下。 本机ip地址 在你的电脑上用快捷键windows R打开cmd&#xff…

【Java 并发编程】一文详解 Java 中有几种创建线程的方式

Java 中有几种创建线程的方式? 1. Java 程序天然就是多线程的2. 线程的启动与终止2.1 线程的启动(1)继承 Thread 类,重写 run() 方法(2)实现 Runnable 接口,重写 run() 方法(3)Thre…

【操作系统】创建线程的方式

学习目标: 目标:掌握操作系统知识 学习内容: 本文内容:创建线程的方式 文章目录 学习目标:学习内容:1创建线程的方法一 : 继承Thread类1.1 写法一1.2 写法二 2 创建线程的方法二 :…

想不到吧,Java创建线程的方式只有一种

目录 前言继承Thread方式实现Runnable接口实现callable接口总结 前言 看到这个标题的小伙伴先别着急喷我……在面试的时候,我们经常会被问到这种基础题:Java创建线程的方式有几种? 比较正常的答法当然是三种: 继承Thread实现Ru…

【 java 多线程】创建多线程的方式三:使用 Callable 接口创建多线程

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

关于创建线程的方式有几种

导语 在我们平常的面试中,我们经常会被面试官问道:你知道Java中多线程的实现方式有几种吗?在网上刷过面试题的童鞋们,一般都会说两种:继承Thread、实现Runnable,甚至还有甚者可能会说三种、四种的&#xf…