关于网络命令 ping 你了解多少

news2024/11/24 6:15:10

1、介绍

  Ping(Packet Internet Groper)是 Windows、Unix 和 Linux系统下的一个命令。ping 也属于一个通信协议,是 TCP/IP 协议的一部分。
  Ping的运作原理是向目标主机传出一个 ICMP(Internet Control Messages Protocol)即因特网信报控制协议的请求回显数据包,并等待接收回显回应数据包。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。
  说到 ping 命令,就不得不说的两个网络协议:ARP 协议和 ICMP 协议,下面对这两个协议进行讲解。

2、ARP协议

2.1 ARP简介

  ARP 协议是“Address Resolution Protocol”(地址解析协议)的缩写。我们知道,在局域网内,如果两台主机要通信,必须要知道对方的MAC地址。ARP 协议的基本功能就是通过目标设备的IP地址,查询目标设备的 MAC 地址,以保证通信的顺利进行
  对于 TCP/IP 网络,地址解析协议(ARP)提供了一种在 IPv4 地址和各种网络技术使用的硬件地址之间的映射关系。ARP 仅用于 IPv4,IPv6 使用邻居发现协议,它被合并入 ICMPv6。

2.2 ARP帧格式

在这里插入图片描述
  前面 14 个字节构成标准以太网的首部,前两个字段 DST 和 SRC 分别表示 以太网的目的地址 和 以太网的源地址,以太网的目的地址如果是 ff:ff:ff:ff:ff:ff 全部为 1 表示广播地址,在同一广播域中的所有以太网接口可以接收这些帧。后面紧跟着的是 ARP 请求的长度/类型,ARP 请求 和 ARP 应答这个值为 0x0806。

  • 硬件类型表示硬件地址的类型,硬件地址常见的有 MAC 物理或者以太网地址,对于以太网来说,此值为 1。
  • 协议类型 指出映射的协议地址类型,对于 IPv4 地址,这个值是 0x0800。
  • 硬件大小和 协议大小 分别指出硬件地址和协议地址的字节数。对于以太网中使用 IPv4 的 ARP 请求或应答,它们的值分别是 6 和 4
  • Op 字段指出如果是 ARP 请求,Op = 1,ARP 应答 ,Op = 2,RARP 请求 Op = 3,RARP 应答,Op = 4。
  • 紧跟在 Op 之后的是 发送方硬件地址(MAC 地址),发送方的协议地址(IPv4 地址),目的硬件地址(一般为全0,表示目的地址未知) 和 目的协议地址。

ARP 示例报文

在这里插入图片描述

2.3 原理及流程

2.3.1 ARP请求

假设主机 A 和 B 在同一个网段,主机 A 要向主机 B 发送信息,具体的地址解析过程如下:

  • 主机 A 首先查看自己的 ARP 表,如果 ARP 表中含有主机 B 对应的 ARP 表项,则主机 A 直接利用 ARP 表中的 MAC 地址,对 IP 数据包进行帧封装,并将数据包发送给主机 B。
  • 如果主机 A 在 ARP 表中找不到对应的 MAC 地址,则将缓存该数据报文,然后以广播方式发送一个 ARP 请求报文。ARP 请求报文中的发送端 IP 地址和发送端 MAC 地址为主机 A 的 IP 地址和 MAC 地址,目标 IP 地址和目标 MAC 地址为主机 B 的 IP 地址和全F的 MAC 地址。由于 ARP 请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。

我们一般可以用 ‘arp -a’ 命令来查看 ARP 表内容:
在这里插入图片描述

2.3.2 ARP响应

  主机B比较自己的 IP 地址和 ARP 请求报文中的目标 IP 地址,当两者相同时进行如下处理:将 ARP 请求报文中的发送端(即主机A)的 IP 地址和 MAC 地址存入自己的ARP表中。之后以单播方式发送 ARP 响应报文给主机 A,其中包含了自己的 MAC 地址。
  主机 A 收到 ARP 响应报文后,将主机 B 的 MAC 地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。

2.3.3 不同网段的ARP应用

假设主机A、B通过路由器连接,属于两个不同的网段——子网掩码24(255.255.255.0)

  • 主机 A 有数据发往主机 B,主机 A 首先查看自己的 ARP 表,没有主机 B 对应的 ARP 表项;然后发现,当前 IP 地址为192.168.3.0/24,目标地址在192.168.4.0/24,不属于同一网段,需要使用默认网关;ARP发现默认网关是 192.168.3.2,但是没有网关 MAC 地址,需要先进行查询
  • 主机将数据包先放到缓存中,然后发送 ARP 查询报文:封装自己的 MAC 地址为源 MAC ,目标 MAC 地址写全F的广播地址,请求网关192.168.3.2的 MAC 地址。然后以广播方式发送出去
  • 路由器收到广播数据包,首先将原192.168.3.0添加到自己的 MAC 地址表中,对应 MAC 地址为0800.0222.2222。路由发现是请求自己的 MAC 地址,然后路由回复一个 ARP 应答:封装自己的 IP 地址为源 IP 己的mac地址为源mac,主机A的IP为目的IP主机A的mac为目的mac,发送一个单播应答“我是192.168.3.2,我的mac地址为 0800.0333.2222”
  • 主机收到应答后,将网关 MAC 地址对应192.168.3.2(跨网关通信,其他网段IP地址的对应mac地址均为网关mac),然后将缓存中的数据包,封装网关 MAC 地址进行发送
  • 路由器收到数据包,检查目的 IP 地址,发现不是给自己的,决定要进行路由,然后查询路由表,需要发往192.168.4.0网段中的192.168.4.0地址。路由准备从相应接口上发出去,然后查询 MAC 地址表,发现没有主机 B 的映射。路由器发送 ARP 请求查询主机 B的 MAC 地址(原理同2、3步,主机 B 收到请求后首先会添加网关的 MAC 地址,然后单播回复 ARP 请求)。
  • 路由器收到主机 B 的 MAC 地址后,将其添加到路由 MAC 地址表中,然后将缓存中的数据2层帧头去掉,封装自己的 MAC 地址为源 MAC,主机 B 的 MAC 地址为目的 MAC (源和目的IP地址不变),加上二层帧头及校验,发送给主机 B。
  • 主机 B 收到数据之后,进行处理,发送过程结束。
  • 如果主机 B 收到数据后进行回复,主机 B 会进行地址判断,不在同一网段,然后决定将数据发送给网关,主机 B 查询 MAC 地址表获得网关 MAC 地址,将数据封装后发送(ARP 地址解析的过程不再需要了,MAC 地址表条目有一定的有效时间),网关收到数据后直接查询MAC 表,将二层帧 MAC 目的地址更改为 A 的 MAC 发送出去。如此,主机 A 收到主机 B 的回复。

这里有一点要注意的是,经过路由器后,可能涉及了三层转发及NAT。源IP地址、源MAC、目的MAC都有可能被改变(没有NAT的情况下,路由器只会改变源MAC和目的MAC)

综上在跨网段通信过程中有以下过程:

  1. 判断地址是否同一网段
  2. 查询目的IP地址的mac(发送arp请求)

此外需注意点:

  1. ARP请求以广播发送、以单播回应
  2. 路由器隔离广播。每一个网段都是独立的广播域
  3. 跨越网段通信需要使用网关的mac地址

3、ICMP协议

3.1 ICMP简介

  IP 协议本身并没有为终端系统提供直接的方法来发现那些发往目的地址失败的 IP 数据包。此外,IP 没有提供直接的方式来获取诊断信息(例如,哪些路由器在沿途中被使用了或使用一种方法来估计往返时间)。为了解决这些不足之处,将一个特殊的Internet控制报文协议(Internet Control Message Protocol,ICMP)与 IP 结合使用,以便提供与 IP 协议层配置和 IP 数据包处置相关的诊断和控制信息。ICMP 通常被认为是 IP 层的一部分,它需要在所有 IP 实现中存在。它使用 IP 协议进行传输。因此,确切的说,它既不是一个网络层协议,也不是一个传输层协议,而是位于两者之间
  控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

它的主要功能是传输网络诊断信息,信息主要包括两类:

  • 一类是 查询类报文(query)或者信息类报文(information message) :主要用于信息的查询和采集和配置,比如采集传输路径上的每个路由器都是谁,本次传输的报文是否达到目的地等等。
  • 另一类是 差错诊断类报文 :主要用于诊断网络故障,比如传输报文被丢弃的原因是什么等等。

其中比较知名的就是 ping 和 traceroute。这两工具分别利用两种类型的 ICMP 报文:

  • ping 使用查询类型报文
  • traceroute 使用差错类型报文

3.2 ICMP协议的作用

  我们都知道,IP 协议是一个不可靠协议,如果 IP 包在传输过程中出现错误,比如 checksum 对不上,拥塞,超时等等,那么 IP 包是会直接被丢弃的,之后也不会有进一步的努力来修正。
  这是 IP 协议的一个设计准则决定的,也就是 best effort,尽力而为,这样的好处是让 IP 协议尽量保持简单的形态,只负责有效率的数据传输,而更多的质量控制交给高层的协议去处理(比如 TCP)。
  但高层能提供质量控制的协议毕竟在少数,所以就需要在下层有协议来辅助 IP 完成必要的网络质量管理。ICMP 协议自然就被提出来了。
  通过 ICMP 协议,当 IP 包发生错误的时候,上层发送 IP 包的主机或路由器并不知道下层发生了错误,这个时候,下层的主机或路由器就可以通过发送 ICMP 包,将错误信息汇报给上层,从而让上层的主机或路由器进行调整。
  不过需要注意的是,ICMP 仅仅只能提供某些特定类型的错误信息汇报,并不能帮助 IP 协议成为可靠的协议。它能做的事还是有限,但用于基本的网络质量管理是足够了。

3.3 ICMP报文

ICMP 报文是在 IP 数据报内部传输的:

| IP头部 | ICMP报文 |

ICMP 报文格式如下:
在这里插入图片描述
具体报文类型如下图所示:
在这里插入图片描述

报文示例:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux内核的源码目录结构和配置体系

1.linux内核源码目录结构1 1.1、源码从哪里来 (1)我们使用2.6.35.7版本的内核。这个版本的内核有三种:第一种是kernel.org上的官方版本,第二种是三星移植过的,第三种是九鼎X210的移植版本。这里使用第三个。 (2)进入源码目录下&#xff0c…

《QT+PCL》点云配准进阶——GROR配准

《QT+PCL》点云配准进阶——GROR配准 一、展示效果二、ui设计三、代码3.1添加代码一、展示效果 根据之前的文章GROR复现,今天将其集成到QT软件中 二、ui设计 三、代码 3.1添加代码 qt的头文件、源文件依旧添加相关代码 其中,如果有函数冲突,改成内联函数,添加inline<…

【系统移植】开发板的启动过程

目录 1、开发板启动相关部件 2、开发板启动过程&#xff08;以 EMMC 启动为例&#xff09; (1) 运行 BL0&#xff08;初始化&#xff09; (2) 加载 uboot 引导程序 (3) 加载 linux 镜像、设备树、根文件系统 3、SD卡的存储结构 1、开发板启动相关部件 下面是一个简单的开…

非常有用的Linux网络诊断命令:traceroute

简介 traceroute 是一个网络诊断工具&#xff0c;用于检测数据包从本机到目标主机经过的路由路径。它可以帮助我们分析出网络连接的瓶颈&#xff0c;定位网络问题&#xff0c;并帮助我们优化网络连接。在 Linux 系统中&#xff0c;traceroute 命令是一个非常常用的工具。 安装…

java语法(二)线程并发、Juit单元测试、注解、反射机制、JVM

文章目录 线程并发多线程多线程的创建Thread常用API 线程同步与通信线程同步&#xff1a;单例模式的三种写法同步代码块同步方法Lock锁 线程通信 线程池获取线程池对象ThreadPoolExecutor线程池处理runnable任务线程池处理callable任务 Executors定时器Timer调度可重复执行任务…

【连续介质力学】张量的谱表示和Cayley-Hamilton定理

张量的谱表示 基于特征多项式&#xff1a; 如果 T T T 是对称二阶张量&#xff0c;那么有三个实数特征值&#xff1a; T 1 , T 2 , T 3 T_1, T_2, T_3 T1​,T2​,T3​, 对应有特征向量&#xff1a; 主空间由特征向量构成的正交基 n ^ ( 1 ) , n ^ ( 2 ) , n ^ ( 3 ) \hat n^…

【自然语言处理】【大模型】BLOOM模型结构源码解析(单机版)

BLOOM模型结构源码解析(单机版) ​ 本文基于transformers中BLOOM模型代码来解析BLOOM的原理及实现。 相关博客 【自然语言处理】【大模型】BLOOM模型结构源码解析(单机版) 【自然语言处理】【大模型】极低资源微调大模型方法LoRA以及BLOOM-LORA实现代码 【深度学习】【分布式训…

Win32程序入口识别,定位回调函数,具体事件处理的定位,ESP寻址方式,压栈方式复习

本专栏上一篇文章带领大家编写了第一个Windows程序&#xff0c;并且带领大家了解了Windows消息机制&#xff0c;如果大家还是不了解的话&#xff0c;可以到我的另一篇专栏中深入学习一下windows消息&#xff0c;Windows消息循环的原理&#xff0c;点击这里就可以查看啦。 我们在…

Gateway网关详解及实践---SpringCloud组件(五)

Gateway网关详解及实践 一 简介1.1介绍1.2.GateWay核⼼概念1.3.GateWay核心功能 二Gateway入门案例2.1 gateway依赖2.2 gateway配置2.3 gateway测试 三Gateway面向服务的路由3.1.门案例问题3.2.gateway-server结合eureka步骤3.2.1.添加Eureka客户端依赖3.2.2.添加Eureka配置3.2…

MySQL进阶-MySQL体系结构和常见存储引擎的比较

本文介绍MySQL体系结构以及存储引擎&#xff08;InnoDB、MyISAM、Memory&#xff09;的比较 文章目录 MySQL 体系结构连接层服务层连接池系统管理和控制工具SQL接口解析器查询优化器缓存 引擎层存储层 存储引擎InnoDBMyISAMMemory区别 MySQL 体系结构 连接层 最上层是一些客户…

Rust 正式发布八周年纪念日 2023.5.15

图源&#xff1a;维基百科 目录 Rust 1. Rust的特点 1.1 安全性 1.2 并发性 1.3 性能 1.4 代码可读性 2. 使用场景 2.1 系统编程 2.2 Web开发 2.3 游戏开发 3. 与其他语言的对比 4. 代码示例 1. Hello, World! 2. 简单的函数 3. 变量绑定和变量类型推断 4. 结…

dayday60-120

目录 60 申论强化361 申论强化462 模考大赛错题63 言语真题164 言语真题65 言语真题366 判断真题1676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 60 申论强化3 1.公文题的格式不允许丢…

Vector - CAPL - CAN消息自动化设置

目录 canGetDataLength -- 获取CAN消息有效负载长度 代码示例 canOutputErrorFrame -- 模拟发送错误帧消息 代码示例 isStdId & isExtId -- 判断报文是标准帧&扩展帧 代码示例 mkExtId -- 将标准帧转换为扩展帧 代码示例 valOfId -- CAN消息的长值标识符 代…

基于SpringBoot的原创歌曲平台的设计与实现

背景 原创歌曲分享平台&#xff0c;为了随时随地查看原创歌曲分享信息提供了便捷的方法&#xff0c;更重要的是大大的简化了管理员管理原创歌曲分享信息的方式方法&#xff0c;更提供了其他想要了解原创歌曲分享信息及运作情况以及挑选方便快捷的可靠渠道。相比于传统原创歌曲…

六级备考33天|CET-SET6|六级口语|备考手册|考试样题|热门话题

目录 样题 1 The benefits of college athletics 2 The adverse impact of cheating on examinations 3 My view on working part-time during ones college years 4 Should students take part in extracurricular activities 5 If you choose overseas studies 6 The…

基于stm32物联网开发板(3)--SYN6288语音模块

基于stm32物联网开发板(3)–SYN6288语音模块 1.SYN6288语音模块展示示例 SYN6288语音模块 2.概述 SYN6288-A语音合成模块是一款性价比更高&#xff0c;效果更自然的一款中高端语音合技术 。 SYN6288-A通过异步串口接收待合成的文本&#xff0c;实现文本到声音&#xff08;TTS&…

SPL即将取代SQL?

先来看看两者的定义。 SQL&#xff1a;结构化查询语言。 SPL&#xff1a;结构化数据计算语言。 既然是比较文章&#xff0c;那必然是要突出一方的优势。 以下是SQL的痛点以及SPL的优点&#xff1a; 1.SQL缺乏离散性&#xff0c;集合化不彻底&#xff1b;SPL离散与集合充分结…

如何删除 Docker 镜像、容器和卷?

Docker 是一款常用的容器化平台&#xff0c;通过 Docker 可以将应用程序打包成一个独立的容器&#xff0c;方便地在不同的环境中运行。随着 Docker 的广泛使用&#xff0c;删除 Docker 镜像、容器和卷的操作也变得非常重要。在本文中&#xff0c;我们将介绍如何删除 Docker 镜像…

Python消费Kafka与优化

一.背景与问题 之前使用kafka-python库进行消费数据处理业务逻辑&#xff0c;但是没有深入里面的一些细节&#xff0c;导致会遇到一些坑。正常普通我们常见的一个消费者代码:(假设topic的分区数是20个) from kafka import KafkaConsumerbootstrap_servers [localhost:9092] g…

vim命令大全,非常详细,强烈建议收藏!

Vim是一款常用的文本编辑器&#xff0c;具有强大的功能和高度的可定制性。在本文中&#xff0c;我们将详细介绍Vim的常用命令&#xff0c;并提供相关的示例。如果您是初学者或已经熟练使用Vim&#xff0c;这篇文章都能为您提供帮助。 基本命令 以下是一些基本的Vim命令&#x…