一. ARP
ARP协议是运行在网络体系中数据链路层的协议,用于在局域网内,当知道要发送目的地主机的IP地址和端口号但是却不知道MAC地址的时候,就需要用到ARP也被称为地址解析协议;因为数据链路层传输的数据格式是帧,接收方接收的时候是先经过物理层和数据链路层才到达网络层的,因此,在数据传输的时候是需要知道主机的MAC地址也就是其硬件地址的来发送和接收数据的;如果接收到的数据包的MAC地址与本机不符,则直接丢弃;若相符,则在解析之后误差错就交付给上一层处理。
-------------------------------------------------------------------------------------------
二. ARP工作流程
当需要知道目的主机的MAC地址时,在发送数据帧之前需要先发送一个ARP请求数据报,而这个数据报是发送给局域网内所有主机的,也就是以广播的形式来告知局域网内的主机们要找的是IP地址为XXX的主机的MAC地址;
当主机们收到这个ARP数据报时,如果请求中的目的IP地址与自身的IP不相符,则直接丢弃不处理;当IP地址就是源主机要找的主机时,就对ARP请求进行处理,之后再给发送ARP请求的源主机一个ARP应答数据报,并将自身的MAC地址填充其中;
而最后源主机收到ARP应答数据报之后,再进行处理获得MAC地址,就可以直接将要发送的数据给发送过去了;
-------------------------------------------------------------------------------------------
三. ARP数据报格式
不管是发送ARP请求的数据报还是ARP应答数据报,其格式如下:
以太网目的地址是目的主机的MAC地址,共6个字节,当ARP作为请求发送时并不知道,因此是全F;当ARP作为应答回应时,以太网目的地址是请求的源主机MAC地址;
以太网源地址就是发送ARP主机的MAC地址,也是6个字节,作为请求是源主机MAC地址,作为应答是目的主机MAC地址;
帧类型就是ARP,2个字节来存放;
硬件类型是处理当前网络的链路层网络类型,当前为以太网就是1,占用2个字节;
协议类型是指要转换的地址类型,当前要转换的是IP地址,仍然占用2个字节;
硬件地址长度也就是MAC地址的长度,为6个字节,因此“6”这个数字就用一个字节就能存放了;
协议地址长度是指当前的IP地址长度,也是用一个字节就能存放了,IPv4为4个字节,IPv6为16个字节;
op为1的话表示请求,2表示应答;
发送端以太网地址就是发送ARP数据报的以太网网地址,也就是前面的以太网源地址,同样为6个字节的空间;
发送端IP地址就是发送ARP数据报的主机IP地址,4个字节;
目的以太网地址当为请求时是全F,应答时就为源主机MAC地址,6字节;
目的IP地址当请求时为目的主机的IP地址,当为应答时就为源主机IP地址,4个字节;
前面三个部分14个字节是以太网的头部信息,而后面的28个字节就是ARP数据报的请求/应答的有效载荷信息;
-------------------------------------------------------------------------------------------
栗子时间:
下面举个具体的栗子来分析上面ARP数据报的信息;
因为以太网中数据报中的有效信息最小字节数为46最大为1500,因此,ARP数据报中不够46位需要填充,而填充位内容没有定义,与具体实现相关;
上面的数据报为ARP请求数据报,也就是源主机请求目的主机的MAC地址,从上面可以看出,源主机的IP地址为 c0 a8 00 37 也就是192.168.0.55,而目的主机的IP地址是 c0 a8 00 02 也就是192.168.0.2;
下面为对上面ARP请求的一个应答ARP:
在ARP请求数据报中,发送端IP为192.168.0.55,接收端也就是目的IP为192.168.0.2;
在ARP应答数据报中,发送端IP为192.168.0.2,接收端为192.168.0.55;
从上面对ARP请求数据报和ARP应答数据报的分析中可以看出,两个主机都作为目的主机和源主机,当一个源主机要给目的主机发送数据但不知道其MAC地址时,就可以使用ARP请求数据报在局域网内请求目的主句的MAC地址,而当目的主机在收到ARP请求数据报发现其请求的IP地址和自身相符的时候,就会做出ARP应答并将自己的MAC地址填充其中,这样源主机接收ARP应答数据报之后提取目的主机的MAC地址就能够实现发送数据了。
《完》
本文出自 “敲完代码好睡觉zzz” 博客,请务必保留此出处http://2627lounuo.blog.51cto.com/10696599/1773034