首页 > 其他分享 >第十四篇:每天都在上网,居然不知道ARP协议?

第十四篇:每天都在上网,居然不知道ARP协议?

时间:2024-09-04 11:50:59浏览次数:5  
标签:ARP 网关 主机 IP地址 MAC 上网 地址 第十四

我们前面系列文章提到过,电脑A给电脑B发信息,电脑A需要知道电脑B的IP地址,mac地址等才能正确的把信息发送给电脑B。

上面DNS章节我们讲到,DNS协议可以通过域名查询到IP。

1. 那么电脑A怎么获取电脑B的mac地址呢?

答案是我们可以设计一套可以通过IP查询MAC地址的协议,这套协议,我们把它叫做地址解析协议---Address Resolution Protocol,简称ARP。

ARP协议为广播协议,统一向局域网内所有机器发送请求,接收方如果发现请求的目的IP与自己的IP相同,则返回接收方的IP以及MAC地址,否则忽略。

2. ARP的工作原理

1)局域网内部通信

① A要向C发送信息,但是不知道C的MAC地址,于是系统程序用IP地址在本地的缓存里面找有没有对应的MAC地址;

② 如果有,系统程序返回MAC地址后结束查找MAC地址;否则,A将按照ARP协议格式组织报文,向局域网所有的主机询问目的IP是谁的;

③ 如图,ARP消息报文到达B,先检查MAC地址,发现目的MAC地址是FF:FF:FF:FF:FF:FF,知道是ARP消息,来询问问MAC地址的,于是取出消息中目的IP地址与本机IP地址进行对比,发现不匹配,丢弃消息;

④ 如图,ARP消息报文到达C,先检查MAC地址,发现目的MAC地址是FF:FF:FF:FF:FF:FF,知道是ARP消息,来询问问MAC地址的,于是取出消息中目的IP与本机IP地址进行对比,发现匹配,这个时候C将执行两个动作:

第一、为了方便后面C向A回复消息,C会将A的MAC地址与A的IP地址形成记录在本地保存起来;

第二、C会将自己的MAC地址返回给A;

⑤ A收到C的回复,会将C的MAC地址与C的IP地址形成记录缓存起来;方便后面继续跟C交互。

以上,为局域网内ARP的运作原理。

其中,源主机与目标主机都要缓存对方的MAC地址与IP地址的关联记录;原因是后面源主机与目标主机极有可能进行很多交互,为了不让每次交互都查询MAC地址,缓存在本地是最佳的方案,如果不缓存,每次都ARP泛洪(广播),浪费网络资源(请求要在网络上传输,占用了带宽),影响请求效率(ARP广播需要时间);值得注意的是:MAC地址与IP的缓存不是永久的,存在有效期,这样做的好处是减少了过多的记录缓存,避免占用过多系统资源,其次,IP地址可能会变更与主机的绑定,如果一直缓存,一旦IP变更绑定,将无法再正常访问目的主机。

2)跨网段访问

如上图:A和C分属不同的局域网,ARP的消息只会在局域网里面进行广播;为了避免广播风暴,消息在其他局域网继续广播,我们会在两个网络之间架设一个设备,这个设备拥有隔离广播的作用,并路由来往于两个网络的消息,这样的设计叫做网关;A和C要想进行通信,我们要求“连接两个网络的设备”必须具有路由功能并只转发目的MAC地址是自己的消息等功能。这样的设备叫做网关设备。

题外话:网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。网关对收到的信息要重新打包,以适应目的系统的需求。

网关是一个功能,而不是一个设备,只要一个设备在网络中充当网关角色,那么它就是网关设备;生活中最经常出现的两种网关就是,用于智能家居的蓝牙网关,和以太网网关路由器。

ARP其实属于局域网协议,这种情况目的MAC地址是如何设置的,消息是如何进行传输的呢?

跨网段访问ARP分三个阶段:

① 广播获取网关地址,源主机将消息发送给网关;

② 网关ARP广播获取目的主机MAC,网关重新封装数据,将消息发送给目的主机;

③ 目的主机回复源主机消息。

第一阶段:

① 主机A数据经过网络层的程序封装加入IP地址后,继续向下封装,将数据链路层的MAC地址封装,但是发现没有主机C的MAC地址,于是在本地ARP表里查询,这里假设没有缓存的主机的MAC地址,判断主机C是否和主机A在同一网段;发现主机C的IP不是本网段IP需要跨网段传输,跨网段相当于要出本局域网的这个大门,所以需要找网关,查询ARP表,发现没有网关MAC地址信息;

题外话:网关IP地址从哪里来呢?默认网关或手动设置。

下图为Windows的网关地址设置:

② 主机A先把要发送的信息放入缓存中,然后在本局域网内发送ARP报文请求网关的MAC地址;

ARP消息内容如下:

③ 交换机1将该帧源mac和接口port信息保存到MAC地址表,然后对该广播报文进行泛洪操作;

④ 网关(192.168.1.0)收到广播数据包后,先将主机A的MAC与接口保存到MAC地址表(MAC地址与端口port的对应记录表)中,同时也会保存主机A的MAC与IP到ARP表里,然后对比该报文的目的IP是否为自己,网关发现请求的正是自己的MAC地址,于是网关将自己的MAC地址封装在回复报文里进行回复,内容大概是“我是网关,我的MAC地址是xxxxxxxxxxxxxxxxxx”;

⑤ 网关(192.168.1.0)的回复信息到达交换机1后,交换机1将“网关MAC”与接口信息保存到自己的MAC地址表中,并根据回复信息的目的MAC,在MAC地址表里面找到对应的接口,将信息转发给主机A;

⑥ 主机A收到网关的回复报文后,将网关(192.168.1.0)的MAC地址与IP保存入ARP表里面,将缓存的数据拿出封装,目的IP为主机C的IP;目的MAC为本网段网关(192.168.1.0)的MAC地址(跨网段通信,目的MAC地址统一写本网段内网关的MAC地址,意思是帧交给网关就完事了,由网关进行下一步转发,就没主机的事了,目的MAC写网关即可),重新封装好后进行重新发送。

请求的数据包格式:

第二阶段网关192.168.2.0ARP广播获取目的主机MAC网关重新封装数据将消息发送给目的主机C

① 主机A发送的消息到达网关(192.168.1.0),但是网关(192.168.1.0)发现这个数据包的MAC地址是自己的,但目的IP地址不是,所以就需要进行路由(查询一条前行的道路),从路由表查找通向192.168.2.0网段中主机192.168.2.1的路由信息(即主机C的路由信息),找到后,把消息的目的MAC地址改成网关(192.168.2.0)的MAC地址,然后网关(192.168.1.0)把信息转发给网关(192.168.2.0)。

② 网关(192.168.2.0)发现这个数据包的MAC地址是自己的,但目的IP地址不是;然后查询ARP表,如果存在,就直接替换消息的目的MAC地址,并进行转发,否则网关(192.168.2.0)将发送ARP报文进行问询主机C的MAC地址;

ARP报文格式:

③ 交换机2将主机A的MAC与接口保存到MAC地址表中并泛洪该广播报文;

④ 主机C接收到ARP请求报文,发现是问自己的,将主机A的MAC与IP保存到ARP表中并回复一个ARP Reply报文;

⑤ 交换机2接收到主机C的回复消息,将主机C的MAC与接口保存到MAC地址表中并转发该单播回复报文;

⑥ 网关(192.168.2.0)收到主机C的ARP回复后,将主机A的MAC与IP保存到ARP表中然后将该数据包的目的MAC地址信息封装为主机C的MAC地址、源MAC地址换成网关(192.168.2.0)的MAC地址,加上FCS,封装好后进行发送;

数据报文格式:

题外话:思考下,为何在这里要把源MAC地址换成网关呢?

两个物理接口必须在同一个域。

⑦ 交换机2查询对应目的MAC地址在哪个端进行口转发然后转发;

⑧ 主机C收到数据包进行解封装,将数据包的源MAC地址(网关的MAC地址)和主机A的IP保存到ARP表里,然后处理数据,发送过程完成;

第三阶段回复消息(这个就简单了,因为刚才的请求已经在对应的节点建立了对应的关系)

① 主机C收到信息后进行回复,不在同网段就回复给本网段网关,通过交换机2转发给网关(192.168.2.0);

② 网关(192.168.2.0)收到回复后将数据包转发给主机A的对应网关(192.168.1.0),网关(192.168.1.0)查询表,转发给交换机1,再通过交换机1转发到主机A的手中;

3)ARP协议内容详细格式

4)静态ARP

静态ARP表项是由网络管理员手工建立的IP地址和MAC地址之间固定的映射关系。静态ARP表项不会被老化,不会被动态ARP表项覆盖。

① 短静态ARP表项:手工建立IP地址和MAC地址之间固定的映射关系,未同时指定VLAN和出接口。

② 长静态ARP表项:手工建立IP地址和MAC地址之间固定的映射关系,并同时指定该ARP表项所在VLAN和出接口。

5)动态ARP

动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。

6)代理ARP

对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答。

代理ARP就是将一个主机“作为”另一个主机对收到的ARP请求进行应答。它能使得在不影响路由表的情况下添加一个新的Router,使得子网对该主机来说变得更透明化。同时也会带来巨大的风险,除了ARP欺骗,和某个网段内的ARP增加,最重要的就是无法对网络拓扑进行网络概括。代理ARP的使用一般是使用在没有配置默认网关和路由策略的网络上的。

7)ARP欺骗

ARP请求,是以广播的形式发送的,局域网上的所有主机,都可以自主地发送ARP应答消息,并且当其他主机收到应答消息时,不会检测该消息的真实性,就将其记录在本地的“ARP缓存表”中。这样攻击者就可以向目标主机发送伪造的“ARP请求包”(错误的IP地址和MAC地址的映射关系),从而篡改目标主机的本地“ARP缓存表”。

ARP欺骗,可以导致目标主机与网关通信失败,更会导致通信重定向,所有的数据都会通过攻击者的机器,因此存在极大的安全隐患。

8)RARP

反向地址转换协议(RARP:Reverse Address Resolution Protocol) 允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。

假设让我们来实现RARP,我们将:

① 我们规定只有RARP服务器能回复RARP广播信息;

② 制定RARP协议格式;

③ 我们编写程序实现RARP协议。

工作原理:

① 发送主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;

② 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;

③ 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;

④ 如果不存在,RARP服务器对此不做任何的响应;

⑤ 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

  • 读者的困惑:感觉上只要IP就能进行通信,不需要Mac地址了?留待大家思考

标签:ARP,网关,主机,IP地址,MAC,上网,地址,第十四
From: https://blog.csdn.net/u013501979/article/details/141889385

相关文章

  • carplay需要mfi认证吗?
    CarPlay是苹果公司推出的一种车载智能系统,它将用户的iPhone(或其他兼容的iOS设备)与汽车的仪表盘和控制系统无缝集成,为驾驶者提供更加便捷、智能且安全的驾驶体验。MFi认证是苹果公司(AppleInc.)对其授权配件厂商生产的外置配件的一种标识使用许可,全称是MadeforiPhone/iPod/iPad。通......
  • VBA数据库解决方案第十四讲:如何在数据库中动态删除和建立数据表
    《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64......
  • 监控电脑:上网监控软件有哪些|5款上网行为监控系统建议老板们收藏!
    老板不在家,员工称霸王!你的每一个举动,老板都能看见?不信你看看这个!上网监控软件员工上网行为的管理成为企业保障信息安全、提升工作效率的重要一环。一款优秀的上网行为监控系统,不仅能帮助企业实时监控员工的网络活动,还能有效防止数据泄露、提升整体网络安全水平。以下是......
  • 上网行为监控软件有哪些(这10款上网行为监控系统值得收藏!)
    企业的网络安全与员工的上网行为管理成为不可忽视的重要环节。为了帮助企业更好地监控和管理员工的网络活动,提升工作效率并确保网络安全,下面精心挑选了以下10款值得收藏的上网行为监控软件。1.安企神以其创新的技术和全面的功能在上网行为管理领域独树一帜。它不仅能实时......
  • Ubuntu 24.04 VMware里面设置静态ip上网
    1.VMware里面设置网络为桥接模式2.Ubuntu里面检查网卡名称[~]ipaddr1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000link/loopback00:00:00:00......
  • SZARP协助ARMxy边缘计算机实现智能工厂可视化解决方案
    在智能工厂的构建中,SZARP与ARMxy边缘计算机的协同作用,实现了设备的实时监控、深入的数据分析和有效的预测性维护,极大地提高了生产效率和产品质量。通过智能制造可视化技术,企业能够清晰地掌握生产流程的每一个环节,实现资源的最优分配和流程的最优化管理。一、SZARP简介SZARP集成了数......
  • C++第十四弹 -- STL之queue和priority_queue深度剖析
    目录前言1.queue的介绍与使用1.1.queue的介绍1.2为什么容器类不选vector?1.3queue的使用1.4OJ用队列实现栈2.queue的模拟实现3.deque的介绍3.1什么是适配器3.2STL标准库中stack和queue的底层结构3.3deque的简单介绍4.priority_queue的介绍与使用4.1介绍4.2......
  • 深入浅出LLamaSharp:打造智能.NET应用,不需GPU也能玩转LLaMA模型
            在如今的.NET社区中,机器学习和人工智能的应用越来越普遍。今天我要给大家推荐一个名叫LLamaSharp的开源项目。这是llama.cpp的C#/.NET绑定,提供了高级的API,使得我们能在本地设备上使用C#/.NET推理LLaMA模型,并且部署它。        LLamaSharp支持在Windo......
  • arp报文及使用go实现
    一、ARP协议报文格式及ARP表ARP(AddressResolutionProtocal,地址解析协议)是将IP地址解析为以太网的MAC地址(或者称为物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址还是不够的,因为IP数据......
  • 使用跨平台库SixLabors.ImageSharp.Drawing生成图片验证码
     ///<summary>///绘制图片验证码///</summary>///<paramname="webRootPath"></param>///<paramname="width"></param>///<paramname="height"></param>///<returns>&......