ICMP协议小笔记

ICMP协议说明-笔记

内容是B站胡科大教书匠的ICMP协议讲解

ICMP的作用:

​ ICMP是Internet控制报文协议,主要是传递控制信息的,而且是无连接的协议。当遇到IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令,这个Ping的过程实际上就是ICMP协议工作的过程。还要其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

Ping 命令:

​ Ping命令是排除设备访问故障的一个非常常见的方法。它使用一系列的 Internet 控制消息协议 (ICMP) 回声消息以确定以下内容:
● 远程主机是处于活动还是非活动状态。
● 与主机通信中的往返延迟。
● 数据包丢失。
ping命令第一发送一个响应请求包到地址,然后等待回复。只有在回声请求到达目标,并且目的地能得到ECHO回复在一个预定时间内的情况下,ping 才是成功的。
所以,回声请求主要就是增对ping这个过程的,能让ping过程知道设备是否能接受到包。

ICMP----网际控制报文协议:

为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。 主机或路由器使用ICMP来发送差错报文和询问报文。ICMP不是高层协议,二十网际层(IP层)的协议。ICMP报文被封装在IP数据报中发送。 TTL:生存时间----->发送数据报中会带有TTL,没经过一个服务器,到达接收主机时都会做一个生存时间减一的操作。 意义:这样的用意是为了防止数据报一直在网络中传输。

差错报文

例1:差错报告报文-主机与路由器:

在这里插入图片描述

主机H1中的某个应用进程要给主机H2发送IP数据报,在封装该数据报时将首部的TTL时间设置成了1,因为两台主机不在同一网络中,所以数据报需要经过网关R进行转发,路由器R在接收到该IP数据报之后,将其TTL的值做减一操作,这时TTL(生存时间)为0,这意味着该IP数据报的生存时间结束了,然后路由器R会将该IP数据报进行丢弃,并向发送该IP数据报的源主机发送一个ICMP差错报告。

例2:差错报告报文-主机与主机:

在这里插入图片描述

主机H1向主机H2发送IP数据报,其数据载荷部分封装有UDP用户数据报,UDP首部中的目标端口为33436。当H2主机接收并解封出该IP数据报之后,发现并没有监听该端口的应用进程,所以不知道将该UDP用户数据交付给谁,所以H2只能将该数据报丢弃,并向发送该IP数据报的源主机发送一个ICMP差错报告。

四种常见的ICMP差错报告报文:

  • 终点不可达

    ​ 路由器不知道如何转发某数据报,丢弃改数据报,并向源站发送“终点不可达”报文。

    ​ 主机收到无法交付给应用程序的数据报,将其丢弃,向源站发送“终点不可达”报文。

  • 时间超过

    ​ 路由器丢弃生存时间TTL为0的数据报,并向源站发送“时间超过”报文。

    ​ 当终点在预先规定的时间内不能收到一个数据报的全部分片时,就把已收到的分片都丢弃,并向源站发送“时间超过”报文。

  • 参数问题

    ​ 当路由器或目的主机收到的数据报的首部中有些字段的值不正确时,就丢弃该数据报,并向源站发送“参数问题”报文。

  • 改变路由(重定向)

    ​ 路由器把“改变路由”报文发送给主机,让主机知道下次应将数据报发送给另一个路由器,这样可以通过更好的路由。

询问报文

例1:询问报文-主机询问路由器

在这里插入图片描述

主机H1给路由器R发送一个ICMP询问报文,路由器R收到后会给H1发送一个ICMP应答报文。

例2:询问报文-路由器询问主机

在这里插入图片描述

路由器R给主机H2发送一个ICMP询问报文,主机H2收到后会给路由器R发送一个ICMP应答报文。

例3:询问报文-主机询问主机

在这里插入图片描述

主机H2给主机H1发送一个ICMP询问报文,主机H1收到后会给主机H2发送一个ICMP应答报文。

两种ICMP询问报文:

  • 回送请求和回答

    ​ 用于测试目的站是否可达以及了解其有关状态。

  • 时间戳请求和回答

    ​ 用于时钟同步和时间测量。

ICMP的应用举例

分组网间探测PING(Packet InterNet Groper)

  • 用于来探测主机或路由器间的连通性
  • 应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
  • 使用ICMP回送请求和回答报文

跟踪路由traceroute

  • 用来测试IP数据报从源主机到达目的主机要经过哪些路由器

  • ​ Windows版本

    ​ tracert命令

    ​ 应用层直接使用网际层ICMP协议,而不使用运输层的协议

    ​ 要使用ICMP回送请求和回答报文以及差错报告报文

  • ​ Unix版本

    ​ traceroute命令

    ​ 要使用运输层的UDP协议

    ​ 仅使用ICMP差错报告报文

不应该发送ICMP差错报告的几种情况

  • 对ICMP差错报告报文,不再发送ICMP差错报告报文。

  • 对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文。

  • 对具有多播地址的数据报,都不发送ICMP差错报告报文。
    报告的几种情况

  • 对ICMP差错报告报文,不再发送ICMP差错报告报文。

  • 对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文。

  • 对具有多播地址的数据报,都不发送ICMP差错报告报文。

  • 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报,不发送ICMP差错报告报文。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值