Fork me on GitHub

ping命令流程解析


Ping程序是用来探测主机到主机之间是否可通信,如果不能Ping到某台主机,表明不能和这台主机建立连接。Ping使用的是ICMP协议,它发送ICMP回送请求消息给目的主机,ICMP协议规定,目的主机必须返回ICMP回送应答消息给源主机,如果源主机在一定时间内收到应答,则认为主机可达。一次完整的Ping过程其实涉及很多协议,如DNS,UDP,ARP,ICMP以及路由协议等

DNS(Domain Name System,域名系统)

  1. 万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记那一串毫无意义的数字组成的IP地址
  2. 通过域名得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53
  3. 如果我们要ping www.baidu.com 首先就要先进行DNS域名解析获得IP地址

ICMP(Internet Control Message Protocol网络控制报文协议)

TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP层区分不是很明显,一般是划分在网络层中,通过IP包来封装ICMP数据,实际传输中数据包的格式一般都是IP包+ICMP包的格式

  • 格式如下:IP首部(20字节)+8位类型+8位代码+16位校验和+ICMP首部其他部分(7个字节)+数据
    DMhxER.png

Ping 过程分析

Ping www.baidu.com
DMI5Ed.png

  1. 开发板要解析百度的域名,获取到百度主机的IP地址,涉及到DNS协议,传输层用的是UDP协议
  2. DNS主机利用UDP协议,回复百度的IP给开发板(涉及ARP协议)
  3. 开发板要发送Ping请求包给百度主机,但发现百度主机IP与自己不在同一个网段,因此要发送Ping请求包给默认路由
  4. 要发送给默认路由的时候,忽然发现并没有默认路由的MAC地址,因此发送一个ARP广播包,经过交换机转发给了默认路由,然后路由单播自己的MAC地址给开发板
  5. 这样开发板可以把Ping包发送给默认路由了
  6. 默认路由经过路由协议,经过一个个路由的转发,最后发送到了百度的主机上,百度主机检测到IP是自己的IP,接收并处理Ping请求,接着百度主机发送一个Ping回应报文给开发板

参考文献

  1. RT-Thread视频中心内核入门
  2. RT-Thread文档中心

本文作者: CrazyCatJack

本文链接: https://www.cnblogs.com/CrazyCatJack/p/14408907.html

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

关注博主:如果您觉得该文章对您有帮助,可以点击文章右下角推荐一下,您的支持将成为我最大的动力!


posted @ 2021-02-22 10:50  CrazyCatJack  阅读(1088)  评论(0编辑  收藏  举报