一个比 ping 更强大、更牛逼的命令行工具

news2024/11/20 13:25:35

晚上好,我的网工朋友。

遇到网络故障的时候,你一般会最先使用哪条命令进行排障?

基本上大家第一个想到的都是Ping吧。

但除了Ping,还有Traceroute、Show、Telnet又或是Clear、Debug等等好用命令,你都用过吗?

今天给你安排一个Traceroute命令详解,不仅有原理解读,还有命令格式使用说明,最后还给你附了俩经典排障案例哈。

今日文章阅读福利:《网络排障好用工具合辑》

搭配这篇排障命令,顺便给你分享一些排障的好用工具。私信我,发送暗号“排障”,即可领取全部工具。

01 Traceroute 原理和功能

traceroute是一个常用的Linux网络诊断命令,用于追踪数据包从源主机到目标主机的路径。

它可以帮助确定网络中的延迟和丢包问题。

当发送一个数据包时,TTL的值被设置为1,数据包被送到网络上。

当数据包到达安防个路由器时,路由器会删除TTL值并将数据包发送到下一个路由器。

这个过程一直重复,直到数据包到达目标主机。

如果数据包没有到达目标主机,目标主机将发回ICMPtimeexceeded消息,以此来指示从数据包到达目标过程中经过了多少个路由器。

traceroute命令通过不断发送数据包并递增TTL的值,来确定到达目标主机前所经过的路由器数量。

Traceroute 命令用于测试数据报文从发送主机到目的地所经过的网关。

主要用于检查网络连接是否可达,以及分析网络什么地方发生了故障。

02 命令格式

traceroute 命令使用方式也非常简单,具体的命令格式可以参考如下:

traceroute [参数] [主机]

参数含义:

traceroute 命令格式已经了解了,那么其中的参数都支持哪些设置呢?接下来具体看一下。

-d #使用 Socket 层级的排错功能。
-f #设置第一个检测数据包的存活数值 TTL 的大小。
-F #设置勿离断位。
-g #设置来源路由网关,最多可设置 8 个。
-i #使用指定的网络界面送出数据包。
-I #使用 ICMP 回应取代 UDP 资料信息。
-m #设置检测数据包的最大存活数值 TTL 的大小。
-n #直接使用 IP 地址而非主机名称。
-p #设置 UDP 传输协议的通信端口。
-r #忽略普通的 Routing Table,直接将数据包送到远端主机上。
-s #设置本地主机送出数据包的 IP 地址。
-t #设置检测数据包的 TOS 数值。
-v #详细显示指令的执行过程。
-w #设置等待远端主机回报的时间。
-x #开启或关闭数据包的正确性检验。

03 详细的使用举例

01 配置等待时间

traceroute 中的默认等待时间为3秒,要修改这个时间,可以使用 -w 选项。

比如,我们将等待时间改为 1 秒:

traceroute -w 1 http://google.com

02 更改收发包的数量

默认情况下,traceroute 为一个跃点(hop)发送3个包,如果想更改此行为,可使用 -q 选项。

比如,我们我们将其改为4个数据包:

traceroute -q 4 http://google.com

03 指定最大跃点数

在traceroute中,单个查询的默认最大跳数为30,可以扩展到255。

使用 -m 选项:

traceroute -m 4 http://google.com

04 指定 TTL

默认情况下,traceroute 将以第一个 TTL 开始,但您可以使用 -f 选项更改此行为。

如下例子,我们从第5个TTL开始跟踪 google:

traceroute -f 5 http://google.com

05 添加备用源IP地址

使用-s 选项添加备用 IP 地址:

traceroute -s 192.168.1.7 http://google.com

06 跟踪时禁用主机名映射到IP地址

如果出于某种原因希望在跟踪时禁用主机名映射,可以使用 -n 选项:

traceroute -n http://google.com

07 通过网关路由包

可以在要跟踪路由的域时,使用 -g 选项指定网关地址。比如,我们添加 192.168.1.7 作为网关地址:

traceroute -g 192.168.1.7 http://google.com

08 更改目标端口

可以使用 -p 来指定要跟踪的目标端口:

traceroute -p 29879 http://google.com

09 设置最大数据包长度

默认情况下,traceroute 跟踪的数据包长度为 60 字节(bytes),可以在目标地址后跟一个数字(即包大小)来修改:

traceroute http://google.com

10 禁用探测数据包碎片(probe packet fragmentation)

如果你不想允许探测数据包碎片化,有一种简单的方法来实现这个目的,使用 -F 选项:

traceroute -F http://google.com

04 故障排除案例

排障案例① 使用Traceroute命令定位不当的网络配置点

1、现象描述:

组网情况如下图所示:

某校园网中,RouterB和RouterC同属于一个运行RIPv2路由协议的网络,主机4.0.0.2访问数据库服务器5.0.0.2,用户抱怨访问性能差。

2、相关信息:

在主机上ping 5.0.0.2显示如下:

C:\Documents and Settings\c>ping -n 10 -l 1000 5.0.0.2  
  
Pinging 5.0.0.2 with 1000 bytes of data:  
Reply from 5.0.0.2: bytes=1000 time=552ms TTL=250  
Reply from 5.0.0.2: bytes=1000 time=5735ms TTL=250  
Reply from 5.0.0.2: bytes=1000 time=551ms TTL=250  
Reply from 5.0.0.2: bytes=1000 time=5734ms TTL=250  
Reply from 5.0.0.2: bytes=1000 time=549ms TTL=250  
Reply from 5.0.0.2: bytes=1000 time=5634ms TTL=250  
Reply from 5.0.0.2: bytes=1000 time=555ms TTL=250  
Reply from 5.0.0.2: bytes=1000 time=5738ms TTL=250  
Reply from 5.0.0.2: bytes=1000 time=455ms TTL=250  
Reply from 5.0.0.2: bytes=1000 time=5811ms TTL=250

3、原因分析

上面的Ping显示出一个规律,奇数报文的返回时长短,而偶数报文返回时长很长(是奇数报文的10倍多)。

可以初步判断奇数报文和偶数报文是通过不同的路径传输的。

现在我们需要使用Traceroute命令来追踪这不同的路径。

在RouterC上,Traceroute远端RouterA的以太网接口5.0.0.1。

RouterC(config)#traceroute  

 Target IP address or host: 5.0.0.1  
Maximum number of hops to search for target [30]:10  
Repeat count for each echo[3]:8  
Wait timeout milliseconds for each reply [2000]:  
  
Type esc/CTRL^c/CTRL^z/q to abort.  
traceroute 5.0.0.1 ......  
1    6 ms  4 ms  4 ms  4 ms  4 ms  4 ms  4 ms  4 ms   4.0.0.1  
  。。。。。。(中间省略)  
5  20 ms  16 ms  15 ms  16 ms  16 ms  16 ms  16 ms  16 ms  3.0.0.2  
6  30 ms  278 ms  25 ms  279 ms  25 ms  278 ms  25 ms  277 ms  5.0.0.1  
RouterC(config)#

从上面的显示可看到,直至3.0.0.2,UDP探测报文的返回时长都基本一。

而到5.0.0.1时,则发生明显变化,呈现奇数报文时长短,偶数报文时长长的现象。

于是判断,问题发生在RouterB和RouterA之间。

通过询问该段网络的管理员,得知这两路由器间有一主一备两串行链路,主链路为2.048Mbps(s0口之间),备份链路为128Kbps(s1口之间)。

网络管理员在此两路由器间配置了静态路由。

RouterB上如下配置:

RouterB(config)# ip route 5.0.0.0 255.0.0.0 1.0.0.2  
RouterB(config)# ip route 5.0.0.0 255.0.0.0 2.0.0.2

RouterA上如下配置:

outerA(config)# ip route 0.0.0.0 0.0.0.0 1.0.0.1  
RouterA(config)# ip route 0.0.0.0 0.0.0.0 2.0.0.1

于是问题就清楚了。

例如RouterB,由于管理员配置时没有给出静态路由的优先级,这两条路由项的管理距离就同为缺省值1。

然后就同时出现在路由表中,实现的是负载分担,而不能达到主备的目的。

4、处理过程

可以有两种处理方法。

一个是,继续使用静态路由,进行配置更改 RouterB上进行如下更改:

RouterB(config)# ip route 5.0.0.0 255.0.0.0 1.0.0.2 (主链路仍使用缺省1)

RouterB(config)# ip route 5.0.0.0 255.0.0.0 2.0.0.2 100(备份链路的降低至100)

RouterA上进行如下更改:

RouterA(config)# ip route 0.0.0.0 0.0.0.0 1.0.0.1  

RouterA(config)# ip route 0.0.0.0 0.0.0.0 2.0.0.1 100

这样,只有当主链路发生故障,备份链路的路由项才会出线在路由表中,从而接替主链路完成报文转发,实现主备目的。

第二个是,在两路由器上运行动态路由协议,如OSPF,但不要运行RIP协议(因为RIP协议是仅以hop作为Metric的)。

5、建议和总结

本案例的目的不是为了解释网络配置问题,而是用来展示Ping命令和Traceroute命令的相互配合来找到网络问题的发生点。

尤其在一个大的组网环境中,维护人员可能无法沿着路径逐机排查,此时,能够迅速定位出发生问题的线路或路由器就非常重要了。

排障案例② 使用Traceroute命令发现路由环路

1、现象描述

组网情况如下图所示:

三台路由器均配置静态路由,完成后,登录到RouterA上Ping主机4.0.0.2,发现不通。

2、相关信息

RouterA# ping  4.0.0.2  

Sending 5, 100-byte ICMP Echos to 4.0.0.2,  
timeout is 2000 milliseconds.  
.....  
  
Success rate is 0 percent (0/5)  
RouterA# traceroute 4.0.0.2  
 Type esc/CTRL^c/CTRL^z/q to abort.  
traceroute 4.0.0.2 ......  
1  6 ms  4 ms  4 ms   1.0.0.1(RouterB)  
 2  8 ms  8 ms  8 ms   1.0.0.2(RouterA)  
 3  12 ms  12 ms  12 ms 1.0.0.1(RouterB)  
 4  16 ms  16 ms  16 ms 1.0.0.2(RouterA)  
 。。。。。。

3、原因分析

从上面的Traceroute命令的显示可以立即发现,在RouterA和RouterB间产生了路由环路。

由于是配置的是静态路由,基本可以断定是RouterA或RouterB的静态路由配置错误。检查RouterA的路由表,配置的是缺省静态路由:ip route 0.0.0.0 0.0.0.0 1.0.0.1,没有问题。

检查RouterB的路由表,配置到4.0.0.0网络的静态路由为:ip route 4.0.0.0 255.0.0.0 1.0.0.2――下一跳配置的是1.0.0.2,而不是3.0.0.1。

这正是错误所在。

4、处理过程

修改RouterB的配置如下:

RouterB(config)# no ip route 4.0.0.0 255.0.0.0 1.0.0.2  

RouterB(config)# ip route 4.0.0.0 255.0.0.0 3.0.0.1

故障排除。

5、建议和总结

Traceroute命令能够很容易发现路由环路等潜在问题。

当路由器A认为路由器B知道到达目的地的路径,而路由器B也认为路由器A知道目的地时,就是路由环路发生了。

使用Ping命令只能知道接收端出现超时错误,而Traceroute能够立即发现环路所在――如果Traceroute命令两次或者多次显示同样的接口。

当通过Traceroute发现路由环路后,如果配置为:

  • 静态路由:几乎可以肯定是手工配置有问题,如本案例所示。
  • OSPF协议:可能是地址聚合产生的问题。
  • 多路由协议:可能是路由引入产生的问题。

整理:老杨丨10年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

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

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

相关文章

MD5 绕过第二式:数组绕过

文章目录 参考环境强类型比较运算符雾来哈希碰撞目标 王小云院士与白宫密码王小云院士两度破译白宫密码白宫密码亮剑十年磨一剑 雾散曲径通幽WarrningPHP 中的数组与 md5()尝试绕过PHP8 下的致命错误 参考 项目描述搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯飞星火…

正点原子lwIP学习笔记——Jperf测试网速

1. Jperf与iperf简介 iperf是命令行形式的网络性能测试工具;而Jperf就是在iperf的基础上进行UI开发,搭建了界面的图形化网络性能测试工具。 是用来测试TCP/UDP的带宽、延迟抖动和数据包丢失等功能! iperf -c server -ip -p server-port -i 1…

解决GC毛刺问题——转转搜索推荐服务JDK17升级实践

解决GC毛刺问题——转转搜索推荐服务JDK17升级实践 1 升级背景2 JDK17简介2.1 新语法简介2.2 新GC算法简介 3 升级过程3.1 升级步骤3.2 遇到问题及解决方法 4 升级效果4.1 整体耗时对比4.2 分节点耗时对比4.3 GC停顿时长对比4.4 堆空间占用对比 5 总结 1 升级背景 随着转转业务…

HTTPS协议概述

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer,基于安全套接字层的超文本传输协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,…

C语言入门Day_26 结构体

目录 前言: 1.结构体的定义 2.结构体的使用 3.易错点 4.思维导图 前言: 变量只能表示单一的属性,比如用int去表示一个年龄,用float去表示一个身高或一个体重,一个字符串/字符数组去表示一个性别或一个名字。 …

2023年腾讯云服务器优惠活动整理汇总

腾讯云是腾讯集团倾力打造的云计算品牌,为了吸引更多的用户,腾讯云经常会推出各种各样的优惠活动。本文将为大家整理汇总一些腾讯云服务器的优惠活动,希望能够帮助到需要购买腾讯云服务器的用户。 一、腾讯云服务器优惠券 腾讯云优惠券是腾讯…

创建型设计模式——工厂模式

摘要 本博文主要介绍软件设计模式中工厂模式,其中工厂设计模式的扩展为简单工厂(Simple Factory)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)三种。 一、简单工厂(Simple Factory) 主要分析设计模式 - 简单工厂(Simple Factory),它把实例…

腾讯大牛耗时1个月整理的“JVM学习笔记“深入底层,面面俱到!

为什么要学习JVM? 1、 程序调优2、 排查程序运行问题3、 掌握了程序执行的根本和原理4、 规避写代码时候的一些错误5、 应付面试6、 掌握了其他语言的通用机制 怎么有效的学习JVM? 以上了解了学习JVM的种种好处,但是怎么有效的学习JVM呢&a…

029-从零搭建微服务-消息队列(一)

写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

1992-2021年省市县经过矫正的夜间灯光数据(GNLD、VIIRS)

1992-2021年省市县经过矫正的夜间灯光数据(GNLD、VIIRS) 1、时间:1992-2021年3月,其中1992-2013年为年度数据,2013-2021年3月为月度数据 2、来源:1992-2013年来源于DMSP、2013-2021年3月来自VIIRS 3、范…

spring AOP源码阅读分析

理论知识 AOP是面向切面编程(Aspect Oriented Programming)的意思。定义一些切点(pointcut),然后可以在切点织入一些通知(advice),对切点方法进行代理增强,与核心业务逻辑分离开来,以提高系统的可维护性、可扩展性和重…

网工内推 | 网络工程师,软考证书优先,六险一金,包吃

01 科力信息 招聘岗位:网络工程师 职责描述: 1、负责蚌埠项目的设备安装及调试; 2、对边界网络运行中的监控、故障排除、问题处理。 任职要求: 1、2年及以上网络相关工作经验,有交通管理网络运维经验优先&#xff1b…

【移动端测试工具】Appium自动化测试工具安装与配置

文章目录 一、JAVA环境配置检查是否已安装java jdk 二、android SDK安装1.下载android sdk压缩包2.解压压缩包3.安装SDK Manager4.sdk环境变量配置5.验证sdk是否安装成功 三、node JS安装1.下载node.js安装包2.安装node.js3.环境配置4.测试完成验证5.安装淘宝镜像并检验是否安装…

Android MeasureSpec测量规格

文章目录 Android MeasureSpec测量规格概述MeasureSpec组成常用APIMeasureSpec源码分析getChildMeasureSpec源码分析总结 Android MeasureSpec测量规格 概述 MeasureSpec指View的测量规格,MeasureSpec是View的一个静态内部类。 View的MeasureSpec是根据自身的布局…

SoloX:Android和iOS性能数据的实时采集工具

SoloX:Android和iOS性能数据的实时采集工具 github地址:https://github.com/smart-test-ti/SoloX 最新版本:V2.7.6 一、SoloX简介 SoloX是开源的Android/iOS性能数据的实时采集工具,目前主要功能特点: 无需ROOT/越狱…

Java调用操作系统命令的输出乱码问题解决

本篇解决的问题 使用Java 的Runtime调用操作系统的命令,出现异常时使用getErrorStream()获取错误信息的字节流,转换该字节流为字符串显示时,出现乱码。 Java调用操作系统命令 这里以Windows 操作系统为例, 调用cd 命令切换路径…

SAP 销售订单审批状态参数设置

定义权限码 BS52 Spro->控制->内部订单->订单主数据->状态管理->定义状态管理授权码 创建状态参数文件 BS02 SPRO->销售与分销->销售->销售凭证->定义并分配状态参数文件->定义状态参数文件 1)命名,描述 设置对象类型:销…

记录一个iOS UITableView 正在刷新的时候修改数据源导致的崩溃

首先看一下崩溃堆栈信息 由于tableview 调用layoutsubViews 执行到代理方法 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 由于是崩溃在系统方法里面的,我们无法直接看到是因为调用哪个方法导致的崩溃 后来…

秦时明月沧海手游礼包码,秦时明月沧海兑换码

在玩《秦时明月沧海》手游时,你可能会遭到礼包码的诱惑。如果你还没找到可用的兑换码,这里有一些可供使用的礼包码,赶快领取吧! 关注【娱乐天梯】,获取内部福利号 1. 礼包码:QIN0809 包含:金镒…

面试打底稿⑤ 项目一的第一部分

简历原文 抽查部分 项目描述 该项目旨在服务广州地区的快递物流,实现了下单、快递员取派件、订单转运单、线路规划、网点设置等功能。 责任描述 登录系统优化,双token三验证模式实现设置token状态、提高登录安全性的效果 模拟问答 1.能简单介绍一下…