百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

“怎么没网?Ping一下就好了!”您的Ping命令真的用对了吗?

nanshan 2024-10-18 07:28 19 浏览 0 评论

在对以太网网络上的通信问题进行故障排除时,Ping命令是最广泛使用的诊断工具之一。这种受欢迎程度是因为每个人都知道如何使用命令,执行起来非常简单。

在对通信问题进行故障排除时,我们在无法正常工作时听到的最常见的一句话是“但我可以ping通”,就好像这一点应该作为确切的证据,证明一切都按预期工作,通信服务器选择不通信。

本文介绍了一些关于Ping命令的常见误解,特别是如何有效地使用它,什么时候它可能不是任务的最佳工具,以及Ping的更好的替代方案(提供实际上可操作的数据)。

什么是Ping命令?

在命令提示符下键入ping 1.1.1.1会发生什么?

Ping旨在告诉用户主机是否可以在IP网络上访问,并通过发送ICMP(Internet控制消息协议)回应请求来执行此操作,远程主机(我们正在ping的IP地址)将在收到时回显。

虽然这无疑是有用的,但Ping命令在它告诉我们的内容中也非常有限,因为ICMP位于IP协议之上(毕竟它是Internet控制消息协议)并且不需要像TCP或UDP这样的传输协议。

为什么这很重要?

在Internet协议描述主机之间的通信的地方,传输协议(如TCP或UDP)描述了在这些主机上运行的进程之间的通信。如果没有传输层,Ping命令将永远无法向我们提供有关远程主机的信息:

  • 正在监听连接
  • 有一个开放的接口
  • 将接受我们流程的连接
  • 甚至是我们想要与之沟通的合适主机

Ping命令只会告诉我们主机响应指定IP地址的echo请求。

因此,Ping命令的缺点可以概括为命令根本没有给我们足够的信息来巧妙地得出控制器或网络节点不通信的原因。那么,Ping命令的哪些替代方案在这种情况下值得考虑?

什么是Tracert命令?

Tracert命令在很大程度上起到与Ping命令相同的作用,并且只应用于确定在指定的IP地址处是否存在响应的内容,仅此而已。

如果您正在ping同一子网上的设备,则Tracert和Ping将执行完全相同的操作。当ping不在同一子网或网络上的主机时,会发现Tracert的强大功能,因为它不仅会显示终端设备是否响应,还会显示到达该远程主机的路由路径。

如果Tracert在路径中的任何特定点发生故障,则很容易识别通信中断的特定位置。

Tracert通过发送与ping相同的ICMP Echo请求来完成此操作,但它使用“Time To Live”字段来控制消息可以跳转的距离。第一个数据包以TTL为1发送,路径中的第一个跳转将减少为0,并以“Time to live exceeded in transit/运行中的超时时间”响应,这有助于我们的机器现在知道第一个跳转的IP地址路由路径。

然后以TTL为2发送第二个回应请求,以便消息可以在超时之前到达路径中的第二跳。然后是3的TTL,4的TTL,依此类推,直到我们得到Echo响应,并且我们知道'ping'数据包已经到达我们试图到达的目标节点。

就像ping一样,Tracert结果告诉我们在远程主机上是否有运行的应用程序/固件/通信模块能够与我们通信 - 只是远程主机支持IP并且可以访问。

因此,我们现在已经确定,在许多情况下,Ping和Tracert命令在解决通信问题的有效性方面基本相同。我们还能尝试什么?

什么是Portqry实用程序?

如果Ping命令没有给我们任何可操作的数据,并且Tracert命令没有给我们任何可操作的数据, 我们如何得到一些我们可以用来确定设备是否正在监听连接以及通信问题可能是什么是?这个问题将我们带到PortQryUI--一个可从Microsoft下载的实用工具。

虽然它没有预先安装Windows,但PortQryUI是一个非常轻量级的实用程序,不仅可用于识别主机是否可访问,还可用于确定在该主机上运行的进程是否可访问和/或是否愿意接受连接。

知道1.1.1.1是DNS服务器,正如我们之前建立的那样,让我们??针对DNS端口53运行Portqry。

我们可以看到,首先,Portqry尝试在使用TCP和UDP查询端口之前将IP地址解析为DNS主机名(在此处成功完成 - “one.one.one.one”),并且因为实用程序知道53是DNS端口,它也向端口发送DNS查询。

Portqry有三种可能的结果:

  1. 正在监听 - 该实用程序得到了端口的积极回应
  2. 不监听 - 该实用程序收到了端口的回复,告诉我们要离开
  3. 已过滤 - 该实用程序未收到来自端口的任何响应,无论是正面还是负面

现在让我们在实验室中使用本地Modbus PLC进行尝试,我们知道这可以通过端口502(默认的Modbus端口)看到连接请求。

这次我扫描一系列端口502-503,仍然要求检查TCP和UDP。

结果并不令人惊讶; 主机名称解析失败,因为它只是一个PLC(虽然它没有超出PLC分配DNS名称的可能性的范围,大多数不是),并且查询结果确实显示有一个进程在端口502上侦听传入的TCP连接。

现在,显然,我们实验室中的Modbus PLC没有任何通信问题。但是,您现在可以想象,当Portqry实用程序以“Not Listening”或“Filtered”响应端口和传输时,对于无响应的设备有多么有用,我们希望在正常通信情况下能够得到肯定的响应。

但是,如果我们从Portqry得到积极响应但仍然没有成功通信,我们还能做些什么呢?

什么是Netstat?

虽然Netstat命令不提供远程设备接受连接的能力的信息,或者远程主机是否可以在网络上访问,但在查看本地计算机上的套接字状态时,它是非常宝贵的资源。

运行简单的netstat枚举本地套接字信息,显示本地和远程地址,套接字状态以及与该主题关联的进程ID(在想要跟踪哪个应用程序正在使用端口时特别有用)。在对PLC的连接问题进行故障排除时,套接字状态将是最有用的列,因为它可以深入了解发生问题的连接顺序。过滤后(使用FIND)可以轻松过滤任何关键字的Netstat列表; 包括IP地址和端口:

在解释Socket状态时,至少在一般情况下 - 理解TCP状态图以查看错误发生在连接序列中的哪个位置。毫无疑问,这是有用的,只是触及netstat能够表达的表面,建议运行netstat /?查看所有可用选项。

什么是Wireshark?

如果所有其他方法都失败了,并且上面的工具显示一切都应该工作,那么Wireshark就是我们的首选诊断工具。Wireshark将捕获网卡上的所有流量,并将向我们显示目标设备与我们的计算机之间究竟发生了什么。

因此,虽然Ping命令肯定有其作为一个非常基本的故障排除工具,但它不应该被误认为是一个完成所有工作的工具。

点击“了解更多”下载产品最新试用版

↓↓↓

相关推荐

0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)

文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...

ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes

为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...

生产环境starrocks 3.1存算一体集群部署

集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...

在CentOS上添加swap虚拟内存并设置优先级

现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...

国产深度(deepin)操作系统优化指南

1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...

postgresql-15.4 多节点主从(读写分离)

1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...

Docker 容器 Java 服务内存与 GC 优化实施方案

一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...

虚拟内存设置、解决linux内存不够问题

虚拟内存设置(解决linux内存不够情况)背景介绍  Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...

Elasticsearch性能调优(5):服务器配置选择

在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...

Es如何落地

一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...

针对Linux内存管理知识学习总结

现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...

MySQL进阶之性能优化

概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...

Linux Cgroups(Control Groups)原理

LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...

linux 常用性能优化参数及理解

1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...

如何在 Linux 中使用 Sysctl 命令?

sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

取消回复欢迎 发表评论: