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

TCP/IP协议专栏——ARP详解——网络入门和工程维护必看

ARP简介

ARP( Address Resolution Protocol)即地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。

主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;
收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存。

地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。

ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

ARP报文结构

在这里插入图片描述

ARP缓存表

ARP缓存是个用来储存IP地址和MAC地址的缓冲区
其本质就是一个IP地址–>MAC地址的对应表,表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址。
每一个以太网或令牌环网络适配器都有自己单独的表。
当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。
为使广播量最小,ARP维护IP地址到MAC地址映射的缓存以便将来使用。

ARP更新和老化

在交换机中,ARP缓存表都有老化时间(9默认老化时间为4h=14400s).
ARP缓存表老化时间按不延迟.
老化时间可以是手动配置的也可以是默认设置的。
ARP表的老化时间字段为age(min) ,指这条ARP表项存在了多长时间。
老化时间从0开始计算,当ARP表中某一条表项的老化时间达到了设定的老化时间值时,触发交换机发起ARP请求来查看网络中是否还存在这个IP地址对应的设备,如果收到ARP应答说明还有对应的设备存在于网络中,则更新ARP老化时间即将ARP表项的老化时间刷新为0;如果没有收到ARP应答说明对应的设备已离开该网络,老化掉此条ARP表项也即是删除此ARP表项。

在ARP更新过程中,交换机发送的ARP更新请求报文与普通的ARP请求报文的区别在于:
主机ARP请求报文DMAC为全F的广播地址,
交换机ARP更新请求报文DMAC为目的主机的MAC地址,是一个单播报文,其余字段相同。

ARP更新和老化条件

ARP更新条件
1、设备收到来自某IP的ARP请求包或者免费ARP。
2、设备的现有ARP表项中已经存在该IP对应的ARP表项。

ARP表老化时间定时器的重设
1、设备相应的ARP表项更新时。
2、设备调用ARP表项转发数据后。

ARP老化条件
1、ARP表项达到老化时间且没有相关更新操作。

免费ARP

免费ARP,它是指主机发送ARP查找自己的IP地址,通常发生在系统引导期间进行接口配置的时候。

免费ARP请求与ARP请求的差别在于免费ARP请求的DIP为自身的IP地址。

免费ARP可以有两个方面的作用:
1、一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。
2、如果发送免费ARP的主机正好改变了硬件地址(比如,主机关机并更
换了一块接口卡,然后重启),那么这个分组就可以使其它主机高
速缓存中旧的硬件地址进行相应的更新。

ARP欺骗

地址解析协议是建立在网络中各个主机互相信任的基础上的,它的诞生使得网络能够更加高效的运行,但其本身也存在缺陷:

ARP地址转换表是依赖于计算机中高速缓冲存储器动态更新的,而高速缓冲存储器的更新是受到更新周期的限制的,只保存最近使用的地址的映射关系表项,这使得攻击者有了可乘之机,可以在高速缓冲存储器更新表项之前修改地址转换表,实现攻击。

ARP请求为广播形式发送的,网络上的主机可以自主发送ARP应答消息,并且当其他主机收到应答报文时不会检测该报文的真实性就将其记录在本地的MAC地址转换表,这样攻击者就可以向目标主机发送伪ARP应答报文,从而篡改本地的MAC地址表。

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

ARP代理

ARP(地址解析协议)工作在一个网段中

而代理ARP(Proxy ARP,也被称作混杂ARP(Promiscuous ARP) )工作在不同的网段间,其一般被像路由器这样的设备使用,用来代替处于另一个网段的主机回答本网段主机的ARP请求。

代理ARP协议使得子网化网络拓扑对于主机来说时透明的(或者可以说是路由器以一个不真实的PC2的MAC地址欺骗了源主机PC1)。

相关文章:

  • python 字符串类型
  • 【canvas】-- H5新增标签canvas的简单用法
  • C#实现根据字体名称获取字体文件名
  • Android开发-视图view讲解
  • Vue样式绑定
  • 机器学习分类
  • 计算机毕业设计ssm水果库存管理系统30q2h系统+程序+源码+lw+远程部署
  • 小红书和中兴笔试
  • JavaWeb之Servlet-----(2)
  • Java中如何实现一个“读写锁“呢?
  • 线程池简介说明
  • PostgreSQL执行计划介绍
  • 【沐风老师】3DMAX散布插件scat_pro v1.1使用教程
  • [极致用户体验] 如何实现响应式canvas?保持canvas比例?教你让canvas自适应屏幕宽度!
  • 【FNN回归预测】基于matlab蝙蝠算法优化前馈神经网络数据回归预测【含Matlab源码 2070期】
  • Android交互
  • Android框架之Volley
  • C++11: atomic 头文件
  • C++类的相互关联
  • C++入门教程(10):for 语句
  • Docker下部署自己的LNMP工作环境
  • Java IO学习笔记一
  • Laravel 菜鸟晋级之路
  • mysql 5.6 原生Online DDL解析
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • ReactNativeweexDeviceOne对比
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Spring Cloud中负载均衡器概览
  • windows下使用nginx调试简介
  • 包装类对象
  • 从重复到重用
  • 给初学者:JavaScript 中数组操作注意点
  • 关于extract.autodesk.io的一些说明
  • 汉诺塔算法
  • 解决iview多表头动态更改列元素发生的错误
  • 前端工程化(Gulp、Webpack)-webpack
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 物联网链路协议
  • Nginx实现动静分离
  • 容器镜像
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #if #elif #endif
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1)Nginx简介和安装教程
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (python)数据结构---字典
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)socket Aio demo
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .CSS-hover 的解释
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法