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 许可协议。转载请注明出处!

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


  • 相关阅读:
    Elasticsearch 缓存总结
    ElasticSearch-集群
    HTTP协议详解
    HTTPS总结
    ElasticSearch--Document
    正排索引和倒排索引
    线上OOM排查步骤总结
    线程池-四种拒绝策略总结
    netty篇-练手
    netty篇-UDP广播
  • 原文地址:https://www.cnblogs.com/CrazyCatJack/p/14408907.html
Copyright © 2011-2022 走看看