Ping工作原理

文章目录

    • 目的
    • ping
    • 网络协议 OSI
    • ICMP
      • 什么是ICMP
      • 作用
      • 功能
      • 报文类型
        • 查询报文类型
        • 差错报文类型
      • ICMP 在 IPv4 和 IPv6 的封装
        • ICMP 在 IPv4 协议中的封装
        • ICMP 在 IPv6 协议中的封装
        • ICMP 头部
    • 日常ping 排除步骤
      • ping 查询报文使用
    • code
    • 扩展

目的

本文主要是梳理ping的工作原理- 揭开 ICMP 面纱, 其中会涉及到一些基础网络知识, 方便我们能更加了解网络知识 - ICMP。

ping

在实际开发过程中, 我们经常会本地去ping 某个ip地址, 查看网络情况, 去做一些对应排除工作。
如下图:
在这里插入图片描述
然后事实上, 我们却没有在意ping 下实际工作原理。 至少之前我是没有, 哈哈 _. 现在就是像特意去了解下。

网络协议 OSI

OSI(Open System Interconnect),即开放式系统互连。
开放式系统互连

不管是四层 还是七层 网络协议。 ping 使用协议处于网络中的网络层,(与 IP 同层),但ICMP使用时必须增加IP报头
在这里插入图片描述
网络层IP报文结构如下图
在这里插入图片描述
首部校验
在这里插入图片描述

ICMP

什么是ICMP

ICMP 的全称是 Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。这也就是说,当主机收到一个指明上层协议为 ICMP 的 IP 数据报时,它会分解出该数据报的内容给 ICMP,就像分解数据报的内容给 TCP 和 UDP 一样。

ICMP 协议和 TCP、UDP 等协议不同,它不用于传输数据,只是用来发送消息。因为 IP 协议现在有两类版本:IPv4 和 IPv6 ,所以 ICMP 也有两个版本:ICMPv4 和 ICMPv6。

作用

通常用于返回的错误信息或是分析路由。ICMP错误消息总是包括了源数据并返回给发送者。 ICMP错误消息的例子之一是TTL值过期。每个路由器在转发数据报的时候都会把IP包头中的TTL值减1。如果TTL值为0,“TTL在传输中过期”的消息将会回报给源地址。 每个ICMP消息都是直接封装在一个IP数据包中的,因此,和UDP一样,ICMP是不可靠的。

功能

  • 确认 IP 包是否能够成功到达目标地址,当两个设备通过互联网相连时,任意一个设备发送给另一个设备的 IP 包如果没有到达,就会生成 ICMP 数据包发送给设备共享。
  • 网络诊断,经常使用 ICMP 数据包的两个终端程序是 ping 和 traceroute,traceroute 程序用于显示两台互联网设备之间可能的路径并测量数据包在 IP 网络上的时延。ping 程序是 traceroute 的简化版本,我们经常使用 ping 命令来测试两台设备之间是否互联,ping 通常用来测试两台主机之间的连接速度,并准确报告数据包到达目的地并返回后所花费的时间。

如果在 IP 通信过程中由于某个 IP 包由于某种原因未能到达目标主机,那么这个具体的原因将由 ICMP 进行通知,下面是一个 ICMP 的通知示意图
在这里插入图片描述

报文类型

具体ICMP包, 通知类型如下
在这里插入图片描述
上表显示的 ICMP 通知类型主要分为两类:

  • 有关 IP 数据报传递的 ICMP 报文,这类报文也叫做差错报文(error message)。 。最常见的差错报文类型包括目标不可达(类型 3 )、重定向(类型 5)、超时(类型 11)。
  • 有关信息采集和配置的 ICMP 报文,这类报文也被称为查询 quer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/450243.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ThreeWayBranch 优化阅读笔记

1. 优化目的 通过重排三分支的 BB 块减少比较指令的执行次数 代码路径: bolt/lib/Passes/ThreeWayBranch.cpp2. 效果 优化前: 注: 黄色数字表示BB块编号, 紫色表示该分支跳转的次数,绿色是代码里BB块的变量名 ThreeWayBranc…

如何把视频号里的视频提取出来?下载提取器支持一键下载视频!

下载微信视频号视频一直都是很多人都痛,本期分享如何使用视频号下载器下载视频。 视频下载提取器 工具名称:视频号下载小助手;简称,视频下载助手 使用平台:苹果手机、安卓手机、电脑设备 使用方法:一键…

零基础学习JS--基础篇--JavaScript类型化数组

JavaScript 类型化数组是一种类似数组的对象,并提供了一种用于在内存缓冲中访问原始二进制数据的机制。 引入类型化数组并非是为了取代 JavaScript 中数组的任何一种功能。相反,它为开发者提供了一个操作二进制数据的接口。这在操作与平台相关的特性时会…

【性能测试】Jmeter+InfluxDB+Grafana 搭建性能监控平台

一、背景 为什么要搭建性能监控平台? 在用 Jmeter 获取性能测试结果的时候,Jmeter自带的测试报告如下: 这个报告有几个很明显的缺点: 只能自己看,无法实时共享;报告信息的展示比较简陋单一,不…

数据库管理-第159期 Oracle Vector DB AI-10(20240311)

数据库管理159期 2024-03-11 数据库管理-第159期 Oracle Vector DB & AI-10(20240311)1 其他distance函数2 实例演示使用其他函数寻找最近向量点函数变体简写语法 总结 数据库管理-第159期 Oracle Vector DB & AI-10(20240311&#x…

如何理解JavaScript一切皆对象

"JavaScript一切皆对象"的说法,实际上是JavaScript编程语言的一个核心特性和设计理念。在JavaScript中,几乎所有的东西都可以被看作是一个对象,包括基本数据类型(如数字、字符串、布尔值)和复杂的数据结构&a…

算法耗时通用优化技巧 总结

最近在部署AI相关的算法,并要求减少总耗时,从中总结出的一些比较通用的优化技巧。精髓总结一句话就是:在同一时间尽可能充分利用硬件资源。而怎么尽可能充分利用呢,方式就是多线程并行处理。 1、单线程串行处理数据 假设算法需要…

Linux入门基本指令(1)

✨前言✨ 📘 博客主页:to Keep博客主页 🙆欢迎关注,👍点赞,📝留言评论 ⏳首发时间:2024年3月12日 📨 博主码云地址:渣渣C 📕参考书籍:…

Java开发从入门到精通(一):Java的项目案例

Java大数据开发和安全开发 Java 案例练习案例一:买飞机票案例二:开发验证码案例三:评委打分案例四:数字加密案例五:数组拷贝案例六: 抢红包案例七:找素数案例八:模拟双色球[拓展案例] Java 案例练习 案例一:买飞机票 分析: 方法是需要接收数据?需要接收机票原价、当前月份、舱…

【更新】cyの破三之旅(20240313~20240421)

序言 在过去一个多月里,我又如期搞砸一些事。 有些事不去做会遗憾,做完也很自责。 经年如此,已经习惯了。 但是这次破三,我一定不会再搞砸了。(FLAG已立,完篇收FLAG) PS:真的勇…

opengl 学习(三)-----着色器

着色器 分类demo效果解析教程 分类 OPengl C demo #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>#include <string> #include <fstream> #include <sstream>…

【Python数据结构与判断3/7】储存多个数据的元组

目录 导入 数据结构 元组 索引 in运算 ​编辑 Debug 总结 导入 我们之前学习的变量可以存储1个数据&#xff0c;那当我们需要存储10个数据的时候该怎么办呢&#xff1f;写10个变量可以解决这个问题&#xff0c;但是太冗长。 数据结构 我们也可以如第2张图所示&#xff0…

Accelerating Performance of GPU-based Workloads Using CXL——论文泛读

FlexScience 2023 Paper CXL论文阅读笔记整理 问题 跨多GPU系统运行的高性能计算&#xff08;HPC&#xff09;工作负载&#xff0c;如科学模拟和深度学习&#xff0c;是内存和数据密集型的&#xff0c;依赖于主机内存来补充其有限的板载高带宽内存&#xff08;HBM&#xff09…

【代码随想录 | 数组 02】移除元素

文章目录 2.移除元素2.1题目2.1思路2.2.1暴力解法2.2.2双指针法 23总结 2.移除元素 27.移除元素_力扣链接 2.1题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&am…

Kubernetes | 起源 | 组件详解

起源 起源&#xff1a; Kubernetes&#xff08;常简称为K8s&#xff09;起源于Google内部的Borg项目&#xff0c;是一个开源的容器编排引擎&#xff0c;于2014年首次对外发布。 Google Borg Google Borg 是 Google 内部开发和使用的大规模集群管理系统&#xff0c;用于管理和运…

Visual grounding-视觉定位任务介绍

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

网络通信另个角度的认识(进程间通信),端口号(为什么要有,和pid的关系,如何封装,和进程的定位原理+对应关系)客户端如何拿到服务端的port

目录 另一个角度认识网络通信 端口号 引入 -- 为什么要有端口号 问题 解决 端口号和pid 举例 介绍 分类 知名端口 注册端口 动态端口 客户端如何知道服务端的端口号 封装端口号 定位原理 进程和端口号的对应关系 数据如何被上层进程读到 另一个角度认识网络…

Node.js安装 (WIndows版本)

一. 下载地址 Node.js 安装包及源码下载地址为&#xff1a;https://nodejs.org/en/download 二. 具体安装步骤 下载对应msi文件后&#xff0c;双击下载后的安装包 点击next&#xff0c;进入下一步 选择安装目录&#xff0c;建议修改到非C盘目录 选择安装环境 点击 I…

docker启动时环境变量不生效(docker打包成镜像后环境变量失效)

前言 因项目需要多处部署&#xff0c;为了部署的方便&#xff0c;于是准备将项目环境打包成docker镜像以便于部署。mq、mysql这些在仓库中都有现成的镜像&#xff0c;虽然java和nginx的也都有&#xff0c;但是不知道当时是怎么想的&#xff0c;就不想搞太多镜像&#xff0c;也…

力扣大厂热门面试算法题 15-17

15. 三数之和&#xff0c;16. 最接近的三数之和&#xff0c;17. 电话号码的字母组合&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.11 可通过leetcode所有测试用例。 目录 15. 三数之和 解题思路 完整代码 Java Python ​…