ping命令流程解析
Ping程序是用来探测主机到主机之间是否可通信,如果不能Ping到某台主机,表明不能和这台主机建立连接。Ping使用的是ICMP协议,它发送ICMP回送请求消息给目的主机,ICMP协议规定,目的主机必须返回ICMP回送应答消息给源主机,如果源主机在一定时间内收到应答,则认为主机可达。一次完整的Ping过程其实涉及很多协议,如DNS,UDP,ARP,ICMP以及路由协议等
DNS(Domain Name System,域名系统)
- 万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记那一串毫无意义的数字组成的IP地址
- 通过域名得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53
- 如果我们要ping www.baidu.com 首先就要先进行DNS域名解析获得IP地址
ICMP(Internet Control Message Protocol网络控制报文协议)
TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP层区分不是很明显,一般是划分在网络层中,通过IP包来封装ICMP数据,实际传输中数据包的格式一般都是IP包+ICMP包的格式
Ping 过程分析
- 开发板要解析百度的域名,获取到百度主机的IP地址,涉及到DNS协议,传输层用的是UDP协议
- DNS主机利用UDP协议,回复百度的IP给开发板(涉及ARP协议)
- 开发板要发送Ping请求包给百度主机,但发现百度主机IP与自己不在同一个网段,因此要发送Ping请求包给默认路由
- 要发送给默认路由的时候,忽然发现并没有默认路由的MAC地址,因此发送一个ARP广播包,经过交换机转发给了默认路由,然后路由单播自己的MAC地址给开发板
- 这样开发板可以把Ping包发送给默认路由了
- 默认路由经过路由协议,经过一个个路由的转发,最后发送到了百度的主机上,百度主机检测到IP是自己的IP,接收并处理Ping请求,接着百度主机发送一个Ping回应报文给开发板
参考文献
本文作者: CrazyCatJack
本文链接: https://www.cnblogs.com/CrazyCatJack/p/14408907.html
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
关注博主:如果您觉得该文章对您有帮助,可以点击文章右下角推荐一下,您的支持将成为我最大的动力!