协议——ARP/RARP
上期是IP协议,本期接着ARP/RARP。
1.ARP
Address Resolution Protocol,地址解析协议,ARP为IP地址到对应的硬件地址提供相应的动态映射关系。
1.1 报文格式
以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的特殊地址是广播地址。电缆上的所有以太网接
口都要接收广播的数据帧。
两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。
形容词hardware (硬件)和protocol (协议)用来描述ARP分组中的各个字段。例如,一个A R P请求分组询问协议地址(这里是I
P地址)对应的硬件地址(这里是以太网地址)。
硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0 x
0 8 0 0即表示I P地址。它的值与包含I P数据报的以太网数据帧中的类型字段的值相同
接下来的两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太
网上I P地址的A R P请求或应答来说,它们的值分别为6和4。
操作字段指出四种操作类型,它们是A R P请求(值为1)、A R P应答(值为2)、R A R P请求(值为3)和R A R P应答(值
为4)。这个字段必需的,因为A R P请求和A R P应答的帧类型字段值是相同的。
接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(I P地址)、目的端的硬件地址和目的端的协议地址。注意,这里有一些重复信息:在以太网的数据帧报头中和A R P请求数据帧中都有发送端的硬件地址。
对于一个A R P请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。
1.2 交互
主机A,B,C,位于同一网络上,如果主机A想与主机B进行通信,在TCP/IP协议下,主机A已经知道目的主机B的IP地址,但是在以太网上进行数据交换是以硬件地址(MAC)寻址的,所以主机A还需要知道主机B的硬件地址,也就是MAC地址。
在主机A不知道主机B的硬件地址(MAC) 的时候,首先A会检查自己的高速缓存表,看是否存在目的IP与MAC的对应表项:
如果存在目的IP与MAC的对应关系,则直接封装数据包传输;如果不存在,A需要发送一个ARP请求(地址解析请求)来获得主机B的MAC地址。
Step 1 主机A发送一个广播的ARP请求报文给它所在网络上的每一台主机,这个请求包含主机A的IP,MAC,主机B的IP。
Step 2 当主机B收到这份广播报文后,首先看自己的高速缓存表中,是否存在A的IP与MAC的对应表项,如果不存在,添加其表项;如果存在,再看是否对应表项相一致,若不一致,替换更新其原表项。
同时B识别出这是发送端在询问他的IP地址,于是发送一个ARP应答,这个应答包含自己的IP地址和对应的MAC地址。
Step 3 当主机C收到这份报文时,识别出这不是在询问自己的IP地址,它就将报文丢弃。
Step 4 主机A收到应答时,它就得到了B的硬件地址,数据交换就可以进行了。
1.3 ARP Proxy
如果A和B位于不同网络呢?
即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的某个端口的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。以路由器网关的MAC地址作为目的MAC返回给源。
1.4 免费ARP(gratuitous ARP)
两个应用场景:
1) 检查是否有相同的IP地址
如果有相同的IP地址,会在终端日志上产生一个错误消息“以太网地址:a:b:c:d:e:f发送来重复的IP地址”。提醒管理员修改设置。
2)更新ARP高速缓存表
如果发送ARP请求的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),收到这个ARP请求后,其他主机可以更新它们的高速缓存表(前提:发送主机的MAC地址已经在接收主机的高速缓存表里):接收主机用ARP请求中的发送端硬件地址对高速缓存中相应的内容进行更新。
2 RARP
对应于ARP,RARP请求以广播方式传送,而RARP应答一般是单播(unicast)传送的。
反向地址转换协议用于一种特殊情况,如果站点被初始化后,只有自己的物理网络地址而没有IP地址,则他可以通过RARP协议,并发出广播请求,向RARP服务器征求自己的IP地址。这样无IP的站点可以通过RARP协议取得自己的IP地址,这个地址在下一次系统重新开始以前都有效,不用连续广播请求。RARP广泛用于获取无盘工作站的IP地址。
2.1 工作原理
1. 发送主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
2. 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
3. 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
4. 如果不存在,RARP服务器对此不做任何的响应;
5. 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。
6.如果在第1-3中被ARP病毒攻击,则服务器做出的反应就会被占用,源主机同样得不到RARP服务器的响应信息,此时并不是服务器没有响应而是服务器返回的源主机的IP被占用。
2.2 ARP和RARP报头结构
ARP和RARP使用相同的报头结构,如图所示。
硬件类型字段:指明了发送方想知道的硬件接口类型,以太网的值为1;
协议类型字段:指明了发送方提供的高层协议类型,IP为0800(16进制);
硬件地址长度和协议长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;
操作字段:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;
发送方的硬件地址(0-2字节):源主机硬件地址的前3个字节;
发送方的硬件地址(3-5字节):源主机硬件地址的后3个字节;
发送方IP(0-1字节):源主机硬件地址的前2个字节
问与答:
1,Hub是哪一层设备?
答:hub是集线器,是物理层设备。没有相匹配的软件系统,是纯硬件设备。主要用来连接计算机等网络终端。
集线器为共享式带宽,连接在集线器上的任何一个设备发送数据时,其他所有设备必须等待,此设备享有全部带宽,通讯完毕,再由其他设备使用带宽。因此,集线器连接了一个冲突域的网络。所有设备相互交替使用,就好象大家一起过一根独木桥一样。
补充:hub跟交换机的区别:
集线器:纯硬件、用于连接网络终端、不能打破冲突域和广播域。
交换机:拥有软件系统、用于连接网络终端、能够打破冲突域,但是不能分割广播域。
2,什么是冲突域?
答:冲突域:一个站点向另一个站点发出信号,除目的站点外,别的站点也能收到这个信号,这些站点就构成一个冲突域。
广播域:网络中能接收任一设备发出的广播帧的所有设备的集合。
冲突域是基于第一层(物理层)而广播域是基于第二层(数据链路层)。
3,以太数据包的长度范围?
答:46-1500字节。
4,ARP请求里为什么要找MAC地址?
答:当一台主机需要把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48比特的以太网地址来确定目的接口的。(48比特的二进制地址即MAC地址,所以需要查找MAC地址。)
5,为什么ARP请求报文是广播?
答:因为ARP只知道目的IP,不知道这个IP对应的MAC,它要问到到底拥有这个IP的设备的MAC是多少。
6,ARP报文结构?标黄的和标绿的分别是谁的地址?
答:如图:
以太头中的目的地址是一个广播MAC地址(全F),源地址是发送主机的MAC地址。
帧类型,对于ARP请求和应答来说,值都是0x0806(2个字节)。
在一个ARP请求里,payload里的发送端以太网地址是发送主机的MAC地址,发送端IP是发送主机的IP,目的以太网不填(有一个填充值),目的IP是目的主机的IP地址。
7,免费ARP的应用场景?
答:两个场景:
1) 检查是否有相同的IP地址
如果有相同的IP地址,会在终端日志上产生一个错误消息“以太网地址:a:b:c:d:e:f发送来重复的IP地址”。提醒管理员修改设置。
2)更新ARP高速缓存表
如果发送ARP请求的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),收到这个ARP请求后,其他主机可以更新它们的高速缓存表(前提:发送主机的MAC地址已经在接收主机的高速缓存表里):接收主机用ARP请求中的发送端硬件地址对高速缓存中相应的内容进行更新。