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大小

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • JavaWeb——Servlet(全网最详细教程包括Servlet源码分析)「建议收藏」

    JavaWeb——Servlet(全网最详细教程包括Servlet源码分析)「建议收藏」JavaWeb——ServletTomcat工作机制动画演示(点击动图可全屏观看)什么是ServletServlet(ServerApplet),全称JavaServlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web…

  • Python基础知识点整理之基本语法元素[通俗易懂]

    Python基础知识点整理之基本语法元素[通俗易懂]一、程序的格式框架1.缩进缩进是指每行语句前的空白区域,用来表示Python程序间的包含和层次关系。一般语句不需要缩进,顶行书写且不留空白。当表示分支、循环、函数、类等含义,在if,while,for,def,class等保留字所在的完整语句后通过英文冒号(:)结尾,并在之后进行缩进,表示前后代码之间的从属关系。代码编写中,缩进可以用Tab键实现,也可以用4个空格实现。缩进…

  • 机器人系统设计(五)[通俗易懂]

    机器人系统设计1、机器人的定义与组成——机器人是如何组成的各部分的功能:2、机器人系统构建机器人系统构建——执行机构的实现机器人系统构建——驱动系统的实现机器人系统构建——内部传感器系统的实现机器人系统构建——控制系统的实现机器人系统构建——外部传感器系统的实现3、机器人系统构建——连接摄像头       …

  • 代码在线编辑工具_php代码编辑器安卓版

    代码在线编辑工具_php代码编辑器安卓版在线代码编辑器    在线编辑各种文本形式的源代码,如js,html,php等,要支持语法高亮,即时输入即时高亮。 我的初步想法是用一个来实现,就是类似于常见的在线网页编辑器,但是因为仅仅是需要代码编辑,所以,要控制只能输入文本,不能让用户插入图片啊链接啊等等东西,感觉比较难。 希望大家能够探讨一下如何实现。 Bespin

  • ventricular septal defect_three identical strangers

    ventricular septal defect_three identical strangers转一个BLOG,是美国一同行写的关于eXtremeDB的,但作者似乎是个中国人。这是BLOG原文地址:http://www.weiqigao.com/blog/2006/04/25/extremedb_exposed.html…

    2022年10月14日
  • es6的解构赋值_字符串赋值给字符指针

    es6的解构赋值_字符串赋值给字符指针ES6模板字符串与解构赋值

发表回复

您的电子邮箱地址不会被公开。

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