地址解析协议 ARP 详解
时间:2022-07-22
本文章向大家介绍地址解析协议 ARP 详解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
介绍地址解析协议 ARP 之前我们必须要先了解一下 为什么要使用 ARP,这就要先知道 IP 地址和硬件地址的关系。?
IP 地址与硬件地址
我们首先要明确 IP 地址与硬件地址是不同的地址。
- ✅ 硬件地址(或物理地址)是数据链路层和物理层使用的地址。
- ✅ IP 地址是网络层和以上各层使用的地址,是一种逻辑地址。
从图中可以看到 IP 地址放在 IP 数据报的首部,而硬件地址则放在 MAC 帧的首部。
下面我们步入正题,来看一下 地址解析协议 ARP ?
地址解析协议 ARP
我们经常会遇到这样的问题:已经知道了一个机器(主机或路由器)的 IP 地址,需要找出其相应的硬件地址。地址解析协议 ARP
就是用来解决这样的问题的。
地址解析协议 ARP 要点
- ✅ 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
- ✅ 每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
比如:
TTL (Time To Live):地址映射有效时间 。
当主机 A 要向本局域网上的某台主机 B 发送 IP 数据报时:
- 1️⃣ 就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。
- 2️⃣ 如果有,就在 ARP 高速缓存中查出其对应的硬件地址,再把这个硬件地址写入 MAC 帧,然后通过局域网把该 MAC 帧发往此硬件地址。
- 3️⃣ 如果没有,主机 A 就自动运行 ARP ,然后按 以下步骤 ? 找出主机 B 的硬件地址。
- ARP 进程在本局域网上广播发送一个 ARP 请求分组;
- 在本局域网上的所有主机上运行的 ARP 进程都可以收到此 ARP 请求分组。
- 主机 B 的 IP 地址与 ARP 请求分组中要查询的 IP 地址一致,就收下这个 ARP 请求分组,并向主机 A 发送 ARP 响应分组同时在这个 ARP 响应分组中写入自己的硬件地址。
- 主机 A 收到主机 B 的 ARP 响应分组后,就在其
ARP高速缓存
中写入主机 B 的 IP 地址到硬件地址的映射。
其实就是 请求 和 响应 。
值得一提的是,如果将上面的主机替换为路由器也同样适用,我们只需将请求发给路由器,剩下的转发工作交给路由器来完成。
- JQuery JCshare 0.1 分享插件
- Java中的即时编译(Just-in-time compilation)
- 无尽的忙碌换来幸福的日子
- 消费者驱动的微服务契约测试套件:Spring Cloud Contract
- 自己做的一个小程序 可采集、导出、模板、配置
- 分布式消息队列 RocketMQ 源码分析 —— Message 拉取与消费(上)
- .NET反射、委托技术与设计模式
- 我最常用的Intellij IDEA快捷键
- 用Js控制TextBox不能复制粘贴
- 漫画:什么是单例模式?(整合版)
- 保护连接字符串
- IntelliJ IDEA 复杂的重构技巧(二)
- Spring Boot中使用Flyway来管理数据库版本
- 缓存穿透、缓存并发、热点缓存之最佳招式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Vulnhub】AI Web 2.0
- Python迭代器和生成器
- Python深层解析json数据之JsonPath
- Linux 下的 pstack 工具安装及简单应用
- range函数小应用
- 今日算法题,请查收
- 如何将根证书预置到 firefox 浏览器发布包中
- Vue + Flask 实战开发系列(九)
- 推荐几款快速管理 Kubernetes 多集群环境的神器
- 1. 初识Jackson -- 世界上最好的JSON库
- 实时应用程序中checkpoint语义以及获取最新offset
- Python2.6低版本Python如何实现爬虫功能
- python开发web服务 bottle框架
- 这样设置 IDEA,让你爽到飞起!
- GO 切片实力踩坑