ICMP协议

ICMP常常被觉得是IP层的一个组成部分,它是网络层的一个协议。它传递差错报文以及其它须要注意的信息。ICMP报文通常被IP层或更高层(TCP、UDP等)使用,它是在IP数据报内传输的。

ICMP报文大致分为两类:查询报文和差错报文。

先来看差错报文。当传送IP数据报错误发生时(比方主机不可达、网络不可达等),ICMP协议将会发送一个ICMP差错报文给源主机,好让主机做出对应的处理,也因此IP层以上的一些协议有可能做到可靠传输。

书中给出了ICMP差错报文中的一些组合(类型和代码的组合)描写叙述:如网络不可达、网络不可达、协议不可达、port不可达等。

这里说下port不可达的意思:UDP的规则之中的一个是,假设收到一份UDP数据报而目的port与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文,将报文中的类型和代码的组合设定为port不可达。Traceroute程序就是利用port不可达来产生ICMP差错报文的。

另外,在大多数情况下,传送IP数据报错误发生,会产生一个ICMP错误报文。但以下各种情况都不会导致产生ICMP差错报文:

  • ICMP差错报文不会产生差错报文(ICMP查询报文可能会产生ICMP差错报文);
  • 目的地址是广播地址和多播地址的IP数据报;
  • 作为链路层广播的数据报;
  • 不是IP分片的第一片
  • 源地址不是单个主机的数据报。
    这些规则是为了防止过去同意ICMP差错报文对广播分组影响所带来的广播风暴。
    再来看ICMP查询报文。查询报文主要用途有:
  • 子网掩码查询。
  • 时间戳查询。
  • ping查询。

    ping程序

ping是ICMP的一个非常著名的应用。ping程序时对两个TCP/IP系统连通性进行測试的基本工具,它仅仅利用ICMP回显请求和回显应答报文。而不用经过传输层,pingserver一般在内核中试下ICMP的功能。

当某一个站点訪问不了时。我们就能够ping一下这个站点,看下连通情况。比方下图:

这里先ping到google的server,我们能够看到连通性不是非常好,丢包率为50%,而我们又ping了下Github的server,连通性比較好,丢包率为0%。

    Traceroute程序

Traceroute是ICMP协议的还有一个重要应用。主要用来侦測源主机到目的主机之间所经过的路由的情况。Traceroute使用ICMP报文和IP首部中的TTL字段,其原理非常easy,開始时发送一个TTL字段为1的UDP数据报,而后每次收到ICMP超时报文后,再发送一个TTL字段加1的UDP数据报,以确定路径中的每一个路由器,而每一个路由器在丢弃UDP数据报时都会返回一个ICMP超时报文,终于到达目的主机后,因为ICMP选择了一个不可能的值作为UDPport(大于30000)。

这样目的主机就会发送一个port不可达的ICMP差错报文。

最新文章

  1. linux 项目部署问题
  2. kafka配置参数
  3. Java 初学记录之可执行jar包
  4. GetRelevantAnimTimeRemainingFraction节点Bug
  5. fontIconPicker – 优雅的 jQuery 字体图标选择
  6. Html5 Egret游戏开发 成语大挑战(三)开始界面
  7. Allegro 中手动制作螺丝孔封装
  8. Leetcode 114, Flatten Binary Tree to Linked List
  9. java方法可变参数的写法
  10. 高手就用Chrome不安全模式
  11. Spring Aop实现方式总结
  12. poj 3349 (最小表示法)
  13. JDK动态代理简单小程序
  14. 彻底解决tap“点透”,提升移动端点击响应速度
  15. C++设计模式——解释器模式
  16. Qt QML 2D shader
  17. EXEC sp_executesql with multiple parameters
  18. Lucene实战之基于StandardAnalyzer读写索引
  19. default activity not found的问题
  20. div包裹页面后多余部分没有显示,也没滚动条 overflow 属性设置

热门文章

  1. 海量数据统计topK
  2. [Luogu 1850] noip16 换教室
  3. 启动Mysql时,提示error 2002 的解决办法
  4. 【SQL】CONNECT BY 层次化查询
  5. 【SQL】字符型函数
  6. C#关闭退出线程的几种方法
  7. SQL Server对数据进行添加
  8. SQL Server存储过程作业(二)
  9. Visual Studio UI Automation 学习(二)
  10. 编程领域中的 "transparent" 和 "opaque"