ICMP报文的格式和种类

ICMP报文的格式和种类各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)8bits类型和8bits代码字段:一起决定了ICMP报文的类型。常见的有:    类型8、代码0:回射请求。    类型0、代码0:回射应答。    类型11、代码0:超时。类型代码类型描述0

大家好,又见面了,我是你们的朋友全栈君。各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)

8bits类型和8bits代码字段:一起决定了ICMP报文的类型。常见的有:
  
  类型8、代码0:回射请求。
  
  类型0、代码0:回射应答。
  
  类型11、代码0:超时。


类型代码 类型描述
0 响应应答(ECHO-REPLY)
3 不可到达
4 源抑制
5 重定向
8 响应请求(ECHO-REQUEST)
11 超时
12 参数失灵
13 时间戳请求
14 时间戳应答
15 信息请求(*已作废)
16 信息应答(*已作废)
17 地址掩码请求
18 地址掩码应答
其中代码为15、16的信息报文已经作废。


下面是几种常见的ICMP报文:
1.响应请求
我们日常使用最多的ping,就是响应请求(Type=8)和应答(Code=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)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137806.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 单射、满射、双射(一一映射)

    单射、满射、双射(一一映射)设函数f:X->Y,y=f(x)单射:任给x1和x2属于X,若x1≠x2,则f(x1)≠f(x2),称f为单射满射:任给y属于Y,都存在x属于X使得f(x)=y,称f为满射双射:若f既是单射又是满射,称f为双射,也叫一一对应。

    2022年5月1日
  • CDatabase::ExecuteSQL()

    CDatabase::ExecuteSQL()CDatabase::ExecuteSQLCallthismemberfunctionwhenyouneedtoexecuteaSQLcommanddirectly.当你要直接执行SQL命令的时候就访问这个成员函数voidExecuteSQL(  LPCTSTRlpszSQL );lpszSQLPointertoanull

    2022年5月21日
  • 微信小程序 小程序源码包括后台完整版分享

    微信小程序 小程序源码包括后台完整版分享需要的留邮箱免费发!版权归作者所有,任何形式转载请联系作者。作者:执波仔丶(csdn博客)最新收集的60个微信小程序源码分享+开发视频教程最新收集的60个微信小程序源码分享+开发视频教程最新收集的60个微信小程序源码分享+开发视频教程小程序源码使用教程(源码文件夹自带安装教程,本教程不一定通用):第一步:百度搜索下载微信开发者工具(最新1.02.1801081,支持mac)第二步:打开开发工具客…

    2022年7月20日
  • 遍历map的几种方法?_hashmap如何遍历

    遍历map的几种方法?_hashmap如何遍历#先往map加入几个数据Map<Integer,String>map=newHashMap<>();map.put(1,”美好的周一”);map.put(2,”美好的周二”);map.put(3,”美好的周三”);方法一:普通的foreach循环,使用keySet()方法,遍历keyfor(Integerkey:map.keySet()){System.out.println(“key:”+key+

    2022年9月21日
  • Android NDK location无法配置?

    Android NDK location无法配置?

    2021年10月2日
  • 学成在线项目怎么样(学成在线微服务)

    CMS接口开发1项目的功能构架1.1项目背景1.2功能模块1.3项目原型2项目的技术架构2.1技术架构2.2技术栈2.3开发步骤3CMS需求分析3.1什么是CMS3.2静态门户工程搭建3.2.1导入门户工程3.2.2配置虚拟主机 在nginx中配置虚拟主机:3.2.3SSI服务端包含技术3.3CMS页面管理需求4CMS服务端工程搭建注释也是必不可少的KaTeX数学公…

    2022年4月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号