探究网际层协议--ARP和ICMP协议

上一篇文章主要讲述了IP协议的报文分析,今天准备写一篇与IP协议配套使用的协议ICM网际控制报文协议,以及ARP地址解析协议。先放一张图
探究网际层协议--ARP和ICMP协议_第1张图片
这张图是各层之间的各种协议,其中网络层除了IP还有三大常用的协议,RARP作为逆地址解析协议,适合ARP配套使用的,但是现在已经被淘汰了,IGMP以后有时间再说,今天重点分析一下ICMP和ARP。

APR地址解析协议

地址解析,顾名思义就是对地址的翻译。在说明这个协议之前首要搞清楚IP地址和物理地址的区别。

  • IP地址是网际层以及以上各层使用的地址,他是在主机连接网络使分配的,是一种逻辑地址,虽然它在网络中是独一无二的,但是对于一台主机来说IP地址是不固定的。
  • 物理地址是数据链路层和物理层使用的地址,他是一个48位的固定的地址,每一台主机接口都有一个全世界唯一的物理地址,用于准确定位某台主机。
    发送数据的时候,数据是从高层到底层一层层的进行封装,最后交到数据链路层,封装成MAC帧,而封装MAC帧需要源地址和目的地址,而这两个地址就是物理地址,所以为了解决这一问题,就引出了ARP地址解析协议,用来把IP地址翻译成具体的物理地址,便于发送数据。

ARP原理

每一个主机上面都有一个ARP高速缓存,这里面存着局域网中IP地址对应的物理地址的映射表。当局域网中的一台主机A想要向同一局域网中的主机B发送IP数据报的时候,会先在高速缓存表中查看对应的物理地址,如果查到将其写入MAC帧通过链路层进行发送。
如果表中没有查到B对应的物理地址,那么他会向所在局域网中所有运行着的主机以广播的形式发送ARP分组请求报文,报文中有B的IP地址,A的IP地址以及物理地址。局域网中的主机收到请求后会查看报文中的目的IP是否与自己的一致,如果不一致则不做处理,如果一致,则会以单播的形式发送ARP回应,将自己的物理地址写入报文,主机A收到B的报文之后会把这个对应的物理地址写入缓存中,便于下次使用。
ARP对写在高速缓存中的映射地址设置的有一定的生存时间,目的是为了防止当局域网中的主机损坏,或者更换导致IP地址对应的物理地址发生改变,这样通过原来的对应关系是无法查找到正确的物理地址的。

ARP报文分析

探究网际层协议--ARP和ICMP协议_第2张图片
标号表示图中对应的字段

  1. ARP请求的目的物理地址,全1时,代表广播地址。
  2. 发送ARP请求方的物理地址。
  3. 以太网帧类型表示后面的数据类型,ARP请求和ARP应答此字段为:0x0806。
  4. 硬件地址类型,硬件地址不止以太网一种,是以太网类型时,值为1。
  5. 表示要映射的协议地址的类型,要对IPv4地址进行映射,此值为0x0800。
  6. 硬件地址长度,48位6个字节
  7. 协议地址长度,也就是IP地址长度,32位4个字节
  8. 是操作类型字段,值为1,表示进行ARP请求;值为2,表示进行ARP应答;值为3,表示进行RARP请求;值为4,表示进行RARP应答。
  9. 是发送端ARP请求或应答的硬件地址,这里是以太网地址,和字段2相同。
  10. 是发送ARP请求或应答的IP地址。
  11. 目的端的硬件地址。
  12. 目的端的IP地址。

ICMP网际控制报文协议

说完ARP再说说ICMP,ICMP主要是用来主机或者路由器进行差错报告和异常情况的报告。虽然他和高层协议一样是封装在IP协议数据部分的一种协议,但是它本质上并不是高层协议。
探究网际层协议--ARP和ICMP协议_第3张图片
ICMP的报文比较简单,首部主要有三部分组成,类型代码和检验和。
ICMP的报文种类有两种,差错报告报文询问报文
常用的差错报告报文有四种

  • 终点不可达,当主机或者路由器无法向目的地址传送数据时就向源点发送终点不可达报文
  • 时间超时,当路由器收到TTL为0的报文时,会丢弃该报文,并向源点发送时间超时报文
  • 参数问题,当数据报的首部通过校验和发现不对时向源点发送参数问题报文
  • 改变路由,当路由器发现主机的目的地址可以使用更好的路由路线时,会向主机发送改变路由报文。

常用的询问报文有两种

  • 回送请求和回答,是主机向一个特定的目的主机发出询问,当目的主机收到该询问之后会向源主机发送ICMP回送回答报文。
  • 时间戳请求和回答,主机相关一个特定的目的主机询问日期和时间,目的主机收到后会向源主机发送ICMP时间戳请求回答报文。

其中最常用的就是回送请求报文,对于回送请求报文的实例就是PING和traceroute,下一篇重点来讲述一下traceroute的使用和原理。
本人编程小白一枚,本篇文章是通过书本和大佬的博客总结下来的,如有错误欢迎告知。

你可能感兴趣的:(计算机网络)