ICMP经常被认为是IP层的一个组成部分。它携带于IP数据包中,ICMP封装在IP数据包内部:

IP首部 ICMP数据包

下面是一份差错报文的例子:

最右边的+或者-代表该报文是查询报文还是错误报文。


ICMP的功能介绍:
ICMP定义了一套差错报文查询报文,用于主机与路由器之间交换不可达目的地址、网络拥塞、重定向到更好的路径、报文生命周期超时等信息。
例如,用ping命令来查询192.168.10.1的主机是否在线,路由器会给用户一个ICMP应答:目标主机不可到达或者从192.168.10.1有回应。
ICMP报文主要有两大类:查询报文和错误报文。
查询报文是指ICMP响应请求、相应回答、路由公告、地址屏蔽请求等。
而绝大部分ICMP信息是错误报文,例如,目的地址不可到达、源地址消亡、生命周期超期等。
 
目标地址是广播地址或多播地址(D类地址)的IP数据包不会产生ICMP错误报文,这是为了防止ICMP错误报文对广播分组的响应而带来的广播风暴。

ICMP不可到达差错报文的原因及分析:
ICMP不可到达的报文类型值为3,可以依据不同的代码值识别到底是因为什么不可达。下面根据代码值举几个例子:
(1)网络不可到达(不细说)
(2)主机不可到达(不细说)
(3)禁止分割:
   在MTU较小的网络上,需要把大数据包划分成更小的数据包片(分片),以保证数据包正常通过网络。
   假如路由器A在将客户端的数据发往服务器时,需要分割客户机的数据包,但是数据包的IP头中的IP头中即设置了拒绝分片位,那么路由器将会向客户机返回一个代码为4的“禁止分割”的ICMP信息。
 
以上3种信息都是有路由器发送的。
 
(4)协议不可到达
   如果数据包成功地到达了Web服务器,但是服务器上没有运行TCP或者UDP协议(基本上不可能有有种情况),那么Web服务器将返回一个代码为2的“协议不可到达”的ICMP消息。
 
(5)端口不可到达
   如果数据包成功地到达了Web服务器,服务器上也运行有TCP协议,但是服务器上的相关软件还没有运行,无法处理客户机的连接,于是 服务器上的TCP/IP将返回一个代码为3的“端口不可到达”的ICMP消息。

以上两种信息是由主机发送的。

代码描述 场合 发送方
目标网络不可到达 路由表中无目标网络 路由器
目标主机不可到达 主机无响应 路由器
禁止分割 需要进行分割但设置了不分割个比特位 路由器
协议不可到达 主机上无相关的传输层协议(TCP、UDP) 主机
端口不可到达 目标端口没有被应用程序打开 主机

ICMP超时的原因分析:
超时ICMP报文与IP报头中TTL字段一起使用。下面接单介绍一下“传输期间TTL值为0”的代码。
当数据包到达路由器时,路由器都需要把数据包IP头中的TTL减1.当TTL值被减到0时,数据包就会被丢弃。此时丢弃这个包的路由器会返回一个代码为“传输期间TTL值为0”的ICMP消息给原始发送者。
TTL值可以防止数据包在网络上被循环往复地传输。例如,当发生路由回路时,数据包可能在回路上被一直循环地传输。但是TTL字段的值都会减1,因此当TTL值减为0时,循环就会被自动丢失。

TCP/IP的网际层协议——ICMP的更多相关文章

  1. TCP/IP的网际层协议——ARP

    MAC地址对于每一台设备是全球唯一的,该地址被烧录在网卡的硬件电路上.MAC地址由12位十六进制数表示,其中前6位标识网卡的制造厂商,后6位是网卡的序列号.在以太网中,一个主机要和另一个主机进行通信, ...

  2. 再读TCP/IP网络7层协议

    随着工作的深入,每次读这7层协议,每次都有不同的理解. 分层名                                                               分层号   ...

  3. TCP/IP,HTTP,SOAP等协议之区别

    术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议.“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络.把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到 ...

  4. 计算机网络(二),TCP/IP四层模型常见协议

    目录 1.应用层协议 2.传输层协议 3.网络层协议 4.链路层协议 二.TCP/IP四层模型常见协议 1.应用层协议 (1)POP3 (2)FTP (3)HTTP (4)Telnet (5)SMTP ...

  5. TCP/IP中链路层的附加数据(Trailer数据)和作用

    1.TCP/IP中链路层的附加数据是什么 在用wireshark打开报文时,链路层显示的Trailer数据就是附加数据,如图 2.如何产生 1.例如以太网自动对小于64字节大小的报文进行填充(未实验) ...

  6. 08_使用TCP/IP Monitor监视SOAP协议

    [SOAP定义] SOAP   简单对象访问协议,基于http传输xml数据,soap协议体是xml格式.SOAP   是一种网络通信协议SOAP   即Simple Object Access Pr ...

  7. 使用TCP/IP Monitor监视Soap协议

    什么是soap? soap,简单对象访问协议,基于http传输xml数据,soap协议体是xml格式. SOAP 是一种网络通信协议 SOAP即Simple Object Access Protoco ...

  8. TCP/IP和OSI4层、7层协议介绍

    1.TCP/IP全称:Transmission Control Protocol / Internet Protocol 中文翻译:传输控制协议 / 互联网协议 2.OSI4层.7层模型:

  9. TCP/IP协议和OSI协议

    作为一个与网络密切相关的Web前端工程师,TCP/IP和OSI模型不可不知,至少要知道一下这些常识性知识,在这我做一下记录 TCP/IP协议簇: TCP/IP是一组协议的代名词,包括许多别的协议,组成 ...

随机推荐

  1. viewport移动端的meta

    随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而,每一款手机有不同的分辨率,不同屏幕 ...

  2. Window Server 2012无线网卡和声卡驱动解决方法

    刚开始安装server2012时,驱动一直装不上以为是驱动的问题,后来在网上找了一下才明白是为啥,由于服务器默认不会开启无线LAN功能.和声卡服务,下面简单的方式给大家介绍一下解决方法: 无线网卡解决 ...

  3. iOS 任意类型数据转换字符串

    //转换数据类型: NSError *parseError = nil; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:resp ...

  4. 关于 MyBatis MyBatis-Spring Jdbc 批量插入的各种比较分析

    因为目前SME项目中编写了一套蜘蛛爬虫程序,所以导致插入数据库的数据量剧增.就项目中使用到的3种DB插入方式进行了一个Demo分析: 具体代码如下: 1: MyBatis 开启Batch方式,最普通的 ...

  5. Window及document对象的区别

    一.Window对象 -------------------------------------------------- ------------------- 对象属性 window //窗户自身 ...

  6. 《离散数学之把妹要诀》的js实现

    网上看到一篇有意思的文章<离散数学之把妹要诀> 就用JS写了上面所讲的配对方式: 首先设定变量 // 男生理想列表 var menPreference = { A: [1, 2, 3, 4 ...

  7. jenkins 配置安全邮件

    Jenkins网页设置界面只支持SSL协议 ,对于STARTTLS协议,需要修改jenkins的配置文件去支持基于TLS的SMTP认证 1.修改jenkins配置文件 打开jenkins配置文件/et ...

  8. python模块—socket

    创建套接字: socket.socket(family,type[,protocal]) 使用给定的地址族.套接字类型.协议编号(默认为0)来创建套接字. 1. socket类型: socket.AF ...

  9. Orchard 源码探索(Log)

    简单工厂模式.抽象工厂模式和适配器模式 依赖倒置原则也叫依赖倒转原则,Dependence Inversion Principle,对抽象进行编程,不要对实现进行编程. A.高层次的模块不应该依赖于低 ...

  10. WebRTC 音视频开发

    WebRTC 音视频开发 webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...