ping和traceroute的工作原理

ping和traceroute的工作原理PING原理PING是基于ICMP协议(网络层)工作的ICMP:InternetControlMessageProtocol,互联网控制报文协议ICMP用于报告传输过程中出现的问题,比如确认IP包是否成功送达,或者发送过程中被废弃的原因比如主机A向主机B发送消息,在途径某个路由器时,无法发现B的存在。路由器就会向A发送一个ICMP不可达的数据包,A解析ICMP的首部和数据段得知具体信息ICMP报文封装在IP包里,从左到右依次是IP头、ICMP头、ICMP数据段,后两部分构成IP

大家好,又见面了,我是你们的朋友全栈君。

PING原理

PING是基于ICMP协议(网络层)工作的

ICMP:Internet Control Message Protocol,互联网控制报文协议

ICMP用于报告传输过程中出现的问题,比如确认IP包是否成功送达,或者发送过程中被废弃的原因

比如主机A向主机B发送消息,在途径某个路由器时,无法发现B的存在。路由器就会向A发送一个ICMP不可达的数据包,A解析ICMP的首部和数据段得知具体信息

  • ICMP报文

封装在IP包里,从左到右依次是IP头、ICMP头、ICMP数据段,后两部分构成IP数据段。

ICMP 报文

ICMP是IP首部的“协议”字段来区分,不同ICMP以其首部的“类型”和“代码”来区分

类型字段

大致分为两类,一类是主动查询(回送),一类是通知差错

查询类是由主机主动发送的,差错类是由路由遭遇异常时发送的

内容 种类
0回送应答 查询
3目标不可达 差错
4原点抑制 差错
5重定向或改变路由 差错
8回送请求 查询
11超时 差错

回送消息

PING命令就是根据回送消息来实现的,用于判断消息是否成功到达对端。其中,主动发送的叫回送请求被动接收的叫回送应答

每发送一个消息,序号字段会自增1

目标不可达

当类型是目标不可达时,可以根据代码字段作进一步区分:

  1. 网络不可达:根本找不到目标IP网络
  2. 主机不可达:可以找到网络,但是找不到主机(可能未连接)
  3. 协议不可达:通过某种协议(比如TCP)访问目的主机时,防火墙禁止该协议访问
  4. 端口不可达:目的主机没有监听访问的端口
  5. 需要分片但设置了不分片

原点抑制

遇到网络拥堵/低速路线时,向源主机发送原点抑制消息,从而增大传输间隔(等)

重定向消息

路由器发现了一条更优的路由选择

超时消息

TTL减小到0时,IP包被丢弃,然后发送超时消息

  • PING

执行ping指令时发生了什么 ( A → B ) (A\rightarrow B) (AB),同一子网

  1. A构建ICMP回送请求消息(类型、序号、发送时间)
  2. 通过ICMP构建IP数据包(源IP、目的IP、协议)
  3. 添加MAC头(ARP映射表or发起ARP查询),获得数据帧(源MAC、目的MAC)
  4. B收到数据帧,检查目的MAC,检查目的IP
  5. 构建ICMP回送响应消息(类型、序号)
  6. A收到后计算RTT

TRACEROUTE原理

和PING类似,TRACEROUTE同样是利用ICMP实现,但是TRACEROUTE(基于UDP)使用的是差错报文类型

  1. 设置TTL,追踪途径的路由器
  2. 设置不分片,确定MTU

追踪路由

发送一连串的ICMP,TTL不断增大,使每次能比前一次多经过一个路由。每次能够获取一个ICMP超时消息,其中就包含了最新到达的路由IP

TRACEROUTE会给ICMP设置一个**“不可能”的端口号**,如果到达目的主机了,就会收到端口不可达

确定MTU

通过需要分片但设置了不分片的差错消息实现

当发送的ICMP不分片,且大小大于MTU时,会被路由丢弃,然后返回差错ICMP告知MTU大小

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162550.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • QMap简单用法

    QMap简单用法QMap提供了一个从类项为key的键到类项为T的直的映射,通常所存储的数据类型是一个键对应一个直,并且按照Key的次序存储数据,这个类也支持一键多值的情况,用类QMultiMapQHash具有和QMap几乎完全一样的APi,此类维护这一张哈希表,表的大小和数据项是自适应的,QHash是以任意的顺序住址他的数据,,当然了他也是可以支持一键多值的,QMultiHash两种之间的区别是:

    2022年5月30日
    48
  • 基于Deep Learning 的视频识别技术「建议收藏」

    基于Deep Learning 的视频识别技术「建议收藏」深度学习在最近十来年特别火,几乎是带动AI浪潮的最大贡献者。互联网视频在最近几年也特别火,短视频、视频直播等各种新型UGC模式牢牢抓住了用户的消费心里,成为互联网吸金的又一利器。当这两个火碰在一起,会产生什么样的化学反应呢?不说具体的技术,先上一张福利图,该图展示了机器对一个视频的认知效果。其总红色的字表示objects,蓝色的字表示scen…

    2022年5月27日
    26
  • 世界人工智能大会在哪里举办_中国人工智能大会2021

    世界人工智能大会在哪里举办_中国人工智能大会20219月17日至19日,2018世界人工智能大会将在上海西岸举办。经国务院批准,大会由国家发展改革委、科技部、工业和信息化部、国家网信办、中国科学院、中国工程院和上海市人民政府共同主办。对于这场规模空前、大咖云集、专业尖端的全球AI盛会,上海市表示:这是上海服务服从国家战略、打造国家人工智能发展高地的一次重要亮相;将对标全球最高标准、汇集世界最优资源、展现最新创新成果、提供最佳现场体验、拿出上海最好…

    2022年9月28日
    5
  • bookkeeper架构图

    bookkeeper架构图一图看清 bookkeeper 整体架构

    2025年7月26日
    5
  • PHP实现打印出库单,有没有实现过?

    PHP实现打印出库单,有没有实现过?

    2021年10月28日
    56
  • BREW的COM属性

    BREW的COM属性

    2021年8月2日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号