ICMP--ping--Traceroute
- ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。
- ICMP报文通常被IP层或更高层协议TCP或UDP使用。
- 一些ICMP报文把差错报文返回给用户进程
- 所有报文的前4个字节都是一样
- 8位类型+8位代码+16位校验和
- 校验和
- 和IP首部校验算法相同
- 反向二进制求和
- 剩余
- 类型
- 15个不同类型字段
- 描述特定类型的ICMP报文
- 代码
- 使用代码字段的值来进一步描述不同的条件
- 类型
- 查询报文
- 查询报文如果出错会产生一个差错报文
- 差错报文
- 有时需要做特殊处理
- 永远不会产生一个差错报文
- 差错报文会继续产生差错报文,形成死循环
- ICMP差错报文(但是, ICMP查询报文可能会产生 ICMP差错报文)。
- 目的地址是广播地址(见图3 - 9)或多播地址(D类地址,见图1 - 5)的IP数据报。
- 作为链路层广播的数据报
- 不是IP分片的第一片(将在11 . 5节介绍分片)。
- 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地
址或多播地址。
- ICMP时间戳请求允许系统向另一个系统查询当前的时间
- 返回的建议值是自午夜开始计算的毫秒数
- 协调的统一时间(Coordinated Universal Time, UTC)
- ICMP报文的好处是它提供了毫秒级的分辨率
- 如某些Unix系统提供的rdate命令只能提供秒级的分辨率。
- 缺陷
- 返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的日期
- ICMP报文中都有标识符和序列号。
- 发送端应用程序在标识字段内存入一个唯一的数值,以区别于其他进程的应答。
- 序列号字段使得客户程序可以在区分哪个请求对应哪个应答。
- UDP
- UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,
那么UDP返回一个ICMP不可达报文。
- UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,
- TFTP
- 可以用 TFTP来强制生成一个端口不可达报文
- 在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。
- ICMP差错报文必须包含生成该差错报文的数据报IP首部(包含任何选项)以及后续8个字节(如UDP首部)
- 这个信息对于 ICMP差错的接收方来说是必要的,可以更多地了解导致差错的原因。
- 这是因为TCP和UDP都在它们的首部前8个字节中存入源端口号和目的端口号
- 尽管ICMP规则允许系统返回多于8个字节的产生差错的IP数据报中的数据,但一般只返回8个字节。
- 网络编程中,BSD系统不把socket接收到的ICMP报文中的UDP数据通知TFTP
- 即应用程序根本就不知道ICMP差错报文存在?
- 类型:8
- 代码:0
- 可以作为诊断工具查看网络问题
- 还能测出往返时间,
- 检测IP记录路由和时间戳选项
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分数据报,打印往返时间
- 并不能保证现在的路由也是将来所要采用的路由,甚至两份连续的 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程序来计算间隔时间,并计算有多少个包 ...
随机推荐
- 在vue 中使用Stylus
概述 什么是Stylus Stylus是一个CSS预处理器. 什么是CSS预处理器 关于CSS预处理器,推荐先行阅读这篇文章:为您详细比较三个 CSS 预处理器(框架):Sass.LESS 和 Sty ...
- 设置Ubuntu下adb 及 fastboot权限
以普通用户登录linux,然后运行adb devices会提示权限不够: List of devices attached ???????????? no permissions 这是因为 ...
- 【Android Developers Training】 68. 序言:添加动画
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- SVN仓库迁移到Git的完美解决办法
参考文章Converting a Subversion repository to Git 1 使用git svn clone 拷贝svn仓库 cd ~/test_repo git svn clone ...
- I/O多路复用之epoll实战
概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程 通俗理解(摘自网上一大神) 这些名词比较绕口,理解涵义就好.一个epoll场景:一个酒吧服务员(一个线程),前 ...
- 第一章:pip 安装 和 卸载 django
1. 在dos命令行中输入 pip 如下命令进行安装: 安装最新的版本的 Django 命令如下: pip install django 安装 指定版本的 Django 命令如下: pip insta ...
- 关于STM32单片机的IAP实现
基于STM32F103单片机的IAP实现(虽然该篇文章不会详细写出实现细节,但是会从一个全局的角度讲述,实际的实现细节只需根据datasheet即可完成). 一.基础概念 什么是IAP?IAP即在应用 ...
- FZU 1015 土地划分
Description 在Dukeswood这块土地上生活着一个富有的农庄主和他的几个孩子.在他临终时,他想把他的土地分给他的孩子.他有许多农场,每个农场都是一块矩形土地.他在农场地图上划上一 ...
- 原生js数组
forEach()遍历:在原来数组上进行操作 var arrF = [2,3,4]; var arrS = arrF.forEach(function (value,index,a) { //val ...
- Servlet端 接收不到4096,8192长度的JSON参数
Servlet端的日志显示,客户端传过来的JSON参数是空值. 但是在客户端的日志显示,已将JSON参数传送过去. 经调查发现,加减1位后的JSON参数均可以正常传送. 只有8192,4096长度的J ...