ICMP协议 详解,ICMP协议的功能及实现原理,ICMP协议报文类型。

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「专栏简介」:此文章已录入专栏《计算机网络零基础快速入门》


ICMP协议是IP的一个组成部分,负责传递 「控制信息」

一、工作原理

ICMP的功能是检错而不是纠错;

它将出错的报文返回给发送方的设备,发送方根据ICMP报文确定「错误类型」,从而更好的重发错误的数据包。

我们用来测试网络连通性的 ping 命令,就是ICMP的工作过程。

二、数据报格式

ICMP是IP协议的一部分,因此,ICMP协议的报文包含在IP数据报的数据部分:
在这里插入图片描述
1)类型(Type):4位,标明ICMP报文的作用及格式。

2)代码(Code):4位,标明报文的类型。

3)校验和:8位,检验报文是否有误。

三、报文类型

ICMP协议主要通过 Type Code 的组合,来标明报文的类型,常见的有三种:

1)请求响应

发送方发送一个 Type =8 的报文,途中没有异常,接收方就会返回一个 Type=0 的报文;

比如下面这一对请求和响应,注意看我圈中的地方:

在这里插入图片描述
2)网络、主机、协议、端口不可达

这几种情况的报文类型都是一样的,接收方返回一个 Type = 3 Code=3 的报文,意思就是端口不可达(访问了一个不存在的端口),比如下面这个响应,重点看我圈中的地方:

在这里插入图片描述
常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)。

完整的ICMP报文类型如下:

TYPECODEDescription
00Echo Reply——回显应答(Ping应答)
30Network Unreachable——网络不可达
31Host Unreachable——主机不可达
32Protocol Unreachable——协议不可达
33Port Unreachable——端口不可达
34Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特
35Source routing failed——源站选路失败
36Destination network unknown——目的网络未知
37Destination host unknown——目的主机未知
38Source host isolated (obsolete)——源主机被隔离(作废不用)
39Destination network administratively prohibited——目的网络被强制禁止
310Destination host administratively prohibited——目的主机被强制禁止
311Network unreachable for TOS——由于服务类型TOS,网络不可达
312Host unreachable for TOS——由于服务类型TOS,主机不可达
313Communication administratively prohibited by filtering——由于过滤,通信被强制禁止
314Host precedence violation——主机越权
315Precedence cutoff in effect——优先中止生效
40Source quench——源端被关闭(基本流控制)
50Redirect for network——对网络重定向
51Redirect for host——对主机重定向
52Redirect for TOS and network——对服务类型和网络重定向
53Redirect for TOS and host——对服务类型和主机重定向
80Echo request——回显请求(Ping请求)
90Router advertisement——路由器通告
100Route solicitation——路由器请求
110TTL equals 0 during transit——传输期间生存时间为0
111TTL equals 0 during reassembly——在数据报组装期间生存时间为0
120IP header bad (catchall error)——坏的IP首部(包括各种差错)
121Required options missing——缺少必需的选项
130Timestamp request (obsolete)——时间戳请求(作废不用)
14Timestamp reply (obsolete)——时间戳应答(作废不用)
150Information request (obsolete)——信息请求(作废不用)
160Information reply (obsolete)——信息应答(作废不用)
170Address mask request——地址掩码请求
180Address mask reply——地址掩码应答
  • 114
    点赞
  • 538
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
在 Linux 内核中,与 ICMP 相关的参数主要有以下几个: 1. icmp_echo_ignore_all:该参数控制是否忽略所有 ICMP 回显请求(ping命令)。如果该参数的值为 1,则内核将忽略所有 ICMP 回显请求;如果该参数的值为 0,则内核将响应所有 ICMP 回显请求。该参数的默认值为 0。 2. icmp_echo_ignore_broadcasts:该参数控制是否忽略广播地址的 ICMP 回显请求。如果该参数的值为 1,则内核将忽略广播地址的 ICMP 回显请求;如果该参数的值为 0,则内核将响应广播地址的 ICMP 回显请求。该参数的默认值为 1。 3. icmp_ignore_bogus_error_responses:该参数控制是否忽略针对不存在连接或已经关闭的连接的 ICMP 差错报文。如果该参数的值为 1,则内核将忽略这些 ICMP 差错报文;如果该参数的值为 0,则内核将向发送 ICMP 差错报文的主机发送一个 ICMP 差错报文。该参数的默认值为 0。 4. icmp_ratelimit:该参数控制 ICMP 差错报文的速率限制。如果内核在一秒钟内接收到太多的 ICMP 差错报文,则会将多余的报文丢弃。该参数的默认值为 1000 次/秒。 5. icmp_ratemask:该参数用来设置对某些 ICMP 差错报文进行速率限制。例如,如果想对 ICMP 目标不可达报文进行限制,则可以将 icmp_ratemask 参数的值设置为 0x00000002。默认情况下,该参数的值为 0xFFFFFFFF,表示对所有的 ICMP 差错报文进行限制。 6. icmp_errors_use_inbound_ifaddr:该参数控制 ICMP 差错报文中使用的源 IP 地址。如果该参数的值为 1,则 ICMP 差错报文中使用的源 IP 地址为接收该报文网络接口的 IP 地址;如果该参数的值为 0,则 ICMP 差错报文中使用的源 IP 地址为发送该报文网络接口的 IP 地址。该参数的默认值为 0。 需要注意的是,这些参数的修改需要具有 root 权限,可以通过 sysctl 命令进行修改,例如: ``` sysctl -w net.ipv4.icmp_echo_ignore_all=1 ``` 该命令将忽略所有的 ICMP 回显请求。如果需要永久生效,可以将修改写入 /etc/sysctl.conf 文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日wyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值