ICMP是Internet控制报文协议的简称,它经常被认为是IP层的一个组成部分。其实它介于网络层跟传输层之间,作为IP数据报的数据部分传输。它主要的功能是传递差错报文及其它需要注意的信息。她很能干,就像一个贤内助,默默的做了很多背后的工作。

1.ICMP报文的类型

ICMP报文含有8位类型、8位代码、16位检验和(检验和跟IP差不多,不过它覆盖整个报文)及其他部分(不同的类型和代码有不同的内容),其基本格式如下图所示:

    ICMP报文的格式有8位类型和8位代码共同决定,除此之外,ICMP报文又分为两类,一是查询报文,一是差错报文。之所以要对他们进行区分,是因为我们需要对差错报文进行特殊处理。由于ICMP是作为IP数据报的数据部分面向主机传输的,所以当发送差错报文时,总得包含发生差错IP数据报的头部和头部后面的8个字节。前者是为了得到传输层所用协议是什么才可以正确的解释后8个字节,后者是为了得到端口号确定用户进程。
以下这些情况产生差错将不会发送差错报文:
  1. 该报文是ICMP差错报文
  2. 目的地址是广播地址或多播地址
  3. 作为链路层广播的数据报
  4. 不是IP分片的第一片
  5. 源地址不是单个主机的地址

2.常见的ICMP报文协议

2.1ICMP地址掩码请求和应答

ICMP地址掩码请求(17.0)是用于无盘系统在引导过程中获取自己的子网掩码。系统广播它的ICMP请求报文,报文中带有发送端任意选择设定的标识符和序列号,在应答报文中包含它们以便发送端可以把请求和应答进行匹配,同时含有32位地址掩码。请求和应答报文一般都包括标识符和序列号。

2.2ICMP目的不可达差错

目的不可达属于错误信息(3,X),有很多种类型,比如网络不可达、主机不可达、端口不可达等等。错误报文必须包含包含发生差错IP数据报的头部和头部后面的8个字节。

2.3ICMP源站抑制差错

当一个系统接收数据的速度比它处理数据的速度快时,可能产生这个差错(4,0)。“可能”的意思是说即使一个系统已经没有缓存开始丢弃数据时,也不一定非得发送这个差错。

3.Ping程序

Ping程序主要目的是为了测试主机是否可达。该程序发送一份ICMP回显请求报文(0,0)给服务器,并等待返回ICMP应答报文(8,0)。ICMP请求信息并没有端口信息,也就是说ping程序并不是一个应用程序,它直接在内核中运行。回显请求报文中带有标识符和序列号以及一些选项数据,应答报文应该把这些内容回显。标识符一般设成发送进程的ID号,以免一个主机上运行多个ping程序时,可以识别出回显信息。序列号一般是从0开始,每发送一个新的回显请求信息就加1。打印出来可以识别出IP包是否有丢失,失序等情况发生。Ping程序可以在其回显请求报文的选项数据中记录发送时间,等收到对应的回显应答报文的时候用当前时间减去,就是往还时间。在局域网中实验的时候,发现第一个往还时间比其他几个大,这通常是因为目的端的地址不在其ARP缓存中的缘故。
Ping -R选项可以记录路由的功能。它通过把经过的路由IP地址记录在IP首部的选项中,到达目的端后,再把ip清单复制到Icmp回显应答报文当中,这样返回的过程中的ip地址也加入到清单中。

4.Traceroute程序

Tranceroute程序主要的用处是能让我们看到IP数据报从一台主机到另一台主机所经过的路由。Ping RR程序也有类似的功能,但其一方面是因为需要大家都支持才能正常运作,另一方面是只能记录9个路由,在稍大点的网络可能不够用。Traceroute的基本原理是向目的端主机发送一个TTL为1的IP数据报,第一个收到的路由器对TTL减一然后发现不能发送,给源端发送一个ICMP超时报文,发送端根据发送这份ICMP超时报文的IP首部得到第一个IP地址。然后发送一个TTL为2的IP数据报,以此类推。但是主机端即使收到一个TTL为1的IP数据报也不会超时,这时通过发送UDP数据报给目的主机,用一个不可能的值作为端口号。源端通过ICMP数据报是超时还是端口不可达来决定什么时候结束。
关于Tranceroute程序,需要有一些注意的问题。首先并不能保证现在所用的路由就是将来要使用的路由,第二并不能保证ICMP报文的路由与Tranceroute的Udp数据报走一样的路由,三是返回的ICMP报文中的信源IP地址是UDP数据报到达的路由器接口的IP地址。
源站选路的思想是发送者指定发送路由。分为两种,严格的源路由选择和宽松的源路由选择。前者是指发送端指明要经过的确切路由,如果路由器发现下一战指定的路由不在其直接相连的网上,那么它返回一个“源站路由失败”的ICMP报文。后者是发送端指明了一个数据报经过的IP地址清单,但在数据报的清单上指明的任意两个地址之间可以通过其他路由器。

贤内助——ICMP协议相关推荐

  1. 4.3.9 ICMP协议

    4.3.9 ICMP协议

  2. 协议森林06 瑞士军刀 (ICMP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载. 到现在为止,我们讲解了网络层中最重要的IP协议(参考协议森林).IP协议的一个重要补充是是ICMP ...

  3. PING的原理以及ICMP协议

    主要内容: 1.ping的原理以及工作过程 2.ICMP协议 3.ICMP的应用:ping,traceroute 1.ping的原理以及工作过程  ping的原理  ping 程序是用来探测主机到主机 ...

  4. linux c icmp协议 判断主机存活

    详细参考 <linux c ping 分析实现> https://blog.csdn.net/whatday/article/details/104192608 ICMP(Internet ...

  5. TCP/IP详解--学习笔记(4)-ICMP协议,ping和Traceroute

    1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送 ...

  6. 【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )

    文章目录 一.ICMP 协议 二.ICMP 协议 简介 三.ICMP 五种差错报告报文 四.ICMP 差错报文形成 五.ICMP 差错报文 不发送 情形 六.ICMP 询问报文 七.ICMP 应用 一 ...

  7. 4、以太网基础知识——ICMP协议详解

    返回总目录 上一篇 下一篇 ICMP协议是一个网络层协议.  一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通:但是IP协议并不提供可靠传输.如果丢包了,IP协议并不能通知传输层是 ...

  8. ping程序和tracert(traceroute)背后的故事--ICMP协议

    为路由器生,为交换机死,为了Ping通奋斗一辈子-----tracert.cn 上面是一个网络工程师的个人定位,很有意思,哈哈!那么我们来看看ping和tracert都是什么吧 PING (Packe ...

  9. ping 原理与ICMP协议---转

    http://blog.csdn.net/inject2006/article/details/2139149 ping 的原理 ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某 ...

  10. ICMP协议抓包分析-wireshark

    ICMP协议抓包分析-wireshark ICMP- (Internet Control Message Protocol,网际报文协议)是Internet协议族的核心协议之一,也可称为是网际控制报文 ...

最新文章

  1. jenkins 通过批处理自动构建 非标准项目
  2. 清华经管计算机金融专业,非量化背景拿下MIT MFin的清华经管学姐,详解MIT金融项目优劣和职业方向...
  3. (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
  4. 【使用注意】多线程导致解码混乱的情况
  5. 操作系统之内存管理:1、内存管理基础知识(指令工作原理、地址转化、程序运行过程)
  6. Android Multimedia框架总结(二十四)MediaMuxer实现手机屏幕录制成gif图
  7. python答疑的作用_python课程答疑
  8. 实验四 木马的远程控制和清除
  9. java 加载dll文件
  10. C语言入门教程,C语言学习教程
  11. Coverity 配置coverity扫描python静态代码检测
  12. 什么是ICMP协议,它的作用是什么?
  13. 帮你举例说明什么是Python鸭子类型
  14. python调用函数实现银行ATM典型案例练习
  15. 写给 35 岁的自己!
  16. uart 之 可变参数
  17. bugku 网站被黑(御剑突破+bp抓包爆破)
  18. 腾讯云数据库 TDSQL-之初体验
  19. shp矢量数据打包压缩
  20. 向科技要智慧,人脸识别智能门禁解锁智慧社区新未来

热门文章

  1. python求斜率_python – 在曲线上找到斜率变化的位置
  2. IntelliJ IDEA 在使用manven后的纠结(每次修改代码都要重启tomcat才能看效果吗?),请各位大侠来看看问题
  3. 计算与背景反差较大显示明显的前景色
  4. Visio 导出图片时字符间距错乱
  5. 设置swiper中的高度
  6. Partition Refinement
  7. 固态硬盘是什么接口_5分钟教会你怎么区分M.2固态硬盘接口和协议
  8. 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛 C 颜料的混合 (计算几何)
  9. 自建站(独立站)平台推荐
  10. 在北京租房都多交两个月的房租吗?怎么不通过中介找到合意的房子?