TCP/IP之ARP,RARP

在之前的一篇文章,TCP/IP链路层协议中说到,在以太网链路传输中,必需是以48比特位的网络接口硬件地址建立连接的,而我们应用程序之间的通信是以32比特位的IP地址建立连接的,这就需要我们把32比特的IP地址映射到48比特的硬件地址(MAC地址)。ARP(address resolution protocol),RARP(reverse address resolution protocol),就是针对这一功能定义的协议规范。

ARP使用示例

假如现在我本机IP是:192.168.1.112,机器名为tony,我现在想telnet远程到192.168.1.100上进行相关远程操作。执行如下命令:

telnet 192.168.1.100

 

我们现在用tcpdump命令拦截下与192.168.1.100之间通信的数据:

1 21:30:53.971987 ARP, Request who-has 192.168.1.100 tell tony.local, length 28
2 21:30:54.050752 ARP, Reply 192.168.1.100 is-at 6c:c2:6b:5c:c5:94 (oui Unknown), length 46
3 21:30:54.050775 IP tony.local.53729 > 192.168.1.100.telnet: Flags [S], seq 248247383, win 14600, options [mss 1460,sackOK,TS val 9897001 ecr 0,nop,wscale 4], length 0
4 21:30:54.055145 IP 192.168.1.100.telnet > tony.local.53729: Flags [R.], seq 0, ack 248247384, win 0, length 0

 

第一行:执行ARP,发起请求(request),询问192.168.1.100和哪个硬件地址相匹配(who-has)。

第二行:ARP返回数据(reply),回复192.168.1.100在(is-at)6c:c2:6b:5c:c5:94上。

后续与192.168.1.100之间链路线上的通信则数据全部以6c:c2:6b:5c:c5:94硬件地址的信息放在数据帧的头部中传输。

ARP分组格式

 

  • 以太网目的地址和以太网源地址分别是指6字节,48bit的硬件地址。当「以太网目的地址」为:FF:FF:FF:FF:FF:FF,即全部为1时,则表示这是个广播地址,所有的以太网接口都要接收这个帧数据。当发送ARP请求数据帧时,因为是要请求查找指定的IP地址所映射的硬件地址,所以会广播所有的网络上的主机,则此时的目的以太网地址就是:FF:FF:FF:FF:FF:FF
  • 帧类型,对于ARP请求/应答来说,值为:0x0806,对于RARP请求/应答,值为:0x8035,对于IP数据报,值为:0x0800
  • 硬件类型表示硬件地址的类型,以太网地址时值为1
  • 协议类型表示要映射的协议地址类型,IP地址协议时值为:0x800,如果你观察仔细,它对应于前面「帧类型」为IP数据报时的值。
  • 硬件地址长度和协议地址长度这里分别是:6,4.因为MAC地址是6字节,IP地址是4字节。
  • op:操作类型,它有四种类型。ARP请求是1,ARP回答是2,RARP请求是3,RARP应答是4。这个字段值是必需的,否则无法判断一个帧数据是请求还是应答类型(以太网首部中帧类型只有ARP/RARP类型,没有细分到到请求/应答)。
  • 接下来的发送端/目的端 以太网地址(硬件地址),发送端/目的端 IP地址,则是ARP/RAPR请求数据的本质内容。

 

---------待续 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2013-02-03 23:34  海鸟  阅读(728)  评论(0编辑  收藏  举报