介绍
内核知道IP也无法将数据传送到目的地址,必须知道MAC地址才能传送,所以需要ARP将IP解析为MAC地址
请求流程
- DNS将主机名解析为IP地址
- 用IP地址建立连接
- 用IP地址发送IP数据包
- 如果目的主机在本地网络,那么IP数据报可以直接发送过去;如果目的主机在远程网络,那么IP数据报先经过路由到达本地网络的下一站路由器,让它转发
- ARP用于将IP地址转换为MAC地址
- 广播ARP请求到该以太网所有主机
- 目的主机ARP层收到广播请求,识别出IP地址与自己相同,则回答ARP应答,包含IP地址与MAC地址
- 收到ARP应答,就可以传送IP数据报
- 将IP数据报发送到目的主机
ARP高速缓存
为了保证ARP高效运行,每个主机都有ARP高速缓存,存放最近IP地址到MAC地址的映射记录,一般生存时间为20min
ARP分组格式
ARP请求和应答采用相同的分组格式(下图数字单位为字节)
- 以太网目的地址全为1代表广播地址
- 帧类型:后面的数据类型,0x0806代表ARP请求或应答
- 硬件类型:硬件地址的类型,值为1代表以太网MAC地址
- 协议类型:硬件地址映射的协议地址类型,值为0x0800代表IP地址
- 硬件地址长度:值为6代表MAC地址长度为6字节
- 协议地址长度:值为4代表IP地址长度为4字节
- op:四个操作类型,值1代表ARP请求,值2代表ARP应答,值3代表RARP请求,值4代表RARP应答
一个ARP请求,会将首部的以太网目的地址填为全1,表示发起一次广播,然后会将请求体中的目的以太网地址填为全0,预留出来让接收端填充
一个ARP相应,会将预留的目的以太网地址填为全0,然后将首部和请求体中的以太网目的地址和以太网源地址进行交换,并且将op改为2,发送回去
- ARP请求是一次广播,ARP响应则是向请求源发起的一次单播
ARP示例
一次连接成功的ARP请求、响应
一次连接超时的ARP请求、响应
没有任何ARP以外的报文,并且超时时间指数退避
ARP代理
一个网络向另一个网络发送ARP请求的时候,中间路由器代理响应ARP请求,就叫ARP代理
常用场景是,很多网关设备支持将内网地址映射为公网地址,达到影藏内部网络的作用,这就利用了ARP代理:本来网关的实际IP为内网IP,但是需要提供公网访问IP,这时就需要开启ARP代理功能,接收目的IP为外网IP的ARP请求,并响应内网IP的MAC地址,以便将外网流量转发到内网
免费ARP
免费ARP就是主机发送ARP广播请求查找自己的IP地址。通常在系统在配置网络的时候执行
两个常用场景:
- 查找网络内是否存在IP冲突的主机。如果发送免费ARP,并且得到响应,说明网络内存在相同IP的主机
- 通知网络其他主机,本机的IP和MAC地址映射有所改变。如果主机更换网卡,MAC地址会改变,IP可能还是维持原状,这时广播一个免费ARP,可以通知其他主机自己的IP和MAC映射改变了,并让他们的ARP高速缓存及时更新
arp命令
-a显示ARP高速缓存所有内容,-d删除其中一项,-s增加一项内容(默认永久),pus和-s可以让系统开启ARP代理