相关学习资料
http://baike.baidu.com/view/149421.htm?fromtitle=ARP%E5%8D%8F%E8%AE%AE&fromid=1742212&type=synhttp://blog.csdn.net/dog250/article/details/7251689http://www.cnitblog.com/flutist1225/articles/19996.html
目录
1. ARP协议简介2. ARP协议格式3. ARP运行机制4. 保证ARP工作正常的策略
1. ARP协议简介
OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。其功能是:
1. 主机将ARP请求广播到网络上的所有主机,并接收返回消息,确定目标IP地址的物理地址2. 将IP地址和硬件地址存入本机ARP缓存中3. 下次请求时直接查询ARP缓存
地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记录在本地的ARP缓存中
学习ARP协议,我们必须明白几点:
1. ARP是用于将网络层的IP解析成数据链路层的MAC地址的,ARP协议工作在数据链路层,我们在学习它的协议格式的时候需要有这种层次感2. ARP协议工作在数据链路层,所以它没有端口的概念,即ARP不是像DNS、DHCP那种C/S模式,它就是一个单纯的数据链路层的广播
2. ARP协议格式
ARP这个协议的作用是:当源主机知道目的主机的IP地址而不知道对方的MAC地址的话可以使用ARP这个广播协议来获得对方的MAC地址,获得硬件地址的原因是主机通信是通过MAC地址来实现的。
1. 以太网首部 1.1 以太网目的MAC地址: 六个字节的硬件地址地址。 1) ARP请求解析包 因为客户端这个时候并不知道目标IP的MAC地址,所以"ARP请求解析包"一定是一个数据链路层广播数据包,所以这个字段一定是一个FF:FF:FF:FF:FF:FF(广播MAC地址) 2) ARP解析回应包 硬件地址,包含发送方的MAC地址,当广播发出时,目标主机的网络协议栈接收下这个数据包,发现是一个ARP解析包,并且target ip是自己,就对这个数据包的发送方进行回应。 1.2 以太网源地址: 发出给ARP包的主机地址。格式与目的地址相同 。 1.3 以太帧类型: 用来表明上层协议的类型,在ARP协议中这个字段的值为: 0806 。 1.4 帧检查序列: 用于对数据帧中数据的差错检查的(注意是检测,不是纠错) 2. ARP数据包 2.1 ARP数据包头部 2.1.1 硬件类型: 指明了发送方想知道的硬件接口类型,以太网的值为1 2.1.2 协议类型: 指明了发送方提供的高层协议类型,即哪个协议想要使用ARP解析服务,IP为0800(16进制),一般情况下都是IP协议在使用ARP服务, 故我们通过抓包看到的大都是0800 2.1.3 硬件地址长度: 指的是MAC地址的长度,长度为6 单位是字节 。 2.1.4 协议长度: 如果是IP4则这个值为4,单位是字节 。 2.1.5 操作类型(op): 用来表示这个报文的类型 1) ARP请求为1 2) ARP响应为2 3) RARP请求为3 4) RARP响应为4; 2.2 ARP数据字段 2.2.1 发送方硬件地址: 发送方的MAC地址 2.2.2 发送方IP地址: 发送方的IP地址 2.2.3 目标硬件地址: 1) ARP请求解析包 00:00:00:00:00:00,因为请求方这个时候并不知道目标主机的MAC地址,所以填全0 2) ARP解析回应包 请求方的MAC地址,这个目标主机返回给请求方的解析回应包 2.2.4 目标IP地址: 目的主机的IP地址
3. ARP运行机制
0x1: 请求方发送ARP请求解析数据包
我们可以看到,ARP请求解析的过程是一个广播过程
0x2: 目标回应方返回ARP解析回应包
我们可以看到,ARP回应包的发送是一个定向发送的过程,从而请求方也可以从这个回应包中得到它想要的"请求解析目标"的MAC地址
0x3: 请求方将请求解析的IP对应的MAC地址存入ARP缓存
请求解析方收到ARP回应包之后,不会进行任何判断,就直接将对应的MAC地址存入自己的ARP缓存中(这也是ARP投毒攻击的产生原因)
arp --help-a 查看缓存中的所有项目-s, --set 设置一个新的ARP项目、不带任何参数表示查看静态MAC地址-d, --delete 人工删除一个静态项目-v, --verbose be verbose-n, --numeric don't resolve names-i, --device specify network interface (e.g. eth0)-D, --use-device readfrom given device-A, -p, --protocol specify protocol family-f, --file read new entries from file or from /etc/ethers
当协议栈中需要再次进行IP解析的时候,系统会自动到"ARP缓存表"中查找是否已经存在相应的IP表项,如果已存在则使用之,如果不存在,则执行解析流程,对指定的IP进行ARP解析,同时,ARP缓存表的项目如果在一段时间内没有使用,就会自动过期删除
4. 保证ARP工作正常的策略
ARP机制是一种"无状态"、"无验证"的协议,它很容易受到一种"ARP投毒"攻击,为了保证局域网内ARP机制的正常运行,可以采取以下措施
1. 设置静态的MAC-->IP对应表,不要让本机刷新设定好的转换表,这是一个很有效的方法 1) 网关 将所有的客户端的MAC以及对应IP进行静态绑定,防止攻击者假冒客户端 2) 普通客户端 绑定网关MAC地址,防止攻击者假冒网关2. 停止使用ARP,使用静态ARP缓存表,将ARP做为永久条目保存在对应表中。 3. 管理员定期轮询当前网络、主机健康情况,检查主机上的ARP缓存。
防御ARP攻击的工具
1. ARPonhttp://arpon.sourceforge.net/download.html2. ARP Wathhttp://www.linuxcommand.org/man_pages/arpwatch8.html3. XARPhttp://www.securityfocus.com/tools/6908
Copyright (c) 2014 LittleHann All rights reserved