Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1477861
  • 博文数量: 148
  • 博客积分: 2234
  • 博客等级: 大尉
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-17 21:34
个人简介

未来很长。

文章存档

2017年(7)

2016年(4)

2015年(1)

2014年(6)

2013年(31)

2012年(99)

ARP

分类:

2012-09-18 22:14:28

原文地址:ARP 作者:zhe_wang

一,ARP协议(Address Resolution Protocol)
        ARP协议是解决它同一个局域网上主机或路由器IP地址和硬件地址映射问题的
协议。而与之对应的有RARP协议,是逆地址解析协议。
       网络层使用的是IP地址,但在数据链路层上传输数据帧必须使用网卡地址。所以
ARP协议是必须使用的。
       网络层标识一个主机或路由器是使用ip地址,而在数据链路层表示一个主机或
路由器是使用网卡地址,又称物理地址,或硬件地址,或Mac地址。
-----------------------------------------------------------------------------------------------
二,ARP Cache------>ARP 缓存表。
 每个主机或路由器上具有一个ARP Cache缓存一张映射表,可以使用arp -a命令查看
该映射表,linux和windows都是该命令。

缓存表示意图如下:

 
当使用ping命令ping一个主机的时候往往第一个时间要长,而以后的时间都差不多,
这就是因为第一次缓存中没有该主机的ip地址和mac地址映射的表项,需要使用ARP
请求和应答才能把该选项添加到缓存中,这需要话费一些时间,而以后缓存中有了该
选项,就不需要使用ARP请求和应答了。

  1. linux@linux:~$ ping 192.168.1.105
  2. PING 192.168.1.105 (192.168.1.105) 56(84) bytes of data.
  3. 64 bytes from 192.168.1.105: icmp_req=1 ttl=64 time=0.597 ms
  4. 64 bytes from 192.168.1.105: icmp_req=2 ttl=64 time=0.199 ms
  5. 64 bytes from 192.168.1.105: icmp_req=3 ttl=64 time=0.223 ms
  6. 64 bytes from 192.168.1.105: icmp_req=4 ttl=64 time=0.292 ms

第一次发送ICMP报文话费了0.597ms,而以后均只有0.2ms左右。

在arp缓存表中的表项始终在更新中的,每个表项都设置了一个定时器,到一定的时间点后
就将该表项在缓存中删除,这样可以避免因网卡地址失效带来的问题。
------------------------------------------------------------------------------------------
三,ARP请求和应答。
     当缓存中没有某个主机或路由器的表项时就要使用ARP请求和应答。
    ARP请求是在局域网内广播一个ARP request packet.
    ARP应答是单播,dest向src发出一个ARP reply packet.

ARP request/reply packet format:

ARP请求应答报文长度是固定的28字节,其中包括了源和目的主机的IP地址和Mac地址。
前面的14字节是帧的首部。

ARP广播请求分组示意图:

ARP应答示意图:(单播)

-------------------------------------------------------------------------------------------
四,实例分析。
现在使用ping局域网上的一个主机。首先保证ARP Cache中没有该IP选项。
使用的是ping 192.168.1.111,然后使用tcpdump抓取相关的信息,注意
使用-e选项。


  1. 19:11:54.414783 00:24:1d:9c:de:85 (oui Unknown) > Broadcast, ethertype ARP (0x0806),
  2.  length 42: Request who-has zk-G31M-ES2C.local tell linux, length 28
  3.     0x0000: 0001 0800 0604 0001 0024 1d9c de85 c0a8 .........$......
  4.     0x0010: 0165 0000 0000 0000 c0a8 016f .e.........o

  5. 19:11:54.414948 00:24:1d:b2:31:e2 (oui Unknown) > 00:24:1d:9c:de:85 (oui Unknown),
  6. ethertype ARP (0x0806), length 60: Reply zk-G31M-ES2C.local is-at 00:24:1d:b2:31:
  7. e2 (oui Unknown), length 46
  8.     0x0000: 0001 0800 0604 0002 0024 1db2 31e2 c0a8 .........$..1...
  9.     0x0010: 016f 0024 1d9c de85 c0a8 0165 0000 0000 .o.$.......e....
  10.     0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............

可以看出第一条信息是我的主机(Mac地址:00:24:1d:9c:de:85 )广播出了一个
ARP request 分组。分组长度为42,其中ARP的长度28字节。可以依照ARP
Message Format分析如下:

0024 1d9c de85 c0a8 0165 hw_addr:00:24:1d:9c:de:85
ip_addr:192.168.1.101

0000 0000 0000 c0a8 016f hw_addr:empty                  ip_addr:192.168.1.111

由此看出该请求是请求IP地址为192.168.1.111主机的Mac地址。

第二条信息是IP地址为192.168.1.111的主机作出的应答。

解析前面28字节的应答信息如下:

0024 1d9c de85 c0a8 0165 hw_addr:00:24:1d:9c:de:85 ip_addr:192.168.1.101
0024 1db2 31e2 c0a8 016f hw_addr:00:24:1d:b2:31:e2 ip_addr:192.168.1.111

可以看出应答中就包含了IP地址为192.168.1.111的Mac地址。

------------------------------------------------------------------------------------------

     

阅读(1805) | 评论(0) | 转发(0) |
0

上一篇:valgrind

下一篇:虚拟内存、物理内存

给主人留下些什么吧!~~