ARP地址解析协议深入
2016-10-31 12:32
141 查看
一 ARP地址解析协议
将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)
ARP数据格式
以太网目的地址:是硬件地址,包含六个字节的地址。例如: 00 1f 3cd1 b6 7d
以太网源地址: 是发出给ARP包的主机地址。格式与目的地址相同
以太帧类型: 用来表明上层协议的类型,如果是ARP协议的话就为:0806 。
硬件类型:如果是以太网则硬件类型为:0001 。
协议类型:这里一般写的是:0800 表示IP类型,ARP是IP协议族中的一个。
硬件地址长度:指的是MAC地址的长度,长度为6 单位是字节 。
协议地址产度:如果是IP4则这个值为4,单位是字节 。
Op为操作方式:如果为1则为请求包;如果为2则为回应包。
这里假设源主机为:A ,目的主机为:B 。其请求和回应这个都不变。
如果是请求包的话:
以太网首部的目的MAC地址为:FF:FF:FF:FF:FF:FF表示广播包。
ARP字段中的目的主机MAC地址字段为:00:00:00:00:00:00(十六进制表示) 起到填充的作用。
op操作符字段为:0001
如果是回应包的话:
以太网首部的目的MAC地址为:源主机的MAC地址。
ARP字段中的源主机MAC地址字段为:目的主机的MAC地址。
op操作符字段为:0002。
二 ARP协议工作过程
当一个基于TCP/IP的应用程序需要从一台主机发送数据给另一台主机时,它把信息分割并封装成包,附上目的主机的IP地址。然后,寻找IP地址到实际MAC地址的映射,这需要发送ARP广播消息。当ARP找到了目的主机MAC地址后,就可以形成待发送帧的完整以太网帧头。最后,协议栈将IP包封装到以太网帧中进行传送。
在图中,当主机A要和主机B通信(如主机A Ping主机B)时。主机A会先检查其ARP缓存内是否有主机B的MAC地址。如果没有,主机A会发送一个ARP请求广播包,此包内包含着其欲与之通信的主机的IP地址,也就是主机B的IP地址。
当主机B收到此广播后,会将自己的MAC地址利用ARP协议响应包传给主机A,并更新自己的ARP缓存,也就是同时将主机A的IP地址/MAC地址对保存起来,以供后面使用。主机A在得到主机B的MAC地址后,就可以与主机B通信了。同时,主机A也将主机B的IP地址/MAC地址对保存在自己的ARP协议缓存内。
Ping过程详解
主要的Ping有两种情况,一种是同一网段,一种是跨网段的。拓扑图:
如果主机A要Ping主机B
主机A就要封装二层报文,他会先检查自己的MAC地址,如果没有B的MAC地址,就会向外发送一个ARP广播包,如图:
其中ARP报文格式如下:
OP表示:1:表示ARP请求;2:表示ARP应答;3:表示RARP请求;4:表示RARP应答。
交换机会收到这个报文后,交换机有学习MAC地址的功能,所以他会检索自己有没有保存主机B的MAC地址,如果有的,就直接返回给A主机,如果没有,就会向所有端口发送ARP广播,其他主机收到后,发现不是在找自己,就纷纷丢弃了改报文,不去理会,直到主机B收到了报文后,就立即响应,我的MAC地址是多少,同时学到主机A的MAC地址,并按同样的ARP报文格式返回给主机A。如图:
ARP报文的格式为:
主机A 学到了主机B的MAC地址,就把这个MAC封装到ICMP协议的二层报文中向主机B发送,报文格式如下:
当主机B收到了这个报文后,发现是主机A的ICMP回显请求,就按同样的格式,返回一个值给主机A,这样就完成了同一网段内的Ping过程。
如果主机A要Ping主机C
主机A发现主机C的IP和自己的IP不是同一个网段,他就去找网管转发,但是他也不知道网管的MAC情况下呢?这是就会像前面那个步骤一样,先发送一个ARP广播,学到网关的MAC地址,再发封装包,报文的格式如下:
当路由器收到主机A发过来的ICMP报文,发现自己的母的地址是其本身MAC地址,根据母的地IP地址2.1.1.1,查找路由表,发现2.1.1.1/24的路由表项,得到一个出口指针,去掉原来的MAC头部,加上自己的MAC地址向主机C转发,报文格式如下
4000
最后主机C已学到路由器2端口MAC,路由器2端口转发给路由器1端口,路由器端口学到主机A的MAC地址的情况下,他们就不需要再做ARP解析,就将ICMP的回显请求恢复过来,报文格式如下:
将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)
ARP数据格式
以太网目的地址:是硬件地址,包含六个字节的地址。例如: 00 1f 3cd1 b6 7d
以太网源地址: 是发出给ARP包的主机地址。格式与目的地址相同
以太帧类型: 用来表明上层协议的类型,如果是ARP协议的话就为:0806 。
硬件类型:如果是以太网则硬件类型为:0001 。
协议类型:这里一般写的是:0800 表示IP类型,ARP是IP协议族中的一个。
硬件地址长度:指的是MAC地址的长度,长度为6 单位是字节 。
协议地址产度:如果是IP4则这个值为4,单位是字节 。
Op为操作方式:如果为1则为请求包;如果为2则为回应包。
这里假设源主机为:A ,目的主机为:B 。其请求和回应这个都不变。
如果是请求包的话:
以太网首部的目的MAC地址为:FF:FF:FF:FF:FF:FF表示广播包。
ARP字段中的目的主机MAC地址字段为:00:00:00:00:00:00(十六进制表示) 起到填充的作用。
op操作符字段为:0001
如果是回应包的话:
以太网首部的目的MAC地址为:源主机的MAC地址。
ARP字段中的源主机MAC地址字段为:目的主机的MAC地址。
op操作符字段为:0002。
二 ARP协议工作过程
当一个基于TCP/IP的应用程序需要从一台主机发送数据给另一台主机时,它把信息分割并封装成包,附上目的主机的IP地址。然后,寻找IP地址到实际MAC地址的映射,这需要发送ARP广播消息。当ARP找到了目的主机MAC地址后,就可以形成待发送帧的完整以太网帧头。最后,协议栈将IP包封装到以太网帧中进行传送。
在图中,当主机A要和主机B通信(如主机A Ping主机B)时。主机A会先检查其ARP缓存内是否有主机B的MAC地址。如果没有,主机A会发送一个ARP请求广播包,此包内包含着其欲与之通信的主机的IP地址,也就是主机B的IP地址。
当主机B收到此广播后,会将自己的MAC地址利用ARP协议响应包传给主机A,并更新自己的ARP缓存,也就是同时将主机A的IP地址/MAC地址对保存起来,以供后面使用。主机A在得到主机B的MAC地址后,就可以与主机B通信了。同时,主机A也将主机B的IP地址/MAC地址对保存在自己的ARP协议缓存内。
Ping过程详解
主要的Ping有两种情况,一种是同一网段,一种是跨网段的。拓扑图:
如果主机A要Ping主机B
主机A就要封装二层报文,他会先检查自己的MAC地址,如果没有B的MAC地址,就会向外发送一个ARP广播包,如图:
其中ARP报文格式如下:
OP表示:1:表示ARP请求;2:表示ARP应答;3:表示RARP请求;4:表示RARP应答。
交换机会收到这个报文后,交换机有学习MAC地址的功能,所以他会检索自己有没有保存主机B的MAC地址,如果有的,就直接返回给A主机,如果没有,就会向所有端口发送ARP广播,其他主机收到后,发现不是在找自己,就纷纷丢弃了改报文,不去理会,直到主机B收到了报文后,就立即响应,我的MAC地址是多少,同时学到主机A的MAC地址,并按同样的ARP报文格式返回给主机A。如图:
ARP报文的格式为:
主机A 学到了主机B的MAC地址,就把这个MAC封装到ICMP协议的二层报文中向主机B发送,报文格式如下:
当主机B收到了这个报文后,发现是主机A的ICMP回显请求,就按同样的格式,返回一个值给主机A,这样就完成了同一网段内的Ping过程。
如果主机A要Ping主机C
主机A发现主机C的IP和自己的IP不是同一个网段,他就去找网管转发,但是他也不知道网管的MAC情况下呢?这是就会像前面那个步骤一样,先发送一个ARP广播,学到网关的MAC地址,再发封装包,报文的格式如下:
当路由器收到主机A发过来的ICMP报文,发现自己的母的地址是其本身MAC地址,根据母的地IP地址2.1.1.1,查找路由表,发现2.1.1.1/24的路由表项,得到一个出口指针,去掉原来的MAC头部,加上自己的MAC地址向主机C转发,报文格式如下
4000
最后主机C已学到路由器2端口MAC,路由器2端口转发给路由器1端口,路由器端口学到主机A的MAC地址的情况下,他们就不需要再做ARP解析,就将ICMP的回显请求恢复过来,报文格式如下:
相关文章推荐
- Oracle 9i & 10g编程艺术-深入数据库体系结构——第6章:锁
- 深入掌握JMS(二):一个JMS例子
- 深入探讨 Java 类加载器
- Spring MVC 教程,快速入门,深入分析
- java socket 深入学习tomcat 自写动态服务器 tomcat
- NOJ1858 对于最长上升子序列O(nlogn)算法的深入理解
- 深入理解 php redis pconnect
- 深入理解Java之数据类型
- 深入理解Android中的SharedPreferences
- 【Java 线程的深入研究1】Java 提供了三种创建线程的方法
- 深入理解linux内核(第三版)-读书笔记
- Java 深入学习(29) —— 泛型基础
- 理解 Delphi 的类(十) - 深入方法[8] - 如果忘了返回值
- 深入理解JavaScript的变量作用域
- Spring技术内幕——深入解析Spring架构与设计原理(二)AOP
- Session服务器配置指南与使用经验的深入解析
- cocos2d-x 纹理深入研究 第二部分
- 黑马程序员——Java基础---深入理解面向对象(封装继承和多态)
- 深入理解计算机操作系统——第8章:异常
- 深入理解 c#堆栈和托管堆