相关学习资料
http://baike.baidu.com/view/149421.htm?fromtitle=ARP%E5%8D%8F%E8%AE%AE&fromid=1742212&type=syn http://blog.csdn.net/dog250/article/details/7251689 http://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运行机制