ARP协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
ARP是一个介于数据链路层和网络层之间的协议。
主机发送信息时,将包含目标IP地址的ARP请求广播到网络上的所有主机,
并接收返回消息,以此确定目标的物理地址;
收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,
下次请求时直接查询ARP缓存以节约资源。
地址解析协议是建立在网络中各个主机互相信任的基础上的,
网络上的主机可以自主发送ARP应答消息,
其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;
由此攻击者就可以向某一主机发送伪ARP应答报文,
使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
ARP协议的作用
ARP协议建立了主机IP地址 和 MAC地址 的映射关系.
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,
却不知道目的主机的硬件地址;
数据包首先是被网卡接收到再去处理上层协议的,
如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址;
ARP协议的工作流程
源主机发出 ARP请求,询问 “IP地址是192.168.0.1的主机的硬件地址是多少”,
并将这个请求广播到本地网段 (以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
目的主机接收到广播的 ARP请求,发现其中的IP地址与本机相符,
则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
每台主机都维护一个ARP缓存表,可以用arp -a命令查看。
缓存表中的表项有过期时间(一般为20分钟),
如果20分钟内没有再次使用某个表项,则该表项失效,
下次还要发ARP请求来获得目的主机的硬件地址。
ARP工作流程举例:
主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,
以下为工作流程:
(1)根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。
然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
(2)如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,
从而将ARP请求帧广播到本地网络上的所有主机。
源主机A的IP地址和MAC地址都包括在ARP请求中。
本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。
如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
(3)主机B确定ARP请求中的IP地址与自己的IP地址匹配,
则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
(4)主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
(5)当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。
本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。
主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。
RARP
逆地址解析协议,即RARP,功能和ARP协议相对,其将局域网中某个主机的物理地址转换为IP地址。
比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。
RARP协议工作流程:
(1)给主机发送一个本地的RARP广播,在此广播包中,
声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
(3)如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
(4)如果不存在,RARP服务器对此不做任何的响应;