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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • http请求报400报错

    http请求报400报错400是HTTP的状态码,主要有两种形式:1、badrequest意思是“错误的请求”;2、invalidhostname意思是“不存在的域名”。在ajax请求后台数据时有时会报HTTP400错误-请求无效(Badrequest);出现这个请求无效报错说明请求没有进入到后台服务里;1、确认发送的数据格式是否正确。调试查看你发送的数据格式是否正确或是否有乱码…

    2022年6月12日
    95
  • 蓝桥杯单片机矩阵按键扫描编程

    蓝桥杯单片机矩阵按键扫描编程

    2021年11月12日
    50
  • Python递归算法解决斐波那契数列

    Python递归算法解决斐波那契数列**Python递归算法解决斐波那契数列**斐波那契数列指的是这样一个数列1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368…这个数列从第3项开始,每一项都等于前两项之和。递归算法定义:就是一个函数直接或间接调用自身的一种方法,他…

    2022年6月22日
    34
  • python的特点和优势_Java与Python异同

    python的特点和优势_Java与Python异同Python介绍Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面…

    2022年9月17日
    2
  • MySql数据库增删改查常用语句命令「建议收藏」

    MySql数据库增删改查常用语句命令「建议收藏」文章目录增删改查语句库操作表操作增删改查实例准备表插入数据修改表数据删除表数据查询表数据常见的MySQL语句命令常见MySQL字段含义增删改查语句增删改查的语句命令为:操作命令增insert删delete改update查select或者show库操作操作代码创建数据库createdatabaseshujuku;…

    2022年5月30日
    32
  • laravel 中配置文件.env解读

    laravel 中配置文件.env解读laravel 中配置文件.env解读

    2022年4月24日
    50

发表回复

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

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