ICMP--ping--Traceroute
- ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。
- ICMP报文通常被IP层或更高层协议TCP或UDP使用。
- 一些ICMP报文把差错报文返回给用户进程
.png)
.png)
- 所有报文的前4个字节都是一样
- 8位类型+8位代码+16位校验和
- 校验和
- 和IP首部校验算法相同
- 反向二进制求和
- 剩余
- 类型
- 15个不同类型字段
- 描述特定类型的ICMP报文
- 代码
- 使用代码字段的值来进一步描述不同的条件
- 类型
.png)
- 查询报文
- 查询报文如果出错会产生一个差错报文
- 差错报文
- 有时需要做特殊处理
- 永远不会产生一个差错报文
- 差错报文会继续产生差错报文,形成死循环
- ICMP差错报文(但是, ICMP查询报文可能会产生 ICMP差错报文)。
- 目的地址是广播地址(见图3 - 9)或多播地址(D类地址,见图1 - 5)的IP数据报。
- 作为链路层广播的数据报
- 不是IP分片的第一片(将在11 . 5节介绍分片)。
- 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地
址或多播地址。
.png)
- ICMP时间戳请求允许系统向另一个系统查询当前的时间
- 返回的建议值是自午夜开始计算的毫秒数
- 协调的统一时间(Coordinated Universal Time, UTC)
- ICMP报文的好处是它提供了毫秒级的分辨率
- 如某些Unix系统提供的rdate命令只能提供秒级的分辨率。
- 缺陷
- 返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的日期
.png)
- ICMP报文中都有标识符和序列号。
- 发送端应用程序在标识字段内存入一个唯一的数值,以区别于其他进程的应答。
- 序列号字段使得客户程序可以在区分哪个请求对应哪个应答。
- UDP
- UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,
那么UDP返回一个ICMP不可达报文。
- UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,
- TFTP
- 可以用 TFTP来强制生成一个端口不可达报文
.png)
.png)
- 在UDP数据报送到 svr4之前,要先发送一份ARP请求来确定它的硬件地址(第1行)。
- 接着返回ARP应答(第2行)
- 然后才发送UDP数据报(第3行)
- 一个ICMP端口不可达差错是立刻返回的(第 4行)
- 但是, TFTP客户程序看上去似乎忽略了这个ICMP报文,而在5秒钟之后又发送了另一份 UDP数据报(第 5行)。
- 在客户程序放弃之前重发了三次
- 跟在每个 UDP后面的数字 20指的是UDP数据报中的数据长度。
- 在tcpdump的输出中保留ARP请求和应答是为了提醒我们,这些报文交换可能在第一个IP数据报从一个主机发送到另一个主机之前是必需的
- ICMP报文是在主机之间交换的,而不用目的端口号,而每个20字节的UDP数据报
则是从一个特定端口2924发送到另一个特定端口8888。
.png)
- ICMP差错报文必须包含生成该差错报文的数据报IP首部(包含任何选项)以及后续8个字节(如UDP首部)
- 这个信息对于 ICMP差错的接收方来说是必要的,可以更多地了解导致差错的原因。
- 这是因为TCP和UDP都在它们的首部前8个字节中存入源端口号和目的端口号
- 尽管ICMP规则允许系统返回多于8个字节的产生差错的IP数据报中的数据,但一般只返回8个字节。
.png)
.png)
- 网络编程中,BSD系统不把socket接收到的ICMP报文中的UDP数据通知TFTP
- 即应用程序根本就不知道ICMP差错报文存在?
.png)
- 类型:8
- 代码:0
- 可以作为诊断工具查看网络问题
- 还能测出往返时间,
- 检测IP记录路由和时间戳选项
.png)
zane@zane-V:~$ ping zane-V
PING zane-V (127.0.1.1) () bytes of data.
bytes from zane-V (127.0.1.1): icmp_seq= ttl= time=0.022 ms
bytes from zane-V (127.0.1.1): icmp_seq= ttl= time=0.023 ms
bytes from zane-V (127.0.1.1): icmp_seq= ttl= time=0.023 ms
bytes from zane-V (127.0.1.1): icmp_seq= ttl= time=0.023 ms
bytes from zane-V (127.0.1.1): icmp_seq= ttl= time=0.025 ms
bytes from zane-V (127.0.1.1): icmp_seq= ttl= time=0.025 m
- 提供-R选项,以提供记录路由的功能。
- 会频繁使用默认路由
- 使得ping程序在发送出去的IP数据报中设置IP的RR选项(该IP数据报包含ICMP回显请求报文)。
- 每个处理该数据报的路由器都把它的IP地址放入选项字段中
- 当数据报到达目的端时,IP地址清单应该复制到ICMP回显应答中,
- 这样返回途中所经过的路由器地址也被加入清单中。
- 当 ping程序收到回显应答时,它就打印出这份IP地址清单
[root@zane1 ~]# ping -R 192.168.56.12
PING 192.168.56.12 (192.168.56.12) () bytes of data.
bytes from 192.168.56.12: icmp_seq= ttl= time=1.19 ms
RR: 192.168.56.10
192.168.56.12
192.168.56.12
192.168.56.10 bytes from 192.168.56.12: icmp_seq= ttl= time=0.250 ms (same route)
bytes from 192.168.56.12: icmp_seq= ttl= time=0.190 ms (same route)
bytes from 192.168.56.12: icmp_seq= ttl= time=0.248 ms (same route)
bytes from 192.168.56.12: icmp_seq= ttl= time=0.208 ms (same route)
bytes from 192.168.56.12: icmp_seq= ttl= time=0.331 ms (same route)
bytes from 192.168.56.12: icmp_seq= ttl= time=0.274 ms (same route)
bytes from 192.168.56.12: icmp_seq= ttl= time=0.250 ms (same route)
- ping程序是对两个 TCP/IP系统连通性进行测试的基本工具。
- 它只利用ICMP回显请求和回显应答报文,而不用经过传输层(TCP/UDP)
- Ping服务器一般在内核中实现 ICMP的功能。
- Traceroute程序可以让我们看到 IP数据报从一台主机传到另一台主机所经过的路由。
- Traceroute程序还可以让我们使用 IP源路由选项
- ICMP报文
- IP首部中的TTL字段(生存周期)。
- 它发送一份 TTL字段为1的IP数据报给目的主机
- 处理这份数据报的第一个路由器将 TTL值减1,丢弃该数据报并发回一份超时ICMP报文
- 这样就得到了该路径中的第一个路由器的地址
- 然后 Traceroute程序发送一份TTL值为2的数据报,这样我们就可以得到第二个路由器的地址。
- 继续这个过程直至该数据报到达目的主机。
- 但是目的主机哪怕接收到TTL值为1的IP数据报,也不会丢弃该数据报并产生一份超时ICMP报文,这是因为数据报已经到达其最终目的地。
- 那么我们该如何判断是否已经到达目的主机了呢?
- Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于 30 000),使目的主机的任何一个应用程序都不可能使用该端口。
- 因为,当该数据报到达时,将使目的主机的 UDP模块产生一份“端口不可达”错误的 ICMP报文。
- Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。
[root@zane1 ~]# traceroute www.baidu.com
traceroute to www.baidu.com (180.97.33.108), hops max, byte packets
10.0.2.2 (10.0.2.2) 0.135 ms 0.054 ms 0.050 ms
10.0.2.2 (10.0.2.2) 1.918 ms 1.833 ms 1.766 ms
- 输出第1个无标号的行给出了
- 主机名及其IP地址
- TTL字段最大值
- 发送的数据报大小
- 输出的后面两行:
- TTL值+主机名或路由器名称+主机/路由器IP
- 对于每个TTL值发送3分数据报,打印往返时间
.png)
- 并不能保证现在的路由也是将来所要采用的路由,甚至两份连续的 IP数据报都可能采用不同的路由。
- 第二,不能保证 ICMP报文的路由与traceroute程序发送的UDP数据报采用同一路由。
- 第三,返回的 ICMP报文中的信源 IP地址是UDP数据报到达的路由器接口的 IP地址。
ICMP--ping--Traceroute的更多相关文章
- icmp,tcp,traceroute,ping,iptables
有东莞的监控主机到北京BGP出问题了: 报警短信疯狂发送: 找东莞IDC和北京BGP服务商协查: 有个奇怪的问题:北京到东莞trcaceroute都有路由信息 东莞143段到北京全无路由信息:但,东莞 ...
- Zabbix中使用ICMP ping来判断主机是否存活的问题
上一节配置了Simple check,现在来通过Simple check 用ICMP ping来监控充节点运行情况.Zabbix使用fping处理ICMP ping的请求,需要安装fping程序,安装 ...
- 使用zabbix3.0.4的ICMP Ping模版实现对客户端网络状态的监控
一.登陆Zabbix服务器做以下操作: 1.fping安装 wget http://www.fping.org/dist/fping-3.16.tar.gz tar zxvf fping-3.16.t ...
- zabbix使用ICMP Ping模版实现对客户端网络状态的监控,监控丢包率、响应时间
参考网站: https://www.cnblogs.com/saneri/p/6706578.html 使用fping报错注意事项: https://blog.csdn.net/oqqssh/arti ...
- ICMP Ping模版实现对客户端网络状态的监控
Zabbix使用外部命令fping处理ICMP ping的请求,fping不包含在zabbix的发行版本中,需要额外去下载安装fping程序,安装完毕之后需要zabinx_server.conf中的参 ...
- Zabbix使用外部命令fping处理ICMP ping的请求
Zabbix使用外部命令fping处理ICMP ping的请求,fping不包含在zabbix的发行版本中,需要额外去下载安装fping程序, 安装完毕之后需要在zabinx_server.conf中 ...
- 《TCP/IP 详解 卷一》读书笔记-----Ping&Traceroute
1.ping是用于测试对方主机是否可达的命令,其实本质上就是echo类型的ICMP报文.同时,ping还能用于计算RTT(round-trip time),即两台主机间的往返时延. 2.随着网络安全意 ...
- Linux下网络排查之ping|traceroute|mtr工具(zz)
1.ping ping使用了ICMP回送请求和回送应答报文.ping工具发出去的数据包没有通过tcp/udp协议,但是要经过ip协议.ping命令计算的时间是数据包的往返总时间. ping命令常用 ...
- ping traceroute原理
ping命令工作原理 ping命令主要是用于检测网络的连通性. Ping命令发送一个ICMP请求报文给目的IP,然后目的IP回复一个ICMP报文. 原理:网络上的机器都有唯一确定的IP地址,我们给目标 ...
- ping & traceroute 原理
说明: 忘记从哪里看到的原文了. 不过我应该进行了大刀阔斧的删选. ping 用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应. ping程序来计算间隔时间,并计算有多少个包 ...
随机推荐
- 几个常用的linux命令(操作服务器时会用到)
目录 tmux 背景 安装 使用 启动一个tmux session 暂时离开当前session 回到之前的session 重命名session 创建window 创建pane ps scp 参考 tm ...
- Spring Security3详细配置
Spring Security3详细配置 表名:RESOURCE 解释:资源表备注: 资源表 RESOURCE(资源表) 是否主键 字段名 字段描述 数据类型 长度 可空 约束 缺省值 备注 是 ID ...
- Eclipse 下的 Maven的安装及配置
http://jingyan.baidu.com/article/295430f136e8e00c7e0050b9.html
- [转] DDD领域驱动设计(三) 之 理论知识收集汇总
最近一直在学习领域驱动设计(DDD)的理论知识,从网上搜集了一些个人认为比较有价值的东西,贴出来和大家分享一下: 我一直觉得不要盲目相信权威,比如不能一谈起领域驱动设计,就一定认为国外的那个Eric ...
- PHP 上传文件大小限制
配置php.ini文件 (以上传500M以下大小的文件为例) 查找以下选项并修改-> file_uploads = On ;打开文件上传选项 upload_max_filesize = 500M ...
- EntityFramework连接SQLite
EF很强大,可惜对于SQLite不支持CodeFirst模式(需要提前先设计好数据库表结构),不过对SQLite的数据操作还是很好用的. 先用SQLiteManager随便创建一个数据库和一张表:
- 并发编程(三):从AQS到CountDownLatch与ReentrantLock
一.目录 1.AQS简要分析 2.谈CountDownLatch 3.谈ReentrantLock 4.谈消费者与生产者模式(notfiyAll/wait.si ...
- Http批量异步发送和数据保存
先说需求. 有个服务程序定时扫描指定文件夹下一个所有文件,文件包含了多个用户(客户)信息及对应的http发送地址和发送数据.现在该服务程序需要提取这些用户信息,然后批量进行发送:发送完后需要将http ...
- MyEclipse2014web工程项目直接复制不能访问报错处理方案
在学习web servlet项目中,做一个项目时 , 完成到了某一阶段 实现了部分功能,有必要保存这一项目,当复制这个项目之后发现发布会报错或者不能访问. 其实复制项目主要是为了在以后的学习中如果能顺 ...
- 100+个MySQL调试和优化技巧
MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思 ...