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

动态ARP

定义

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

动态ARP适用于拓扑结构复杂、通信实时性要求高的网络。

ARP地址解析过程

动态ARP通过广播ARP请求和单播ARP应答这两个过程完成地址解析。

图1 ARP地址解析过程

当需要通信的两台主机处于同一网段时,如图1中的Host_1和Host_3,Host_1要向Host_3发送数据。

  1. 首先,Host_1会查找自己本地缓存的ARP表,确定是否包含Host_3对应的ARP表项。如果Host_1在ARP表中找到了Host_3对应的MAC地址,则Host_1直接利用ARP表中的MAC地址,对数据报文进行帧封装,并将数据报文发送给Host_3。如果Host_1在ARP表中找不到Host_3对应的MAC地址,则先缓存该数据报文,并以广播方式发送一个ARP请求报文。如图中所示,OP字段为1表示该报文为ARP请求报文,ARP请求报文中的源MAC地址和源IP地址为Host_1的MAC地址和IP地址,目的MAC地址为全0的MAC地址,目的IP地址为Host_3的IP地址。
  2. Router_1收到ARP请求报文后,将该ARP请求报文在同一广播域内转发。
  3. 同一广播域内的主机Host_2和Host_3都能接收到该ARP请求报文,但只有被请求的主机(即Host_3)会对该ARP请求报文进行处理。Host_3比较自己的IP地址和ARP请求报文中的目的IP地址,当两者相同时进行如下处理:将ARP请求报文中的源IP地址和源MAC地址(即Host_1的IP地址和MAC地址)存入自己的ARP表中。之后以单播方式发送ARP应答报文给Host_1,ARP应答报文内容如图中所示,OP字段为2表示该报文为ARP应答报文,源MAC地址和源IP地址为Host_3的MAC地址和IP地址,目的MAC地址和目的IP地址为Host_1的MAC地址和IP地址。
  4. Router_1收到ARP应答报文后,将该ARP应答报文转发给Host_1。Host_1收到ARP应答报文后,将Host_3的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将数据报文进行帧封装,并将数据报文发送给Host_3。

当需要通信的两台主机处于不同网段时,如图中的Host_1和Host_4,Host_1上已经配置缺省网关,Host_1首先会发送ARP请求报文,请求网关Router的IP地址对应的MAC地址。Host_1收到ARP应答报文后,将数据报文封装并发给网关,再由网关将数据报文发送给目的主机Host_4。Host_1学习网关IP地址对应的ARP表项的过程,以及网关设备学习Host_4的IP地址对应的ARP表项的过程与上述同网段主机Host_1和Host_3之间进行ARP地址解析的过程类似,不再赘述。

相关文章:

  • TCP 协议详解:三次握手与四次挥手
  • 一篇快速教你如何创建专业级数据可视化库
  • 开启数字新纪元:全球首款开源AI女友,你的私人数字伴侣
  • 基于STM32的智能工厂环境监测系统
  • 跌倒识别:守护公共安全的AI技术应用场景-免费API调用
  • Spring Boot事件监听使用指南
  • 【鸿蒙】创建第⼀个鸿蒙项⽬
  • 分布式训练框架
  • Spring Boot启动与运行机制详解:初学者友好版
  • 51单片机定时器中断配置
  • QT day4
  • 开源一套Trados Sdlxliff 对比工具
  • 以太坊==使用IDE remix.ethereum搭配metamask发布合约到测试网
  • 【C++】优先队列的使用及模拟实现
  • MetaGPT: Merging Large Language Models Using Model Exclusive Task Arithmetic
  • 2019.2.20 c++ 知识梳理
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • android图片蒙层
  • DOM的那些事
  • download使用浅析
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript设计模式系列一:工厂模式
  • Java多态
  • java概述
  • Kibana配置logstash,报表一体化
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • 创建一种深思熟虑的文化
  • 面试总结JavaScript篇
  • 如何设计一个微型分布式架构?
  • 如何用vue打造一个移动端音乐播放器
  • 小程序开发之路(一)
  • 小试R空间处理新库sf
  • 学习笔记TF060:图像语音结合,看图说话
  • C# - 为值类型重定义相等性
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 交换综合实验一
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # Apache SeaTunnel 究竟是什么?
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (floyd+补集) poj 3275
  • (vue)页面文件上传获取:action地址
  • (补)B+树一些思想
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (十八)SpringBoot之发送QQ邮件
  • (四)软件性能测试
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .apk 成为历史!
  • .NET BackgroundWorker
  • .net 调用php,php 调用.net com组件 --