ICMP数据包结构(转)

// ICMP header
typedef struct _tagX_icmphdr
{
 unsigned char i_type;     //类型
 unsigned char i_code;     //代码
 unsigned short i_cksum;  //检验和
 unsigned short i_id;        //标识符
 unsigned short i_seq;     //序列号
 unsigned long i_timestamp;  //当前时间  =(unsigned long)::GetTickCount();

}XIcmpHeader;

各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)

8bits类型和8bits代码字段:一起决定了ICMP报文的类型。常见的有:
  
  类型8、代码0:回射请求。
  
  类型0、代码0:回射应答。
  
  类型11、代码0:超时。
  
  16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。

对于ICMP回射请求和应答报文来说,接下来是16bits标识符字段:用于标识本ICMP进程。
  
最后是16bits序列号字段:用于判断回射应答数据报。

ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面

一个ICMP报文包括IP头部(20字节)、ICMP头部(12字节)和ICMP报文

IP头部的Protocol值为1就说明这是一个ICMP报文

ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式

此外还有代码(Code)域用于详细说明某种ICMP报文的类型

所有数据都在ICMP头部后面。RFC定义了13种ICMP报文格式,具体如下:

类型代码 类型描述

0 响应应答(ECHO-REPLY)

3 不可到达

4 源抑制

5 重定向

8 响应请求(ECHO-REQUEST)

11 超时

12 参数失灵

13 时间戳请求

14 时间戳应答

15 信息请求(*已作废)

16 信息应答(*已作废)

17 地址掩码请求

18 地址掩码应答

其中代码为15、16的信息报文已经作废。

下面是几种常见的ICMP报文:

1.响应请求

我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。

2.目标不可到达、源抑制和超时报文

这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。

3.时间戳

时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。

--------------------------------种类-------------------------------------

ICMP报文格式
ICMP虽然是网络层的协议,但要将ICMP报文放入IP中发送。

ICMP报文的公共头标由1字节的类型(type)、1字节的
代码(code)和2字节的校验和(checksum)组成。
类型域和代码域用来标识各种ICMP报文。类型域表示ICMP报文的类型,目前已定义了14
种,从类型值来看ICMP报文可分为二大类。

第1 类是取值为1~127的差错报文,

第2类是取值128以上的是信息(informational)报文。

1不能到达信宿(Destination Unreachable)差错报文
2分组过大(Packet Too Big)差错报文
3超时(Time Exceeded)差错报文

4参数问题(Parameter Problem)差错报文
128返回请求(Echo Request)报文
129返回应答(Echo Reply)报文
130组成员查询(Group Membership Query)
131组成员报告(Group Membership Report)
132组成员结束(Group Membership Termination)
133路由器请求(Router Solicitation)
134路由器公告(Router Advertisement)
135邻机请求(Neighbor Solicitation)
136邻机公告(Neighbor Advertisement)
137 重定向(Redirect)

http://blog.sina.com.cn/s/blog_70441c8e010186mh.html

posted on 2017-10-30 10:41 郑军学长 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ZHENGJUNupperclassman/p/7753481.html

ICMP数据包结构(转)相关推荐

  1. JAVA网络编程:TCP/IP数据包结构

    2019独角兽企业重金招聘Python工程师标准>>> 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解网络数据 ...

  2. TCP/IP数据包结构分解

    一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解 网络数据包的结构,以及协议分析.如:网络监控,故障排查等-- IP包是不安全的,但 ...

  3. TCP/IP数据包结构详解

    一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解 网络数据包的结构,以及协议分析.如:网络监控,故障排查等-- IP包是不安全的,但 ...

  4. TCP/IP网络协议栈:以太网数据包结构、802.3、MTU

    <TCP/IP网络协议栈:以太网数据包结构.802.3> <TCP/IP网络协议栈:ARP协议详解> <TCP / IP攻击:ARP缓存中毒的基本原理.TCP序列号预测和 ...

  5. TCP/IP数据包结构具体解释

    [关键词] TCP IP 数据包 结构 具体解释 网络 协议 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解 网络数据包的结构, ...

  6. 用Golang自己构造ICMP数据包

    ICMP是用来对网络状况进行反馈的协议,可以用来侦测网络状态或检测网路错误. 限于当前Golang在网络编程方面的代码稀缺,资料甚少,所以分享一个用Golang来构造ICMP数据包并发送ping程序的 ...

  7. 【计算机网络 24】TCP/IP数据包结构详解

    一.前言 一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解 网络数据包的结构,以及协议分析.如:网络监控,故障排查等. IP包是不安 ...

  8. IP数据报、TCP数据包结构详解

    [关键词] TCP IP 数据包 结构 具体解释 网络 协议 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解 网络数据包的结构, ...

  9. TCP/IP的层次结构、各层数据封装过程、数据包结构--解析

    一.TCP/IP的层次结构 Tcp/ip协议的四个层次 TCP.IP协议的分层结构图 CP/IP协议与OSI模型的对应关系(五层分法) 1.应用层:为用户的应用程序提供接口,使用户可以访问网络.(IE ...

  10. python构造icmp数据包_如何在python中构造ICMP数据包

    为了学习,我目前正在尝试创建一个简单的python porgram来向某个设备发送ICMP ping数据包.为了开始,我查看了python模块Pyping:https://github.com/Akh ...

最新文章

  1. sim中do文件/memory(readmemb命令符)/移位编写
  2. vue 移动端签字_Vue 移动端
  3. Android开发效率—Eclipse快捷键
  4. gulp 与 Webpack 的 异曲同工之处
  5. 常用算法 之一 详解 MD5 实现(基于算法的官方原文档)及源码详细注释
  6. sublime配置c++环境
  7. 如何让eclipse恢复默认布局
  8. [转]自定义ASP.NET MVC Html辅助方法
  9. 左神算法:用栈来求解限制后的汉诺塔问题(Java版)
  10. 华北水利水电大学c语言程序设计四_我校代表队在“中国高等计算机大赛——团体程序设计天梯赛” 中喜获佳绩...
  11. android 资料
  12. LeetCode 221. 最大正方形(动态规划)
  13. java+editor类_GLIPS Graffiti editor
  14. 图书信息管理系统(顺序表)
  15. Sun的JDK7、OpenJDK及IcedTea释疑
  16. 找不到Break键怎么Quit / 退出服务CTRL-BREAK怎么输入啊?/ 笔记本键盘上没有break键
  17. obs推流视频比特率_我如何使用OBS和WebSockets流视频
  18. 安全的可靠的数据防泄密系统
  19. 程序员数学(17)–勾股定理
  20. 生活是否永远如此艰辛,还是仅仅童年才如此

热门文章

  1. SNMP(Simple Network Management Protocol)——简单网络管理协议
  2. 怎么提高计算机的桌面性能,电脑卡顿怎么办?4个小技巧帮你解决问题
  3. 贝叶斯网络模型基础——R语言
  4. 运动控制第一篇之直流电动机建模
  5. 大厂“降本增效”后招聘要求,这项目经验和技术能力...,绝了
  6. IDEA 远程调试war包
  7. 使用dig命令解析域名
  8. python画立体温度分布图_Origin绘制3D立体温度分布图的方法
  9. html背景图片半透明遮罩,巧用CSS cross-fade()实现背景图像半透明效果
  10. 航空三字代码表_国际国内城市三字代码查询-城市航空代码表