zoukankan      html  css  js  c++  java
  • IMCP网际控制协议

          IP协议是TCP/IP协议使用的在网络层传输机制,它是一种不可靠的无连接的数据报协议,但是IP协议假定了底层是不可靠的,因此,要尽最大的努力传输到目的地,但正因为如此,IP协议则没有了保证,也就是说,它并没有提供检验或跟踪机制。所以, ICMP设计的本意就是希望对IP包无法传输时提供报告,这些差错报告帮助了发送方了解为什么无法传递,网络发生了什么问题,确定应用程序后续操作。

         ICMP就像一个更高层的协议那样使用IP(即,ICMP消息被封装在IP数据报中)。

         然而,ICMP是IP的一个组成部分,并且所有IP模块都必须实现它。 ICMP用来报告错误,是一个差错报告机制。它为遇到差错的路由器提供了向最初源站报告差错的办法,源站必须把差错交给一个应用程序或采取其它措施来纠正问题。

         对于被分段的数据报,ICMP消息只发送关于第一个分段中的错误。也就是说,ICMP消息永远不会引用一个具有非0片偏移量字段的IP数据报。 响应具有一个广播或组播目的地址的数据报时,永远不会发送ICMP消息,响应一个没有源主机IP地址的数据报时永远不会发送ICMP消息。这样就避免了广播风暴。

         ICMP的两级封装   每个ICMP报文放在IP数据报的数据部分中通过互联网传递,而IP数据报本身放在帧的数据部分中通过物理网络传递。

          ICMP报文有一个8字节的首部和一个可变长度的数据部分(IP数据报首部)。ICMP报文分为ICMP差错报告报文和ICMP询问报文。前4个字节对所有的类型都是共同的,第一个8比特字段是ICMP的类型,它定义了报文的类型。代码字段指明了发送此特定报文类型的原因。最后一个共同的字段是检验和字段。首部的其余部分对每一种报文类型都是特定的。 ICMP定义了五种常用差错报文和六种询问报文类型,以及用代码表达某类型下面不同情况的细分。

         所有ICMP差错报告报文中的数据字段都具有同样的格式。将收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报告的数据字段。再加上相应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文。提取收到的数据报的数据字段的前8个字节是为了得到运输层的端口号(对于TCP和UDP)以及运输层报文的发送序号(对于TCP)

     

         

  • 相关阅读:
    epoll 使用详解
    STL 较详尽总结
    可视化对比排序算法
    统治世界的十大算法
    Vector Demo
    Git远程操作(附重要原理图)
    Wireshark(五):TCP窗口与拥塞处理
    Wireshark(四):网络性能排查之TCP重传与重复ACK
    Wireshark(三):应用Wireshark IO图形工具分析数据流
    Wireshark(二):应用Wireshark观察基本网络协议
  • 原文地址:https://www.cnblogs.com/luoquan/p/4885369.html
Copyright © 2011-2022 走看看