【网络协议】ICMP协议、Ping、Traceroute
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分片的第一片
- 源地址不是单个主机的数据报。
- 子网掩码查询。
- 时间戳查询。
- 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差错报文。
最新文章
- linux 项目部署问题
- kafka配置参数
- Java 初学记录之可执行jar包
- GetRelevantAnimTimeRemainingFraction节点Bug
- fontIconPicker – 优雅的 jQuery 字体图标选择
- Html5 Egret游戏开发 成语大挑战(三)开始界面
- Allegro 中手动制作螺丝孔封装
- Leetcode 114, Flatten Binary Tree to Linked List
- java方法可变参数的写法
- 高手就用Chrome不安全模式
- Spring Aop实现方式总结
- poj 3349 (最小表示法)
- JDK动态代理简单小程序
- 彻底解决tap“点透”,提升移动端点击响应速度
- C++设计模式——解释器模式
- Qt QML 2D shader
- EXEC sp_executesql with multiple parameters
- Lucene实战之基于StandardAnalyzer读写索引
- default activity not found的问题
- div包裹页面后多余部分没有显示,也没滚动条 overflow 属性设置