ARP(Address Resolution Protocol,地址解析协议)可以在以太网上,根据已知的IP地址查找主机的硬件地址。
我们以以太网的工作环境作为背景来探讨这一协议(串行链路由于是点到点链路,故而不需要ARP)。在以太网的工作环境中,当主机需要向一个IP地址发送数据时,它需要将目标的物理地址(也就是MAC地址,也有文献称其为硬件地址)写在数据帧的目的MAC地址字段位置上,而这一动作的前提是,网络层已经知道了这一地址并且将其与逻辑目的地址建立了一个映射关系。这就好比在手机上存了一个电话号码并备注上了一个联系人一样,当需要打电话时,只需要查找该联系人的姓名即可,手机会帮我们自动选择他的电话号码拨过去。
当我们并不知道一台主机的IP地址与物理地址的映射关系的时候,就需要用到ARP。
我们用一个简单的比喻来形容ARP的工作过程。当你只知道你跟张三是同班同学却不知道他的具体座位时,你站起来大喊了一声:“我是王二,谁是张三?”于是张三说:”我是张三。“这样,你就知道了张三的具体位置,同时张三也知道了你的位置和姓名。
如下图所示为一个ARP请求报文的示例。
当一台主机需要访问一个与自己在同一个网络的IP地址但不知道目的主机的物理地址时,它就会发送一个ARP请求报文。
由于我们并不知道目标物理地址是什么,该报文的目标物理地址(即MAC地址)在数据帧的头部用二层广播地址FFFF.FFFF.FFFF来填充。
一个二层目的地址为广播地址的数据帧是会被发送给广播域内所有的成员的,如果网络规划正确,那么这其中一定会包含真正的接收者。
当真正的接收者收到该数据帧之后,会转交给自身的ARP程序,经过比对,发现其中的目的IP地址正是其所拥有的,就会对发送者做出回应,在回应报文中会将自身的物理地址写在发送者MAC地址的位置。
这样,目的主机根据发送者ARP请求报文中的MAC地址和IP地址获得了发送者的物理地址和逻辑地址,并且将会以明确的MAC地址和IP地址给发送者发送回应报文。
一次美妙的陌生人之间的互相介绍就这样完成了。看起来是不是很简单呢?
在一般情况下,只能为主机分配一个默认网关。如果需要互通的主机处在相同的网段却不在同一物理网络,并且连接主机的网关设备具有不同的网关地址,在这种场景中,如果发生网络故障,我们该如何防止业务中断呢?在这种场景中,需要代理ARP,其工作过程如下图所示。
可以看出,实际上,代理ARP只是一种服务,它并不是一种协议。并且,服务提供者对用户进行了“欺骗”,只是将自身的MAC地址回应给了用户,以此来达到代替用户转发数据的目的。
在默认情况下,在华为的设备上,这一功能是关闭掉的。
ARP 协议包(ARP 报文)主要分为 ARP 请求包和 ARP 响应包,本节将介绍 ARP 协议包的格式。
ARP 协议是通过报文进行工作的,ARP 报文格式如图所示。
ARP 报文总长度为 28 字节,MAC 地址长度为 6 字节,IP 地址长度为 4 字节。
其中,每个字段的含义如下。
ARP 数据包分为请求包和响应包,对应报文中的某些字段值也有所不同。
免费 ARP(Gratuitous ARP)包是一种特殊的 ARP 请求,它并非期待得到 IP 对应的 MAC 地址,而是当主机启动的时候,发送一个 Gratuitous ARP 请求,即请求自己的 IP 地址的 MAC 地址。
本节将介绍免费 ARP 包的结构、作用,以及如何发送免费 ARP 包。
免费 ARP 包的结构
免费 ARP 报文与普通 ARP 请求报文的区别在于报文中的目标 IP 地址。普通 ARP 报文中的目标 IP 地址是其他主机的 IP 地址;而免费 ARP 的请求报文中,目标 IP 地址是自己的 IP 地址。
对于ARP,它是通过以太网二层广播以及已知单播回复的方式来获取物理地址(MAC地址)和逻辑地址(IP地址)之间的映射关系的。
07ems.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>title</title> <style> #ems { width: 400px; height: 500px; positio
cuda的lib库文件无法找到。首先看libcudart.so.9.0是否在/usr/local/cuda-9.0/lib64下。解决在pycharm的configure中的LD_LIBRARY_PATH环境变量添加/usr/local/cuda-9.0/lib64
先看错误代码:parser.add_argument('--cfg', type=str, required=True, metavar="FILE", help='path to config file', )–cfg 是定义为可选参数;required=True,表示必须在命令行输入解决方案:将required=True改为required=False...
APK的基本概念在Android设备上,直接运行APK文件即可完成安装APK文件其实是zip格式,但后缀名被修改为apk,通过解压,可以看到Dex文件,Dex是DalvikVM executes的简称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码下图是解压之后的APK目录META-INF\ (注:Jar文件中常可以看到);res\ (注:存放资源文件的
1. 简介辐射度算法是一种经典的全局光照算法,它可以解决光线跟踪等直接照明方法中所不能表现的真实世界中的照明现象问题。虽然渲染的结果表现力强,但是问题之一就是算法的耗费较大,由于其原理就是对各个多边形面片进行着色,而且常常需要较多的迭代次数才能达到比较理想的效果,因此算法原理虽然比较简单,但效率就成为一个重要的瓶颈。 2. 辐射度算法原理辐射度算法的原理就是模拟真实世界中的光照原理
本文的面试题如下:为什么使用Spring(优缺点)spring容器创建对象的时机Spring的常用注解解释Spring MVC的常用注解解释Mybatis的常用标签或者注解用过哪些spring bean 的生命周期【~】Spring事务(ACID,隔离级别,事务传播机制)IOC底层实现原理【~】AOP底层实现原理【~】AOP详解Spring MVC 运行流程(好)什么是控制反转(Inversion of Control)与依赖注入(Dependency Injection)Bean
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...
这节课,我们介绍三种保存模型的方法,另外介绍两个很有用的工具,一个是游乐场,一个是tensorboard,这里只是浅浅带过,以后会深入讨论昨天没更新,属实是累了,下一篇卷积神经网络,冲冲冲一、只保留权重和偏执import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import datasets, layers, optimizers # step1 加载训练集和测试集合mnist = tf.kera.
10分钟掌握Linux vi编辑器常见命令的使用,最简单的vi编辑器教程Vim 是 Vi improved 的缩写,是 vi 的改进版。在Linux中,vi 被认为是事实上的标准编辑器,因为:所有版本的 Linux 都带有 vi 编辑器;占用资源少;与 ed、ex 等其他编辑器相比,vi 对用户更加友好。你可以使用 vi 编辑器编辑现有的文件,也可以创建一个新文件,还能以只读模式打开文本文件。进
环境:CentOS7.3 MySQL5.7.17背景:在执行创建表语句时,报错:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ‘ which ...
复现Mask RCNN 时,需要pycocotools,尝试了网上的教程,自己总结终于安好了。。。尝试经历如下:1. 安装gitconda install git2.安装cythonpip install cython3. 下载安装pycocotools,应该是有大神在win下重写了这个库pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI但是,试了之后报
有个正义的同学看不惯很多公司往年恶意毁约,但由于存在信息差,很多同学根本不知道发生过这些事,于是来年还是踊跃的投简历,结果就是毕业之时遭遇毁约、或者试用期裁员,导致自己明明才刚毕业却失去了...