ARP请求过程(可用于ip冲突检测)
2015-07-02 10:31
363 查看
ARP请求过程
(2013-06-06 09:58:29)
转载▼
分类:技术文章 |
先来回忆一下IP包到MAC帧封装的过程,在ARP协议浅析(二)中,已经提出过结论,MAC帧封装是根据路由下一跳的IP地址,进行本地ARP查表,然后封装MAC帧的。如果ARP表项中没有对应的ARP表项,这时数据包的发送设备会发送ARP请求(广播).
广播这里提一下:之前讲到过二层的通信过程,收到MAC帧后会把MAC帧头的目的MAC与本机比较,相同则留下校队后交付上层,不同则丢弃;问题就来了,ARP是三层协议,发送ARP请求就是希望得到目的IP的MAC地址,所以这个目的MAC地址怎么填写呢?答:TCP/IP规定,目的IP为FF-FF-FF-FF-FF-FF为广播地址,所有设备接收到以该地址为目的地址的MAC帧,都需要接收处理后交付上层;
ARP请求的格式是这样的:
简单介绍:
硬件类型指的是网络的类型,这里的讲解都是以以太网为例的,此标志位1
协议类型:如IPV4时此字段为0080;
硬件长度:8位字段,单位:字节,以太网为6,即6字节,6*8=48bit
协议长度:例如IPV4时,此处定义为4
操作:这个地方需要注意,ARP请求和ARP应答的区别之一;1:请求;2:应答。
发送发的IP,MAC;
目的放得源IP,MAC;(注意ARP请求时,由于不知道目的MAC地址,此处为全0)
由于ARP请求的目的地址是FF-FF-FF-FF-FF-FF,同一个广播域内的所有设备都会接收到这个请求,二层对于FF-FF-FF-FF-FF-FF为目的的MAC帧的处理方式是接收并交付三层处理。三层接收到二层交付的IP包后会对数据段进行分析比较,这时分两种情况:
数据段的目的IP地址是本机:
1.把ARP请求方得IP与MAC对应关系存入本地ARP表(这一点很重要,安全部分还会讲到);
2.发送ARP响应,格式见ARP响应图;
数据段的目的IP地址不是本机:
丢弃该ARP请求;
ARP请求过程(二)
上节介绍了ARP请求的帧格式,和ARP请求发送接收和应答过程;为了大家更好的理解ARP请求,这里举例来介绍一下:
如图:
PC A IP:192.168.1.A MAC: AA-AA-AA-AA-AA-AA
PC B IP:192.168.1.B MAC: BB-BB-BB-BB-BB-BB
PC C IP:192.168.1.C MAC CC-CC-CC-CC-CC-CC
PC D IP: 192.168.1.D MAC DD-DD-DD-DD-DD-DD
PC A与PC B通信,但是由于 PC A的ARP表中没有 PC B的表项,于是进行ARP请求,根据上一节ARP请求格式应该为:
其中协议字段的0X0806代表ARP协议报文
目的MAC为广播MAC,源MAC为IP A的mac
交换机在接收到此MAC帧后会根据MAC帧的目的地址转发,由于使用全F的广播地址,交换机进行广播域内的广播:PC B PC C PC D三台PC接收到ARP请求报文后,接收报文,交付三层处理,其中PC C PC D丢弃报文,而由于报文中的目的IP与PC BIP相同,PC B将报文中的源IP MAC对应存入ARP表项(已有则覆盖,这步很关键),并发出ARP响应报文格式为:
区别大家自己观察;
结论,ARP请求是以广播形式发出,而ARP响应则是单播形式。
相关文章推荐
- 安装两个jdk后eclipse启动不了的一个情况
- GPU:并行计算利器
- 二叉搜索树(BST)相关知识总结
- JavaScript2谁刚开始学习应该知道4最佳实践文章(翻译)
- 如何卸载eclipse中的ADT
- PS打开文件问题
- wordpress安装
- 多字节和宽字符之间的转换方法
- JNI字段描述符“([Ljava/lang/String;)V”
- 公司参加互联网金融研讨会
- lldb调试IPHONE步骤
- sql游标的使用
- 1017. A除以B (20):做完挺开心的一道=.=
- DEV-aspxgridview_RowValidating行验证
- ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)
- 构建自己的embedded linux系统
- 《Java并发编程实践》笔记7——非阻塞同步算法
- PHP中foreach()用法汇总
- Build Action 设置为 Embedded Resource
- 阅读zepto.js的core中的Core methods