1.  ICMP是“Internet Control Message Ptotocol”的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。

   控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。在网络中经常会使用到ICMP协议。例如经常用于检查网络不通的ping命令,这个ping的过程实际上就是ICMP协议工作的过程。还有跟踪路由的trancert命令也是基于ICMP协议的。

2.  ping.exe的原理:向指定的IP地址发送一定长度的数据包,按照约定,若指定IP地址存在的话,会返回同样大小的数据包,当然,若在特定时间内没有返回,就是“超时”,会被认为指定的IP地址不存在。由于ping使用的是ICMP协议,有些防火墙软件会屏蔽ICMP协议,所以有时候ping的结果只能作为参考,ping不通并不一定说明对方IP不存在。

3.  ping命令执行过程详解:

   机器A ping 机器B

   同一网段

   1.ping通知系统建立一个固定格式的ICMP请求数据包

   2.ICMP协议打包这个数据包和机器B的IP地址转交给IP协议层(一组后台运行的进程,与ICMP类似)

   3.IP层协议将以机器B的IP地址为目的地址,本机IP地址为源地址,加上一些其他的控制信息,构建一个IP数据包

   4.获取机器B的MAC地址

  1. IP层协议通过机器B的IP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络查找这台机器的MAC。

  2. 若两台机器之前有过通信,在机器A的ARP缓存表应该有B机IP与其MAC的映射关系;若没有,则发送ARP请求广播,得到机器B的MAC地址,一并交给数据链路层

  3. 数据链路层构建一个数据帧,目的地址是IP层传过来的MAC地址,源地址是本机的MAC地址,再附加一些控制信息,依据以太网的介质访问规则,将他们传送出去
  4. 机器B收到这个数据帧后,先检查目的地址,和本机MAC地址对比

  5. 符合,接收。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP协议层协议。IP层检查后,将有用的信息提取交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B类似(这时候主机B已经知道了主机A的MAC地址,不需再发ARP请求);不符合,丢弃。

  6. 不同网段

  7. 1.ping通知系统建立一个固定格式的ICMP请求数据包

  8. 2.ICMP协议打包这个数据包和机器B的IP地址转交给IP协议层(一组后台运行的进程,与ICMP类似)

  9. 3.IP层协议将以机器B的IP地址为目的地址,本机IP地址为源地址,加上一些其他的控制信息,构建一个IP数据包

  10. 4.获取主机B的MAC地址

    IP协议通过计算发现主机B与自己不在同一网段内,就直接交给路由处理,就是将路由的MAC取过来,至于怎么得到路由的MAC地址,和之前一样,先在ARP缓存表中寻找,找不到可以利用广播。路由得到这个数据帧之后,再跟主机B联系,若找不到,就向主机A返回一个超时信息。

4.  ping的结果:

   1.Request timed out:对方与自己不在同一网段内,通过路由也无法到达;对方已关机,或者网络上没有这个地址;对方存在,不过设置了ICMP数据包过滤;错误设置IP地址

   2.Destination host Unreachable:自己未设定默认路由,对方跟自己不在同已网段。

   3.Bad ip address:没有连接到DNS服务器,无法解析IP,也可能是IP不存在

   4.Source quench received:对方或中途服务器繁忙而无法应答

   5.Ping 127.0.0.1:如果ping不通,则表明本地址TCP/IP协议不能正常工作

最新文章

  1. android MD5加密
  2. Django基础之wsgi
  3. 扫描二维码自动识别手机系统(Android/IOS)
  4. 基于 CSS3 Media Queries 的 HTML5 应用
  5. sdut1598 周游列国【简单模拟题】
  6. Unity3D外包团队——技术分享U3D全景漫游(三)
  7. 【转载】如何在Ubuntu上安装LAMP服务器系统?
  8. 发现Select等注入语句自动跳转Code
  9. 分布式还是混合式? 谈CDN架构对服务质量的影响
  10. C# VS 面向对象基础(一)
  11. lua学习笔记1
  12. OpenStack路: OpenStack建筑设计指南 - 概要(摘录和翻译)
  13. hdu_5776_sum(前缀和维护)
  14. Shell命令-文件及内容处理之wc,tr
  15. 【转】vmware的macos中apple ID一直登陆不上解决 ---(伪造smbios设备信息)
  16. 有关Java垃圾回收的几个问题
  17. C#日期转换(转载)
  18. 自写Jquery插件 Menu
  19. 机器学习笔记——t分布知识点总结
  20. iOS.ObjC.Basic-Knowledge

热门文章

  1. C 语言实例 - 判断数字为几位数
  2. qBittorrent+Flex搭建在线视频播放网站
  3. linux网页资料链接
  4. 洛谷P2971 牛的政治Cow Politics
  5. 洛谷P2169 正则表达式
  6. thinkphp5部署到LAMP服务器显示Access denied.
  7. c# json字符串转数组
  8. MySQL库相关操作
  9. [NWPU2016][寒假作业][正常版第三组]搜索和二分 N
  10. notepad++添加到运行