TCP/IP协议之ARP协议

一、概述
1、功能
ARP提供IP地址与MAC地址之间的映射。

以太网采用MAC地址来识别局域网内的每个网卡(主机)。但是,在网络层中需要的是一个网络地址(IP地址)来实现网络互连。IP地址有32位组成,MAC由48位组成,那么数据链路层地址(MAC)与IP地址之间是通过ARP协议(地址解析协议)实现的。地址解析(ARP)协议的作用是实现MAC地址与IP地址之间的转换,ARP的过程实际上就是MAC地址和IP地址交叉引用的过程,这些交叉引用存储在ARP缓存表中,这是TCP/IP栈中的一种数据结构。网络中的每个工作站都有其ARP缓存表

2、简述
当一台主机沿独立的数据链路向目的主机传送数据包时,需要把数据包封装在帧中,并且根据48bit的MAC地址来确定目的主机接口,设备驱动程序从不检查IP数据报中的目的IP地址。数据链路需要一种方法来发现邻居设备的MAC地址,以便将数据帧传送到正确的目的地。
地址解析为IP地址和MAC(数据链路层)地址之间提供了映射。ARP为IP地址到对应的硬件MAC地址提供动态映射。这个过程是自动完成的,对用户及系统管理员是透明的。当一台设备需要发现另一台设备的数据链路标识时,它将建立一个ARP请求数据包。这个请求数据包中包括目标设备的IP地址及发送者的IP地址和MAC地址。ARP请求数据包被封装在数据帧中,其中帧头部带有源MAC地址和目标广播地址。 
二、ARP协议格式
ARP高速缓存
每个主机上都有一个ARP高速缓存表。这个表存放了最近IP地址到硬件地址之间的映射记录。在ARP高速缓存中的表项一般都要设置超时值(一般对完整的表项设置超时值为20分钟,而对不完整的表项设置超时值为3分钟。当这些表项再次使用时,这些实现一般都把超时值重新设为20分钟)。
1、 ARP的分组格式
 
以太网目的地址:在ARP request中为广播地址(ff.ff.ff.ff.ff.ff),在ARP relay中为发送ARP request的主机的MAC地址。
以太网源地址:发送ARP request的主机MAC地址。在ARP relay中作为以太网目的地址。
帧类型:2个字节。表示后面数据的类型。ARP帧的值为0x0806 IP是0x0800。
#############以下为ARP格式#############
硬件类型:指定了网络的类型。1为以太网,3为X.25,6为IEEE802。
协议类型:指定发送者映射到数据链路标识符的网络层协议类型。IP为0x0800,ARP为0x0806,RARP为0x8035。
硬件地址长度:指定了数据链路标识符的长度。单位是octet。MAC长度为6。
协议地址长度:指定了网络地址长度。单位是octet。IPv4地址长度是4。
OP:操作字段。指明一个数据包是ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4),反转ARP请求(8),反转ARP应答(9)。
发送端以太网地址:发送ARP request的源主机MAC地址。在ARP Relay中是目的以太网地址的值。
发送端协议地址:发送ARP request的源主机网络层地址。这里指IP地址。
目的以太网地址:在ARP request中为全0。
目的协议地址:接收ARP request的目的主机网络层地址。这里指IP地址。

struct etharp_hdr {

PACK_STRUCT_FIELD(struct eth_hdr ethhdr); // 14字节的以太网首部

PACK_STRUCT_FIELD(u16_t hwtype); // 2字节硬件类型

PACK_STRUCT_FIELD(u16_t proto); // 2 字节协议类型

PACK_STRUCT_FIELD(u16_t_h wlen_protolen); //硬件地址长度,协议长度

PACK_STRUCT_FIELD(u16_t opcode); // 2字节操作op

PACK_STRUCT_FIELD(struct eth_addr shwaddr); // 6字节发送端MAC地址

PACK_STRUCT_FIELD(struct ip_addr2 sipaddr); // 4字节发送端IP地址

PACK_STRUCT_FIELD(struct eth_addr dhwaddr); // 6字节接收端MAC地址

PACK_STRUCT_FIELD(struct ip_addr2 dipaddr); // 4字节接收端IP地址

}PACK_STRUCT_STRUCT;



当系统收到ARP请求或发送ARP应答时,都要把请求端的硬件地址和IP地址存入ARP高速缓存。


2、ARP请求分组或应答分组

以太网首部总共有14字节数据,ARP请求报文总共有28字节。所以一个ARP请求分组或应答分组总共有46字节数据。

而以太网数据包的最小数据为60字节。所以,要对其进行填充。这里有一些重复信息

(1)在以太网的数据帧报头中和ARP请求数据帧中都有发送端的MAC物理地址。

(2)在发送ARP请求时,以太网帧头中的目的MAC物理地址为FF-FF-FF-FF-FF-FF,而在ARP帧中的目的MAC处此时为空。

(3)对一个ARP请求来说,除ARP中目的端MAC硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本地的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后发送出去。

三、工作原理

1、ARP应用实例
⑴ 应用程序FTP调用DNS将主机名转换成32bit的IP地址。
⑵ FTP客户端请求TCP用得到的IP地址建立连接
⑶ TCP向远端主机发送连接请求,即用上述IP地址发送一份IP数据报。
⑷ 若目的主机在本地网络上,IP数据报将直接送达目的主机。如果目的主机在远程网络上,将通过IP选路来确定下一跳地址并进行转发。
⑸ 若目的主机所在网络类型是以太网,源主机通过ARP将目的IP地址转换成目的MAC地址。
⑹ ARP发送一份ARP请求数据包广播给以太网上的所有主机。
⑺ 目的主机收到ARP请求广播后,回复ARP应答。这个ARP应答包含IP地址及对应的MAC地址。
⑻ 得知目的主机的MAC地址后,即可以传送数据到目的主机了。
点对点链路不使用ARP。当设置这些链路时,必须告知链路每一端的IP地址。像以太网地址这样的硬件地址并不涉及。
 
2、工作原理

(1)同一局域网内的两个主机间通讯

1)当主机A向本局域网上的某个主机B发送IP数据报时,就先在自己的ARP缓冲表中查看有无主机B的IP地址。

2)如果有,就可以查出其对应的硬件MAC地址,再将此硬件MAC地址写入MAC帧,然后通过以太网将数据包发送到目的主机中。

3)如果查不到主机B的IP地址对应的MAC表项。可能是主机B才入网,也可能是主机A刚刚加电。其高速缓冲表还是空的。在这种情况下,主机A就自动运行ARP。

    A.ARP进程在本局域网上广播一个ARP请求分组。ARP请求分组的主要内容是表明:我的IP地址是192.168.0.2,我的硬件MAC地址是00-00-C0-15-AD-18.我想知道IP地址为192.168.0.4的主机的硬件MAC地址。

    B.在本局域网上的所有主机上运行的ARP都收到此ARP请求分组。

    C.主机B在ARP请求分组中见到自己的IP地址,就向主机A发送ARP响应分组,并写入自己的硬件MAC地址。其余的所有主机都不理睬这个ARP请求分组。ARP响应分组的主要内容是表明:“我的IP地址是192.168.0.4,我的硬件地址是08-00-2B-00-EE-AA”,请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。

    D.主机A收到主机B的ARP响应分组后,就在其ARP高速缓冲表中写入主机B的IP地址到硬件MAC地址的映射。

######################################################################

事例说明:用ping说明ARP工作的原理

假设我们的计算机IP地址是192.168.1.1,要执行这个命令:ping192.168.1.2。该命令会通过ICMP协议发送ICMP(以太网控制报文协议)数据包,该过程需要经过下面的步骤:  

1) 应用程序构造数据包,该示例是产生ICMP包,被提交给内核(网络驱动程序);  

2)内核检查是否能够转化该IP地址为MAC地址,也就是在本地的ARP缓存中查看IP-MAC对应表;

3)如果存在该IP-MAC对应关系,那么跳到步骤7 );如果不存在该IP-MAC对应关系,那么接续下面的步骤;

内核进行ARP广播,目的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令类型为REQUEST(1),其中包含有自己的MAC地址;  

当192.168.1.2主机接收到该ARP请求后,就发送一个ARP的REPLY(2)命令,其中包含自己的MAC地址;   

本地获得192.168.1.2主机的IP-MAC地址对应关系,并保存到ARP缓存中;   

内核将把IP转化为MAC地址,然后封装在以太网头结构中,再把数据发送出去; 

######################################################################

(2)不同局域网内的两个主机间通讯

两个局域网之间的通讯需要用到IP协议,默认网关用于将本地网络主机与其它网络连接。
1)源主机与目的主机之间所发送数据包的IP头中包含源主机与目的主机的IP地址

2)TCP/IP协议栈的IP层计算源主机的网络地址,及IP地址与子网掩码相与,得到一个网络地址,即主机的网络地址;

3)确定目标地址是否在本网络中,即将网络接口的子网掩码与目的IP地址相与,同样得到一个网络地址;

4)比较上述2个地址是否相同。如果相同,则使用MAC地址通过局域网发送数据包给目的主机;如果不同,表明目的主机和源主机不在同一个网络内,源主机需要找到一个可以转发信息的设备,该设备即为默认网关,或为连接在局域网中的路由器。
默认网关可以使一个路由器,他通过一个接口与网络相连。主机发送信息给默认网关。因为默认网关同样是本网络内的一个主机,在发送信息前,源主机需要在以太网下使用ARP协议,得到默认网关的物理地址(路由器的MAC)。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值