网络协议档案之ICMP、Ping、Traceroute
2017-12-14 00:04
836 查看
ICMP协议
ICMP经常被认为是IP层的一个组成部分,它是网络层的一个协议,它传递差错报文以及其他需要注意的信息,ICMP报文通常被IP层或更高层(TCP、UDP等)使用,它是在IP数据报内传输的。
ICMP报文大致分为两类:查询报文和差错报文。
先来看差错报文。当传送IP数据报发生错误时(比如主机不可达、网络不可达等),ICMP协议将会发送一个ICMP差错报文给源主机,好让主机做出相应的处理,也因此IP层以上的一些协议有可能做到可靠传输。书中给出了ICMP差错报文中的一些组合(类型和代码的组合)描述:如网络不可达、网络不可达、协议不可达、端口不可达等。这里说下端口不可达的意思:UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文,将报文中的类型和代码的组合设定为端口不可达。Traceroute程序就是利用端口不可达来产生ICMP差错报文的。
另外,在大多数情况下,传送IP数据报发生错误,会产生一个ICMP错误报文,但下面各种情况都不会导致产生ICMP差错报文:
* ICMP差错报文不会产生差错报文(ICMP查询报文可能会产生ICMP差错报文);
* 目的地址是广播地址和多播地址的IP数据报;
* 作为链路层广播的数据报;
* 不是IP分片的第一片
* 源地址不是单个主机的数据报。
这些规则是为了防止过去允许ICMP差错报文对广播分组影响所带来的广播风暴。
再来看ICMP查询报文,查询报文主要用途有:
* 子网掩码查询;
* 时间戳查询;
* ping查询。
ping程序
ping是ICMP的一个很著名的应用。ping程序时对两个TCP/IP系统连通性进行测试的基本工具,它只利用ICMP回显请求和回显应答报文,而不用经过传输层,ping服务器一般在内核中试下ICMP的功能。当某一个网站访问不了时,我们就可以ping一下这个网站,看下连通情况。比如下图:
这里先ping到google的服务器,我们可以看到连通性不是很好,丢包率为50%,而我们又ping了下Github的服务器,连通性比较好,丢包率为0%。
Traceroute程序
Traceroute是ICMP协议的另一个重要应用,主要用来侦测源主机到目的主机之间所经过的路由的情况。Traceroute使用ICMP报文和IP首部中的TTL字段,其原理很简单,开始时发送一个TTL字段为1的UDP数据报,而后每次收到ICMP超时报文后,再发送一个TTL字段加1的UDP数据报,以确定路径中的每个路由器,而每个路由器在丢弃UDP数据报时都会返回一个ICMP超时报文,最终到达目的主机后,由于ICMP选择了一个不可能的值作为UDP端口(大于30000)。这样目的主机就会发送一个端口不可达的ICMP差错报文。
ICMP经常被认为是IP层的一个组成部分,它是网络层的一个协议,它传递差错报文以及其他需要注意的信息,ICMP报文通常被IP层或更高层(TCP、UDP等)使用,它是在IP数据报内传输的。
ICMP报文大致分为两类:查询报文和差错报文。
先来看差错报文。当传送IP数据报发生错误时(比如主机不可达、网络不可达等),ICMP协议将会发送一个ICMP差错报文给源主机,好让主机做出相应的处理,也因此IP层以上的一些协议有可能做到可靠传输。书中给出了ICMP差错报文中的一些组合(类型和代码的组合)描述:如网络不可达、网络不可达、协议不可达、端口不可达等。这里说下端口不可达的意思:UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文,将报文中的类型和代码的组合设定为端口不可达。Traceroute程序就是利用端口不可达来产生ICMP差错报文的。
另外,在大多数情况下,传送IP数据报发生错误,会产生一个ICMP错误报文,但下面各种情况都不会导致产生ICMP差错报文:
* ICMP差错报文不会产生差错报文(ICMP查询报文可能会产生ICMP差错报文);
* 目的地址是广播地址和多播地址的IP数据报;
* 作为链路层广播的数据报;
* 不是IP分片的第一片
* 源地址不是单个主机的数据报。
这些规则是为了防止过去允许ICMP差错报文对广播分组影响所带来的广播风暴。
再来看ICMP查询报文,查询报文主要用途有:
* 子网掩码查询;
* 时间戳查询;
* ping查询。
ping程序
ping是ICMP的一个很著名的应用。ping程序时对两个TCP/IP系统连通性进行测试的基本工具,它只利用ICMP回显请求和回显应答报文,而不用经过传输层,ping服务器一般在内核中试下ICMP的功能。当某一个网站访问不了时,我们就可以ping一下这个网站,看下连通情况。比如下图:
这里先ping到google的服务器,我们可以看到连通性不是很好,丢包率为50%,而我们又ping了下Github的服务器,连通性比较好,丢包率为0%。
Traceroute程序
Traceroute是ICMP协议的另一个重要应用,主要用来侦测源主机到目的主机之间所经过的路由的情况。Traceroute使用ICMP报文和IP首部中的TTL字段,其原理很简单,开始时发送一个TTL字段为1的UDP数据报,而后每次收到ICMP超时报文后,再发送一个TTL字段加1的UDP数据报,以确定路径中的每个路由器,而每个路由器在丢弃UDP数据报时都会返回一个ICMP超时报文,最终到达目的主机后,由于ICMP选择了一个不可能的值作为UDP端口(大于30000)。这样目的主机就会发送一个端口不可达的ICMP差错报文。
相关文章推荐
- TCP/IP之ICMP(Internet控制报文协议),Ping程序和Traceroute程序
- 【网络协议】ICMP协议、Ping、Traceroute
- 【网络协议】ICMP协议、Ping、Traceroute
- 计算机网络测试方式,ping,tracert,traceroute,icmp,telnet
- ICMP协议规范:一种用于网络管理的协议。对照它您可以想一想PING命令实现的机理
- ICMP协议规范:一种用于网络管理的协议。对照它您可以想一想PING命令实现的机理
- ICMP协议规范:一种用于网络管理的协议。对照它您可以想一想PING命令实现的机理
- 《TCP/IP详解》学习笔记(四):ICMP 协议、ping 和 Traceroute
- ICMP协议之ping实现
- (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
- linux笔记:网络命令ping,traceroute,ifconfig,netstat;挂载和卸载命令mount,umount
- linux网络编程之IP协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)和TCP、UDP协议头结构总结
- ping 原理与ICMP协议
- (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
- ICMP--ping--Traceroute
- (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
- (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
- 网络协议之四(ICMP)
- ssh命令、ping命令、traceroute 命令所使用的协议