Linux traceroute 原理及使用

news2024/11/8 21:06:11

Linux traceroute 原理及使用

在某次接入数据的场景中,需要到对方 SFTP 服务器上,获取数据,但是在配置时发现在配置正确的情况下, 连接总是超时,最终排查后发现网络不通,打通网络后才正确连接,获取到数据。

那么,在 linux 中,我们有哪些排查网络互通的方法呢?本章节主要讲解 traceroute 的原理以及使用方法。

网络架构

这部分与网络架构强相关,需要了解网络层级结构:

请参考这里

traceroute 原理

tracerou``te 命令可以显示从本地到目标端的传输路径。在网络中,传递信息传输路径大体是一样的,对此 traceroute 通过发送不同的数据包,让经过的每个设备都返回当前节点的时间、名称、ip 地址,一直到终点。

数据包默认大小为 40 Bytes。


为了让经过的每个设备都返回信息,traceroute 设置 IP 数据包的 TTL 值来实现。可以理解为发送一个快递,如果在一段期限内没有送达,就请退还回来。

TTL Time to Live

一般指的是存活时间,但在这里特指还能通过几个设备。


traceroute 会首先发送 TTL=1 的 UDP 数据包,第一个设备将 TTL-1=0,就不再继续转发数据包,而是会返回一个 ICMP 的超时报文,报文中标示数据超时并附带当前 ip、名称信息。这样就得到了第一个设备的信息,traceroute 收到返回值后,继续发送 TTL=2 的数据包,直到尝试上限或者到达目的。

每个 TTL 默认会测试三次。

在这里插入图片描述


traceroute 协议

traceroute 默认为 UDP 协议数据包,但 UDP 由于只发送,无需连接,没有任何状态约束它,比较方便攻击者伪造源 IP、伪造目的端口发送任意长度的 UDP 包,长度自定义。所以一般会被大多数网站采用白名单的方式进行过滤。

除 UDP 以外,还可以使用 ICMP、TCP 协议进行测试。


traceroute 返回 ICMP 超时报文问题

拿到 TTL 的网关,并不是每个都会如实返回 ICMP 超时报文,这需要路由器设置。出于安全考虑,大多数防火墙以及开启了防火墙可能并不会返回对应 ICMP 超时报文。所以 traceroute 并不会因为某一次的超时报文缺失就停止发送请求,还会继续追踪到目标服务器的地址,一直到达到追踪上限,或者到目标服务器为止。


traceroute 参数

部分参数带有 <> 表示需要提供参数,下列表格列举了部分重要的参数,其余可以使用 man traceroute 进行查看:

man traceroute
参数释义
-ddebug 设置socket层级的日志为debug。
-f <n>first_ttl 设置第一个检测数据包的存活数值TTL的大小。默认为1,代表第一次TTL的数值。
-m <n>max_ttl 设置检测数据包的最大存活数值TTL的大小。默认为30,代表最多可以将TTL从最小测试到30。
-g\ <ip>gateway 设置来源路由网关,最多可设置8个。
-I <name>指定使用哪个网络设备进行传输,如 eth0。
-I使用ICMP协议进行传输,如果不指定为UDP。
-T使用TCP协议进行传输,如果不指定为UDP。
-w <n>waittime 设置等待远端主机回复报文的时间。默认为5,代表等待5秒
-p <port>port 设置UDP传输协议的通信端口。
-r忽略普通的RoutingTable,直接将数据包送到远端主机上。
-s <ip>设置本地主机送出数据包的IP地址。
-t <n>设置检测数据包的TOS数值。
-v详细显示指令的执行过程。
-n直接使用IP地址而非主机名称作为返回。
-x开启或关闭数据包的正确性检验。
-F设置勿离断位。

举例

使用 eth0 网卡、ICMP 协议测试发送到网址 www.huangyichun.com 之间的路由:

traceroute -I www.huangyichun.com -i eth0 -n

在这里插入图片描述

可以看到,优先解析了对应网址的 ip 地址,DNS 解析可以跳转在这里:

Linux DNS 解析与配置

获得 ip 地址后,就开始进行 TTL 包的发送。前 5 个都返回了 ICMP 超时报文,6/7/11/12/13 都没有能返回,也就是我们之前说的可能由于对应配置或者防火墙关系。总共进行了 15 次,就到达我们的目标服务器,停止了整个程序。

如果切换为其他协议如 UDP:

traceroute www.huangyichun.com -i eth0

在这里插入图片描述

可以看到就算 30 跳用完,也未能到达我们的目标服务器,而且从第二跳开始就有不同的分叉路,不同的协议会有不同的结果。(也有可能中间被防火墙阻止了 ICMP 回传)

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

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

相关文章

【C++】函数重载

函数重载1.函数重载的背景2.函数重载的概念2.1参数类型不同的重载2.2参数个数不同的重载2.3参数类型顺序不同的重载2.4注意事项&#xff1a;仅仅是返回值不同无法构成函数重载3.C函数重载的原理---函数名字修饰4.函数重载总结1.函数重载的背景 在C语言中&#xff0c;我们写一个…

通信原理 | 基本概念

1 通信及通信系统 通信(Communication)是实现信息和消息传输的过程 通信系统(Communication System)的组成: 实现通信的所有硬件和软件设备、传输媒介以及各种通信协议等 消息(Message)、信息(Information)、信号(Signal)的区别: 消息通常指人的感官能够感受到的…

无刷电机高压与低压的选择与未来发展前景

近几年来&#xff0c;伴随无刷马达被戴森吸尘器全力以赴运用在家用电器上&#xff0c;颠覆了传统家电的3个产品运用场景&#xff0c;吹风筒就是这样的一个例子。 迅速风筒由于其加工工艺的创新能力&#xff0c;给大家增添了不一般的产品体验度。新型的迅速风筒&#xff0c;搭配…

2023我的前端面试小结

对事件委托的理解 &#xff08;1&#xff09;事件委托的概念 事件委托本质上是利用了浏览器事件冒泡的机制。因为事件在冒泡过程中会上传到父节点&#xff0c;父节点可以通过事件对象获取到目标节点&#xff0c;因此可以把子节点的监听函数定义在父节点上&#xff0c;由父节点…

Elasticsearch:利用搜索提高医疗保健公平 - 用多语言 NLP 模型和分析来改善最终用户体验

随着更高生产力和更健康的人群寿命更长&#xff0c;医疗保健将成为社会最重要的方面之一。 COVID-19 大流行加速了现代技术的采用&#xff0c;并凸显了患者体验的重要性。 随着越来越多的消费者开始控制他们的数据&#xff0c;医疗保健系统变得捉襟见肘。 根据德勤和斯科茨代尔…

【High 翻天】Higer-order Networks with Battiston Federico (5)

目录扩散高阶扩散题外话高阶随机游走扩散 在给出建模之后&#xff0c;接下来讨论如何将传统意义下的扩散拓展到高阶系统。扩散是一个线性过程&#xff0c;但在许多不同的情况下都有强相关性。扩散这个词实际可指代两个不同的过程&#xff1a; 标准的扩散过程&#xff0c;或者…

课题-基于安卓androidstudio的校园外卖app

一、课题介绍 客户端&#xff1a; 1&#xff1a;登录注册&#xff1a;用户可以通过自己的信息进行账号的注册 2&#xff1a;商家搜索&#xff1a;可以对商家的信息进行模糊搜索 3&#xff1a;查看菜单&#xff1a;点击商家可以查看具体的菜单信息 4&#xff1a;添加购物车&…

SAP FICO 财务月结--自动清账

一、基本概念 清账是会计科目的借贷挂账后的核销&#xff0c;其中包括客户、供应商以及实行未清账管理的总账科目等。 客户和供应商的清账通常会在收款或者付款的时候同时完成&#xff0c;也就是边收边清或者边付边清&#xff0c;也可以后续手工清账&#xff08;客户F-32&…

人脸清晰化神器codeFormer图形界面包GUI

1. codeFormer介绍 在NeurIPS 2022上&#xff0c;南洋理工大学-商汤科技联合研究中心S-Lab提出了一种基于VQGANTransformer的人脸复原模型CodeFormer&#xff0c;效果是真的强大&#xff0c;先展示下效果&#xff0c;用的官方案例效果图。 官方给出的代码见这里 传送门 2. 图…

Python数组存储方式与向量化、按行按列展平/展开

文章目录1 逻辑存储与内存存储1.1 高维张量1.2 按行展开和按列展开2 矩阵向量化、按行按列展开2.1 numpy中&#xff1a;numpy.ravel()ndarray.flatten()2.2 Pytorch中&#xff1a;3 pytoch中的view&#xff0c;reshape&#xff0c;permute对比3.1 view3.2 reshape3.3 permute链…

Redis缓存雪崩缓存击穿缓存穿透

Redis缓存雪崩&缓存击穿&缓存穿透一 缓存更新策略二 缓存雪崩三 缓存击穿四 缓存穿透一 缓存更新策略 目前redis缓存更新存在3种主流策略&#xff0c;分别是&#xff1a;内存淘汰、超时剔除、主动更新。 1、内存淘汰 LRU/LFU/FIFO算法剔除&#xff1a;例如maxmemory-…

【云原生进阶之容器】第二章Controller Manager原理2.4节--Informer机制剖析

1 Informer机制剖析 如上图所示,client-go 包中一个非常核心的工具就是 informer,informer 可以让与 kube-apiserver 的交互更加优雅。 Informer的主要作用包括如下两个方面: 同步数据到本地缓存。Informer 会不断读取 Delta FIFO 队列中的 Object,在触发事件回调之…

MySQL8.0锁情况排查

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a; 杨延昭文章来源&#xff1a;GreatSQL社区投稿 在数据库中&#xff0c;除传统的计算资源(CPU、RAM、IO)的争用…

【C语言】-关于指针的知识你真的都知道了??快进来看看这里面的指针会让你眼前一亮

&#x1f387;作者&#xff1a;小树苗渴望变成参天大树 &#x1f38a;作者宣言&#xff1a;认真写好每一篇博客 &#x1f389; 作者gitee:link 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; 指针进阶&#x1f4a6;前言&#x1f496;一、…

MYSQL 数据行列交换(交换数据) 存储过程实现

行列转换的存储过程 初始图&#xff1a; 效果图&#xff1a; 实现过程&#xff1a; 1&#xff1a;建表、建数据 CREATE TABLE changeprice ( id bigint(20) NOT NULL auto_increment, sid bigint(20) NOT NULL, datecreated timestamp NOT NULL defaultCURRENT_TIMESTAMP…

nvue2中使用axios和插槽

一、组件的生命周期1、组件的生命周期经历的阶段&#xff1a;&#xff08;1&#xff09;创建阶段&#xff1a;beforeCreate、created、beforeMount、mounted&#xff08;2&#xff09;运行阶段&#xff1a;beforeUpdate、update&#xff08;3&#xff09;销毁阶段&#xff1a;2…

C语言二维数组和二重指针详解

二维数组 一个二维数组&#xff0c;在本质上&#xff0c;是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组&#xff0c;形式如下&#xff1a; type arrayName [x][y]; 这个表示&#xff0c;有x个一维数组&#xff0c;每个一维数组的元素个数是y个。 声明示例&#xff1…

手写VITE-MockJS插件

mockJS是什么 mockJS是模拟接口数据&#xff0c;拦截客户端的请求的一个工具。 vite插件编写流程 pnpm init 初始化 pnpm install vite -D 安装Vite 配置package.json文件中的脚本 "scripts": {"dev": "vite","build": "vite…

K8s集群离线安装-kubeadm-详细篇

1、部署k8s的两种方式&#xff1a;kubeadm 和二进制源码安装 #本次实验采用的部署Kubernetes方式&#xff1a; kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。2、环境准备 #服务器要求&#xff1a; 建…

JavaSE学习day1_02, JDK安装

1.4 环境变量 1.4.1 为什么配置环境变量 在初次学习编程的时候,环境变量我们经常提到,但是环境变量到底是什么?是干嘛的?弄清楚这些问题很重要. 如果我们想要在CMD的任意路径下都可以打开任意的软件&#xff0c;那么就需要把软件的路径配置到环境变量当中。 为了便于大家…