前言

在网络中ping是一个十分强大的TCP/IP工具。它的作用主要为:

(1)用来检测网络的连通情况和分析网络速度;

(2)根据域名得到服务器IP;

(3)根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。

我们通常会用它来直接ping IP地址,来测试网络的连通情况。

Ping 的原理是 ICMP 协议.

简介

ICMP 的全称是 Intent Control Message Protocol, 中文过来就是 互联网控制报文协议。它是互联网协议族的核心协议之一。它用于TCP/IP网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。
在IP通信中,经常有数据包到达不了对方的情况。原因是,在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个丢弃了。或者,虽然到达了对方,但是由于搞错了端口号,服务器软件可能不能接受它。这时,在错误发生的现场,为了联络而飞过来的信鸽就是ICMP 报文。在IP 网络上,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信方。ICMP 协议是为了辅助IP 协议,交换各种各样的控制信息而被制造出来的。

ICMP的主要功能:
1.确认IP包是否成功送达目标地址。
2.通知在发送过程当中IP包被废弃的具体原因。

ICMP协议的格式


ICMP报文主要分为两种类型:

  • 查询报文
  • 差错报文

查询报文 (Echo Request与 Echo Reply)

定义:发送端主动发起请求,并且获取到应答。

常见应用:Ping

Ping 就是主动请求,获取到主动应答。但是 Ping 是在原生的 ICMP 中添加了自定义格式区域。例如 Ping 中放了发送的请求时间,以此计算出路程。所以,其实在 Ping 的报文中会加入序号,以用来区分数据包,从而提高计算时间或者路程的准确性。

差错报文

ICMP差错报文的几个例子:终点不可达为3,源抑制为4,超时为11,重定向为5

(1)终点不可达

网络信息不能到达终点,就会给发送端发送一个目的不可到达的信息。告诉发送端可能是设备故障而引起关闭(情况之一)。然后这种又可以再次细分:
A、网络不可达 — 代码为 0,
B、主机不可达 — 代码为 1.
C、协议不可达 — 代码为 2.
D、端口不可达 — 代码为 3.
E、需要分段 - 代码为 4.( 必须把数据分段才能去到终点

(2)源站抑制

发送端发送大量数据时,可能会导致网络( 路由器 )过载,此时过载处可以向发送端发送源抑制的消息,让他降低发送速度。

(3)时间超时

网络包超过设置的在网络中的生存时间,还没有达到。

(4)路由重定向

定义数据包的路由规则。因为大部分的时候,路由规则是通过相关协议算法生成的,有些时候重新定义过之后,会让这个数据包绕的更远。

ICMP实现之ping命令

ping 命令用来在IP 层次上调查与指定机器是否连通,调查数据包往复需要多少时间。为了实现这个功能,ping 命令使用了两个ICMP 报文。

1.向目标服务器发送回送请求。
首先,向目标服务器发出回送请求(类型是8,代码是0)报文(同2)。在这个回送请求报文里,除了类型和代码字段,还被追加了标识符和序号字段。标识符和序号字段分别是16 位的字段。ping 命令在发送回送请求报文时,在这两个字段里填入任意的值。对于标识符,应用程序执行期间送出的所有报文里填入相同的值。对于序号,每送出一个报文数值就增加1。而且,回送请求的选项数据部分用来装任意数据。这个任意数据用来调整ping 的交流数据包的大小。

2.返回回送回答。
计算机送出的回送请求到达目标服务器后,服务器回答这一请求,向送信方发送回送请求(类型是0,代码是0)(同3)。这个ICMP 回送回答报文在IP 层来看,与被送来的回送请求报文基本上一样。不同的只是,源和目标IP 地址字段被交换了,类型字段里填入了表示回送回答的0。也就是,从送信方来看,自己送出的ICMP 报文从目标服务器那里象鹦鹉学舌那样原样返回了。
送信方的计算机可以通过收到回送回答报文,来确认目标服务器在工作着。进一步,记住发送回送请求报文的时间,与接收到回送回答报文的时间一比较,就能计算出报文一去一回往复所需要的时间(同4)。但是,收到的回送回答报文里写的只是类型和代码的话,发送方计算机将无法判断它是否是自己发出去请求的回答。因此,前面说到的标识符和序号字段就有它的意义了。将这两个值与回送回答报文中的相同字段值一比较,送行方计算机就能够简单地检测回送回答是否正确了。执行ping 命令而调查的结果没什么问题的话,就将目标服务器的IP 地址,数据大小,往复花费的时间打印到屏幕上。

3.用ping 命令不能确定与对方连通的原因大致有三个。
1)目标服务器不存在;2)花在数据包交流上的时间太长ping 命令认为超时;3)目标服务器不回答ping 命令。如果是原因2),通过ping 命令的选项来延长到超时的等待时间,就能正确显示结果了。如果原因是1)或3)的话,仅凭ping 命令的结果就不能判断是哪方了。正如这样,ping 命令不一定一定能判断对方是否存在。

ping的简单使用

ping -t

不间断地ping指定计算机,直到管理员中断。

ping -a

ping -a解析计算机名与NetBios名。就是可以通过ping它的IP地址,可以解析出主机名。

ping -n count

发送 count 指定的 ECHO 数据包数。默认值为 4

ping -l length

发送包含由 length 指定的数据量的 ECHO 数据包。默认为 32 字节;最大值是65,527。

关注公众号,获取更多开发必备知识

ICMP协议与ping命令相关推荐

  1. 【计算机网络】ICMP协议与ping命令

    IP协议及ICMP.Ping命令详解: https://blog.csdn.net/lixin_com/article/details/82014542 常见的IP协议号: ICMP:协议号1; IG ...

  2. ARP协议、路由、ICMP协议(ping命令)、三层交换机

    本机ip:192.168.0.237/24                      ping  192.168.90.1 ping的过程: 1.如果是域名,先进行域名解析到具体的一个ip 2.拿目的 ...

  3. c语言实现icmp协议ping命令,利用ICMP协议实现ping命令

    一.实现原理 ping利用ICMP协议包来侦测另一个主机是否可达.Ping的原理是使用了类型码为8的ICMP回送请求包,收到请求的主机则用类型码为0的ICMP回应报文.如果应答包和请求包的标示号.序号 ...

  4. 网络-ICMP协议、Ping命令实现与ICMP攻击

    目录 简介 报文格式 差错报文 常见类型 不发送ICMP差错报文的情况 询问报文 常见类型 实战 简单Ping命令实现 抓包 手算校验和 全部代码 Traceroute 抓包 ICMP重定向攻击 原理 ...

  5. python调用库实现返回ping的时延_python网络作业:使用python的socket库实现ICMP协议的ping...

    ICMP ping是您遇到过的最常见的网络扫描类型. 打开命令行提示符或终端并输入ping www.google.com非常容易. 为什么要在python中实现? 很多名牌大学喜欢考试用python的 ...

  6. ICMP协议的ping和tracert应用

    一.实验目的 1.掌握基于ICMP协议的ping和tracert的基本使用方法. 二.实验内容 1.完成ping命令的使用方法和结果演示. 2.完成tracert命令的使用方法和结果演示. 三.实验过 ...

  7. 【转】:TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute

    TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute 分类:            TCP/IP详解学习笔记计算机网络2006-04-20 18:147970人阅读评论(1)收 ...

  8. 原生socket使用ICMP协议实现ping单个或多个目标时发生窜包的解决方法

    问题描述 原生socket使用ICMP协议实现ping功能,网上代码很多了,我参考的是这本:王艳平,张越.Windows网络与通信程序设计[M].北京人民邮电出版社,2006. 代码逻辑也很清晰,先构 ...

  9. ICMP协议之ping实现

    1. 相关ICMP协议概述 这里只讲解与ping有关的ICMP消息类型,主机发送回送消息(Type = 8),被请求主机回送响应消息(Type = 0),基本格式如下: 回送消息[ECHO] 回送响应 ...

  10. 43-44网络层-ICMP协议和ping命令,ping和pathping排除网络故障。

    使用ICMP协议的命令 ping time 查看延迟 linux 64 windows 128 unix 255 TTL每过一个路由器减一,防止一直传播,可以粗略看对面是什么系统 ping 10.7. ...

最新文章

  1. 剑指offer:面试题06. 从尾到头打印链表
  2. MIME文件类型格式--汇总
  3. MySQL数据库数据类型以及INT(M)的含义
  4. H3C交换机引发的奇葩故障
  5. caffe学习(1) ubunu 16.04+caffe+cuda8.0+opencv3.1安装
  6. 高温津贴:关键是消除劳动者“权利贫困”
  7. python线程安全的计数器_Python多线程同步Lock、RLock、Semaphore、Event实例
  8. php如何查询本周的数据,php、mysql查询当天,查询本周,查询本月的数据实例
  9. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_1_字符输入流_Reader类FileRead...
  10. BlackBone工具集合:注入、hook、驱动程序
  11. 使用列表实现筛选法求素数
  12. 建立FTP服务器的免费软件
  13. 第四章第六题(圆上的随机点)(Random points on a circle)
  14. openharmony开发TS语言基础
  15. failover机制
  16. Java回收对象的标记 和 对象的二次标记过程
  17. 【渝粤教育】广东开放大学 商务谈判 形成性考核 (34)
  18. 自定义形状seekbar学习
  19. 我说CMMI之五:CMMI 4个等级的区别
  20. python 连通域面积_python 三维连通域分析

热门文章

  1. fiddler html 保存,Fiddler的几个简单设置
  2. python怎么获取lol皮肤名称_英雄联盟手游免费皮肤获取攻略 LOL免费皮肤怎么得...
  3. shell 脚本里面的数组和遍历
  4. pktgen-dpdk 使用笔记
  5. MyBatis官方文档——Java API部分
  6. mysql date 索引_SQL 中 IS NULL 可以走索引
  7. VS2010打开VS2013、VS2015建立的工程,各种版本之间转换
  8. linux 用户登陆全部记录,Linux—— 记录所有登陆用户的历史操作记录
  9. Windows XP 系统优化-百度转载
  10. 熊猫烧香病毒的分析报告