TCP/IP第三层协议IP之附属协议ICMP

toc

ICMP协议

虽然ICMP报文是封装在IP数据报内被传输的,但是它还是属于IP层的一个组成成分。它主要用于传递差错信息和查询信息。

报文格式


  • 8位类型:用以描述特定类型的ICMP报文
  • 8位代码:进一步描述ICMP报文类型的不同条件
  • 16位校验和:同时包含首部和数据的校验和
类型代码描述查询报文差错报文
00主动请求的应答(ping应答)
3
目的不可达


0网络不可达


1主机不可达


2协议不可达


3端口不可达


4需要进行分片但设置了不分片

40源站抑制(使源站放慢发送速度)


5
重定向


0对网络重定向


1对主机重定向


2对服务类型和网络重定向


3对服务类型和主机重定向

80主动请求(ping请求)

11
超时


0传输期间生存时间为0


1数据组装期间生存时间为0

ICMP报文的最终类型由类型字段与代码字段共同决定

差错报文

当产生ICMP差错报文时,除了类型、代码、校验和以及未使用字段外,数据部分还必须包括出错的IP数据报的IP首部以及跟在IP首部后的前8个数据部分(包含了上层协议的目标端口号与源端口号)的字节。

不产生ICMP报文的情况

  1. ICMP差错报文(避免无休止的循环下去,但是ICMP查询报文有可能产生ICMP差错报文)
  2. 目的地址是广播地址或者多播地址的IP数据报
  3. 作为链路层广播的数据报
  4. 不是IP分片的第一片。
  5. 源地址不是单个主机的数据报。这就是说,源地址不能为零地址,环回地址,广播地址或者多播地址(不产生的原因是为了防止ICMP差错报文对广播分组响应所带来的广播风暴)

举例

ping命令就是使用的查询报文类型
Traceroute(Linux)/Tracer(windows)命令使用的是差错报文类型





原创不易,转载请注明出处,谢谢
原文地址:https://www.cnblogs.com/Keeping-Fit/p/13994498.html