《网络协议》ICMP 协议

ICMP 协议概述

ICMP 经常被认为是 IP 层的一个组成部分,它传递差错报文以及其他需要注意的信息。ICMP 报文通常被 IP 层或更高层协议(TCP 或 UDP)使用。ICMP 报文是在 IP 数据报内部传输的。IP 协议是不可靠协议,不能保证 IP 数据报能够成功的到达目的主机,无法进行差错控制,而 ICMP 协议能够协助 IP 协议完成这些功能。下面是 ICMP 报文的数据结构:

  1. 类型:一个 8 位类型字段,表示 ICMP 数据包类型;
  2. 代码:一个 8 位代码域,表示指定类型中的一个功能,如果一个类型中只有一种功能,代码域置为 0;
  3. 检验和:数据包中 ICMP 部分上的一个 16 位检验和;

ICMP 报文类型

ICMP 报文大致可分为两类:差错报文、查询报文。具体消息类型如下表所示:

ICMP 差错报文

当发送一份差错报文时,报文始终包含 IP 的首部和产生 ICMP 差错报文的 IP 数据报的前 8 位字节。这样,接收 ICMP 差错报文的模块就会把它与某个特定的协议(根据 IP 数据报首部中的协议字段来判断)和用户进程(根据包含在 IP 数据报前 8 个字节中的 TCP 或 UDP 报文首部中的 TCP 或 UDP 端口号来判断)联系起来。

下面各种情况不会导致产生 ICMP 差错报文:

  1. ICMP 报文差错(ICMP查询报文可能会产生ICMP差错报文);
  2. 目的地址是广播地址或多播地址的 IP 数据报;
  3. 作为链路层广播的数据报;
  4. 不是 IP 分片的第一片;
  5. 源地址不是单个主机的数据报,也就是说,源地址不可能是零地址、环回地址、广播地址或多播地址;

以下针对 ICMP 差错报文的类型进行分析:

  1. ICMP 目标不可达消息:IP 路由器无法将 IP 数据报发送给目的地址时,会给发送端主机返回一个目标不可达 ICMP 消息,并在这个消息中显示不可达的具体原因。
  2. ICMP 重定向消息:如果路由器发现发送端主机使用次优的路径发送数据时,那么它会返回一个 ICMP 重定向消息给这个主机,这个消息包含了最合适的路由信息和源数据。这主要下发生在路由器持有更好的路由信息的情况下,路由器会通过这个 ICMP 重定向消息给发送端主机一个更合适的发送路由。
  3. ICMP 超时消息:IP 数据包中有一个字段 TTL(Time to live,生存周期),它的值随着没经过一个路由器就会减 1,直到减到 0 时该 IP 数据包被丢弃。此时,IP 路由器将发送一个 ICMP 超时消息给发送端主机,并通知该包已被丢弃。
  4. 源抑制消息:当 TCP/IP 主机发送数据到另一主机时,如果速度达到路由器或者链路的饱和状态,路由器发出一个 ICMP 源抑制消息。

ICMP 查询报文

----ICMP 回送消息:用于进行通信的主机或路由之间,判断发送数据包是否成功到达对端的消息。可以向对端主机发送回送请求消息,也可以接收对端主机回来的回送应答消息。

----ICMP 地址掩码消息:主要用于主机或路由想要了解子网掩码的情况。可以向那些主机或路由器发送 ICMP 地址掩码请求消息,然后通过接收 ICMP 地址掩码应答消息获取子网掩码信息。

----ICMP 时间戳消息:可以向那些主机或路由器发送 ICMP 时间戳请求消息,然后通过接收 ICMP 时间戳应答消息获取时间信息。

Ping 程序

Ping 程序利用 ICMP 回显请求报文和回显应答报文(而不用经过传输层)来测试目标主机是否可达。它是一个检查系统连接性的基本诊断工具。

ICMP 回显请求和 ICMP 回显应答报文是配合工作的。当源主机向目标主机发送了 ICMP 回显请求数据包后,它期待着目标主机的回答。目标主机在收到一个 ICMP 回显请求数据包后,它会交换源、目的主机的地址,然后将收到的 ICMP 回显请求数据包中的数据部分原封不动地封装在自己的 ICMP 回显应答数据包中,然后发回给发送 ICMP 回显请求的一方。如果校验正确,发送者便认为目标主机的回显服务正常,也即物理连接畅通。

例如:在终端上 Ping 下谷歌的地址,神奇的发现谷歌地址既然不用翻墙都能上了,而且丢包率 0%。

$ ping www.google.com
PING www.google.com (173.194.127.148) 56(84) bytes of data.
64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=1 ttl=48 time=11.0 ms
64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=2 ttl=48 time=10.8 ms
64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=3 ttl=48 time=11.1 ms
64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=4 ttl=48 time=10.8 ms
64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=5 ttl=48 time=11.1 ms
64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=6 ttl=48 time=11.0 ms
64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=7 ttl=48 time=10.5 ms
64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=8 ttl=48 time=9.96 ms
64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=9 ttl=48 time=10.9 ms
^C
--- www.google.com ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8009ms
rtt min/avg/max/mdev = 9.963/10.830/11.123/0.368 ms

Traceroute 程序

Traceroute 程序主要用来侦测源主机到目的主机之间所经过的路由的情况。

Traceroute 使用 ICMP 报文和 IP 首部中的 TTL 字段,它充分利用了 ICMP 超时消息。其原理很简单,开始时发送一个 TTL 字段为 1 的 UDP 数据报,而后每次收到 ICMP 超时萧后,按顺序再发送一个 TTL 字段加 1 的 UDP 数据报,以确定路径中的每个路由器,而每个路由器在丢弃 UDP 数据报时都会返回一个 ICMP 超时报文,而最终到达目的主机后,由于 ICM P选择了一个不可能的值作为 UDP 端口(大于30000)。这样目的主机就会发送一个端口不可达的
ICMP 差错报文。

参考资料:

《TCP/IP 详解》

《图解 TCP/IP》

ICMP协议、Ping、Traceroute

时间: 2024-10-10 10:38:40

《网络协议》ICMP 协议的相关文章

TCP/IP协议---ICMP协议及ping、traceroute

ICMP Internet控制报文协议通常被认为是IP层的组成部分,一般被IP层或更高层(TCP.UDP)使用.ICMP报文是在IP数据报内部被传输的.如图: ICMP报文的格式如下: 报文的前4个字节都一样: 8bit类型,8bit代码,16bit检验和.ICMP报文有不同的报文类型,不同类型由这个8bit的类型和8bit的代码共同决定.一个类型下可能有多个代码.比如: 类型0表示回显应答(ping应答):类型1表示目的不可达,其中代码0表示网络不可达,代码1表示主机不可达,代码2表示协议不可

ccna基础 第三节ARP协议 ICMP协议

创作:http://www.ie-lab.cn/ 原文地址:https://blog.51cto.com/14277585/2377873

计算机网络基础:ARP协议 --- IP协议 --- ICMP + IGMP协议

ARP协议 ARP高速缓存:ARP把保存在高速缓存中的每一个映射地址项目都设置生存时间.凡超过生存时间的项目就从高速缓存中删除掉. ARP是解决同一局域网上的主机或路由器的IP地址和硬件地址的映射问题. IP协议 利用IP协议可以使这些性能各异的网络从用户看起来好像是一个统一的网络. ICMP协议 为了提高IP数据报交付成功的机会,在网际层用了网际控制报文协议ICMP. ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告. ICMP报文格式 ICMP协议的应用 PING PING用来测

【网络协议】ICMP协议、Ping、Traceroute

    ICMP协议 ICMP常常被觉得是IP层的一个组成部分,它是网络层的一个协议.它传递差错报文以及其它须要注意的信息.ICMP报文通常被IP层或更高层(TCP.UDP等)使用,它是在IP数据报内传输的. ICMP报文大致分为两类:查询报文和差错报文. 先来看差错报文.当传送IP数据报错误发生时(比方主机不可达.网络不可达等),ICMP协议将会发送一个ICMP差错报文给源主机,好让主机做出对应的处理,也因此IP层以上的一些协议有可能做到可靠传输. 书中给出了ICMP差错报文中的一些组合(类型

网络的分层协议总结

OSI七层模型OSI 中的层            功能                                                        TCP/IP协议族 应 用层                 文件传输,电子邮件,文件服务,虚拟终 端         TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层                 数据格式化,代码转换,数据加密                                   

#15、#16 网络的基本构成与网络的几协议

什么是网络? 网络: 网络基础知识 网络的概念 网络的功能,特性,组成,结构: 两个网络模型(iOS/OSI,TCP/IP) 网络组件知识: 交换机基础 路由器基础 网络设备的进阶: 网络架构 数据通信 资源共享 网络部分组成:操作系统.数据库.应用协议.应用程序 硬件部分组成:计算机.网络通信设备.交联互联设备 网络模型分层 用户层 7应用层                     降低复杂性 6表示层                     标准版化解 5会话层              

ICMP协议

1. ICMP简介: ICMP全名为(INTERNET CONTROL MESSAGE PROTOCOL)网络控制报文协议,协议号为1,网络层协议. 它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可用等网络本身的消息.这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用. ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息. PING用的是ICMP协议,不是端口. 2. ICMP格式: 如下图

简单了解ICMP协议

ping命令是什么协议? 维基百科: ping是一种电脑网络工具,用来测试数据包能否通过IP协议到达特定主机.ping的运作原理是向目标主机传出一个ICMP [email protected]要求数据包,并等待接受echo回应数据包.程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延). 可以知道,ping属于ICMP协议. ICMP属于哪一层? IP协议还缺少主机和管理查询所需要的机制.主机有时候需要判断某个路由或者是对方主机是否活跃.有时网络管理元也需要来自其他

4.ICMP协议,ping和Traceroute

1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机.给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因.ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成.而前 16bit就组成了ICMP