ARP地址解析协议

每块网卡(又叫网络适配器、网络接口卡)都有一个编号,也就是网卡地址,称为MAC(Media Access Control)地址,代表计算机的物理地址

电脑一般有两块网卡,一块有线网卡,一块无线网卡,它们均有自己的MAC地址,所以一般电脑有两个MAC地址。另外,网络中的每一台计算机都分配了一个IP地址,这样,每台计算机都有两个地址:IP地址和MAC地址。

但是IP地址并不能替代MAC地址,这是因为物理地址对应于网卡的接口。当一台主机把以太网帧发送到位于同一局域网上的另一台主机时,是根据48bits的以太网地址来确定目的接口的。设备驱动程序从不检查IP数据报中的目的IP地址。

所以,以太网上的两台主机需要通信时,双方必须知道对方的MAC 地址。每台主机都维护着IP 地址到MAC 地址的转换表,称为ARP 映射表。ARP 映射表中存放着最近用到的一系列与本主机通信的其他主机的IP 地址和MAC 地址的映射。在主机启动时,ARP 映射表为空;当一条动态ARP 映射表项规定时间没有使用时,主机将其从ARP 映射表中删除掉,以便节省内存空间和ARP 映射表的查找时间。

TCP/IP协议栈从上层到下层的封装过程中,第三层封装需要知道目的IP地址,第二层封装需要知道目的MAC地址。

目的IP地址一般由用户手工输入,或者由应用程序填充,或者通过DNS域名解析系统解析得到。而目的MAC地址就需要ARP来解析。

ARP地址解析过程

————————————————————————————————————————————————————

同一网段内

1、上层应用产生数据,这里以FTP协议为例,在FTP协议中定位了目的IP。设源主机为主机A,目的主机为主机B 。

2、封装过程:

  • 应用层:需要FTP的控制信息,包括主机名、密码等
  • 传输层:目的端口号21,源为随机端口号
  • 网络层:目的IP,源IP
  • 数据链路层:源主机查看自己的ARP映射表,如果找到目的IP对应的MAC地址,则源主机主机利用ARP映射表提供的MAC地址,对IP数据报进行帧封装,并将封装好的帧发送给主机B。如果找不到,由于没有目的MAC地址,以太网帧头封装失败

三层到二层的封装失败,由于二层是以太网,ARP的工作机制便会产生ARP Request,ARP数据报中含有源主机的IP地址和MAC地址(源主机直接从自身网卡中获知),以及目的IP。目的MAC地址为FFFF:FFFF:FFFF(代表所有MAC)。

3、ARP Request以广播方式发送,到达本网段中的所有设备上,因为目的为FFFF:FFFF:FFFF,所以所有设备都可以拆掉二层的封装,然后解读ARP数据包中需要解析的目的IP。

4、目的IP不正确的设备直接忽略这个ARP请求包,目的IP正确的设备,首先把源主机的IP地址和MAC地址映射关系存入自己的ARP映射表中,然后构建ARP响应数据包,此时,二层的源MAC为被解析设备的MAC,目的为ARP解析发起者的MAC。这个响应不再以广播形式发送,而是直接发给主机A.

5、主机A收到ARP响应数据包后,提取出主机B的IP地址及其对应的MAC地址,加入到自己的ARP映射表中。

6、之前未完成二层封装的FTP数据,这时重新开始封装二层头部,此时,正确的目的MAC就被封装到了整个数据帧中。只有完成了整个TCP/IP协议栈封装的数据帧,才能正常的从主机上发出去。

不同网段内

假设主机A与主机B不在同一网段中,主机A仍然面临着如何确定二层帧头中的MAC地址的问题。

如果依然依照源主机和目的主机在同一子网中的思路,这个目的MAC地址应该是主机B的MAC地址。顺着这个思路下去,会发生什么情况呢?我们来看一下:

由于主机B位于路由器的另外一侧,因此主机B要想收到主机A发出的以太网帧必须要经过路由器转发,那么路由器是否会转发呢?答案是否定的。路由器在收到某个以太网帧后首先检查其目的MAC,这里假设A发出的以太网帧的目的MAC是主机B的网卡地址,路由器从Ethernet 0接口收到该帧后,查看目的MAC地址,发现它不是自己的MAC地址,从而将其丢弃。由此看来,在不同网段内,目的MAC地址不能是目标主机的物理地址

实际上,不同子网之间的主机通信要经过路由转发。因此,主机A通过计算(IP地址和子网掩码取“与”运算=网络号)发现目标主机与自己不在同一个子网中时就要借助于路由器。主机A需要把数据帧发送到路由器上,然后路由器转发至目标节点。因此,主机A在构建二层帧头时,需要将路由器接口Ethernet 0的MAC地址写入帧头的“目的地址”字段。因此,主机A需要通过ARP询问路由器Ethernet 0接口的MAC地址。

这里仍然是两个操作:ARP请求和ARP应答。不过在ARP请求中,目标IP地址是路由器Ethernet 0接口的IP地址。这个地址实际上就是子网172.16.10.0/24中主机的默认网关。路由器收到ARP请求后回答自己Ethernet 0接口的MAC地址,这样主机A就获得了其默认网关的MAC地址。主机A构建完整的数据帧并将其发送给到路由器。路由器收到主机A的数据后,根据路由表的指示将从另一接口Ethernet 1把数据发送给主机B。同样,在发送前路由器也要封装2层帧头,也需要知道主机B的MAC地址,路由器也是通过ARP协议来获得B的MAC地址的。


综合以上两种情况,主机A的完整操作过程如下:
主机A首先比较目的IP地址与自己的IP地址是否在同一子网中,如果在同一子网,则向本网发送ARP广播,获得目标IP所对应的MAC地址;如果不在同一子网,就通过ARP询问默认网关对应的MAC地址。


参考文献:
http://blog.youkuaiyun.com/coostone123/article/details/3014230
http://www.2cto.com/net/201310/253096.html
http://blog.youkuaiyun.com/luobin1984/article/details/12153099


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值