zoukankan      html  css  js  c++  java
  • 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 许可协议。转载请注明出处!

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


  • 相关阅读:
    滚动计算基础知识
    Javascript继承
    提取URL字符串的搜索字符串中的参数
    C++编程练习(13)----“排序算法 之 堆排序“
    常见网络端口 和 常见网络协议
    TCP协议中的三次握手和四次挥手(图解)
    C++编程练习(14)-------“单例模式”的实现
    编程练习------C/C++分别实现字符串与整数的转换
    IPv4地址学习总结
    C/C++中的联合体
  • 原文地址:https://www.cnblogs.com/CrazyCatJack/p/14408907.html
Copyright © 2011-2022 走看看