[转]Traceroute网络排障实用指南(1)
注:本文是同事的大作,虽是翻译的一篇英文PPT,但内容实在精彩,小小的Traceroute竟包含如此大的信息量,真是让人感慨!内容不涉及公司机密,所以一直想转到自己的Blog上来,自己需要时可以再翻阅学习。
-----------------------------------------------------
原文Created and last modified by tanzh on 十月 14, 2014
本人网络知识比较欠缺,最近就在网上游逛,学习网络知识,机缘巧合找到一个思路很广的PPT,于是就将其翻译改写,查找相关资料,加入自己学习过程中的理解和实验,分享给大家,共同学习,共同进步。
一、概述
1.1 什么是Traceroute
当遇到网络问题,通常会用Traceroute去排查,但Traceroute是什么?
根据百度百科定义,Traceroute是一种电脑网络工具,它可显示数据包在IP网络经过的路由器的IP地址。
Traceroute有三大特点:
跨平台。Traceroute工具存在与各个操作系统平台,包括主流系统MAC OS、Windows、Linux、Android、IOS等;
使用方便。只要在Traceroute后输入IP或域名即可;
信息全面。Traceroute能够显示跳数、丢包情况、延时等信息。
但使用Traceroute并根据路由跟踪情况就能排查出问题?答案是否定的。
1.2 Traceroute的问题所在
使用Traceroute并根据路由跟踪情况也不能排查出问题,到底是怎么回事?
现代商业网络运行情况良好。低级的问题如拥塞、环路,在实际问题中占非常低的概率;更多的问题是非常复杂以至于只靠单纯的Traceroute已无法准确排查;
很少人是真正的理解Traceroute并且利用其分析问题。大部分ISP NOC甚至是专业的网络工程师也难以解释一个复杂的路由;有非常多的误判报告充斥着世界各地NOC;高误判率导致几乎无法从这些报告中判断出真正最根本的网络问题。
二、Traceroute原理
2.1 Traceroute实现原理
从SRC发出一个探测包到DST,并将TTL设置为1;
每一跳TTL将会减一;
当TTL变为0时,包被丢弃,路由器向SRC发回一个ICMP TTL Exceed包;
当SRC收到该ICMP包时,显示这一跳信息;
重复1~5,并每次TTL加1;
直至DST收到探测数据包,并返回ICMP Dest Unreachable包;
当SRC收到ICMP Dest Unreachable包时停止traceroute。
2.2 Traceroute实现细节
传统UNIX系统使用UDP包进行探测,目标端口号为33434,每次探测目标端口号增加1;Windows的tracert.exe和MTR则使用ICMP Echo Request包探测;
如果DST没有返回ICMP Dest Unreachable包则不能探测到DST。这是会发生在某些情况下,如DST前有防火墙,或者DST进行了配置,或者是DST上有一个真实的应用在监听该端口;
通过设置UDP/TCP/ICMP包中的CLI标识位都能够实现Traceroute,一般来说,不推荐使用TCP包,因为通常会被过滤掉;
不同的实现方式通常都会向每跳发送多个探测包,典型的Traceroute默认发送3个探测包,如果没有收到那一跳的回应,延时数据将会输出3个*号;MTR会循环发送无数个探测包;
每个探测包都有唯一的标识号,使得Traceroute能够识别返回的包,UDP/TCP使用递增的目标端口号进行标识,ICMP使用seq #;
由于4层哈希能使每个探测包走不同的路由,对于Traceroute来说,在三层的等价多路径(ECMP)下可见,在二层的聚合链路LAG下不可见;
虽然探测包走不同路径引起不同的结果,但TTL还是相同的。
2.3 Traceroute延时计算
在探测包发出时打上时间戳;
当收到ICMP响应时打上时间戳;
根据两个时间戳计算往返时间;
注:延时计算的是包的往返时间,但Traceroute显示的是去的路径上所经过的路由,在包返回过程中产生的时延也会影响你的测试结果。
2.4 每一跳产生原理
SRC发送TTL为1的包给Router 1;
Router 1收到包后将TTL减1,Router 1发现TTL=0后,丢弃该包,不再转发,并向SRC发送ICMP TTL Exceed包,该包目标IP为SRC的IP,源IP为Router 1的Ingress Interface的IP,Traceroute就会根据ICMP TTL Exceed包的源IP显示一跳;
在上图中SRC会显示两跳,172.16.2.1 10.3.2.2;
你无法从Traceroute中得知包返回的路径以及路由器使用的ICMP Return Interface和Egress Interface的IP。
注:值得一提的是在RFC1812 4.3.2.4 ICMP Message Source Address中提到,ICMP包的源地址必须是传包出去的物理接口绑定的其中一个IP(Except where this document specifies otherwise, the IP source address in an ICMP message originated by the router MUST be one of the IP addresses associated with the physical interface over which the ICMP message is transmitted.)。
经过与hewt实验证实了这个问题。一个探测包确实会有可能从路由器的一个接口进,ICMP TTL Exceed包从另外一个接口出,并且源IP是进的接口IP,按照个人理解其原因是路由器会把进的接口产生的TTL超时包当作外来的包并遵循路由表进行路由转发,转发过程不会改变包的源目IP。因此在外部看来这个ICMP包并不符合RFC文档的定义。
三、Traceroute中的DNS反向解析
理解Traceroute中的DNS反向解析是使用Traceroute的一个非常重要的一个方面。
在Traceroute中的DNS反向解析我们能够获取到以下信息:
路由器地理位置
接口类型与带宽
路由类型与角色
网络自治系统的边界与关系
对于推断问题原因,以上信息显得尤为重要。
3.1 路由器地理位置
为什么我们需要知道地理位置?
确定不对或者是不太合适的路由。从亚特兰大到迈阿密经过纽约,那就不太理想了。
确定高延时是否合理。从印度到美国要300ms,但从日本到美国并不需要300ms。
帮助你理解网络互联的节点。
我们常用的帮助识别位置信息的有:
IATA Airport Codes(International Air Transport Association Airport Codes)
CLLI Codes(Common Language Location Identifier)
非标准简写的城市名
Country Codes
还有一些其他的信息
3.2 接口类型与带宽
很多网络都会尝试将接口信息放在DNS,需要注意的是:
接口信息通常是帮助他们排查自己网络的问题;
接口信息有可能不是最新的。虽然很多大型网络会自动产生DNS,但其余的不会;
可以帮助你识别接口的类型,通过接口类型甚至可以知道路由器的型号。
例子:xe-11-1-0.edge1.NewYork1.Level3.net
xe-11-1-0是Juniper 10GE端口,该设备至少有12个板卡槽
至少一台40G/板卡槽的路由器,因为它有一块10GE板卡在板卡槽1
常见接口类型对照表:
Interface Type |
Cisco IOS |
Cisco IOS XR |
Juniper |
---|---|---|---|
Fast Ethernet | Fa#/# | fe-#/#/# | |
Gigabit Ethernet | Gi#/# | Gi#/#/#/# | ge-#/#/# |
10 Gigabit Ethernet | Te#/# | Te#/#/#/# | xe-#/#/# (*) |
SONET | Pos#/# | POS#/#/#/# | so-#/#/# |
T1 | Se#/# | t1-#/#/# | |
T3 | t3-#/#/# | ||
Ethernet Bundle | Po# / Port-channel# | BE#### | ae# |
SONET Bundle | PosCh# | BS#### | as# |
Tunnel | Tu# | TT# or TI# | ip-#/#/# or gr-#/#/# |
ATM | ATM#/# | AT#/#/#/# | at-#/#/# |
Vlan | Vl### | Gi#/#/#/#.### | ge-#-#-#.### |
3.3 路由类型与角色
知道路由器角色是非常有用的,但每个AS都不一样,使用不同的角色命名,并且他们也不会一直遵循自己的命名规则。
总的来说,你只能通过你的网络知识去猜路由器的角色。
通常来说有以下规律:
Core routers – CR, Core, GBR, BB, CCR, EBR
Peering routers – BR, Border, Edge, IR, IGR, Peer
Customer routers – AR, Aggr, Cust, CAR, HSA, GW
3.4 网络自治系统的边界与关系
识别网络自治系统边缘很重要:
能帮助你知道路由策略变化的地方。如:不同的返回路径是基于本地优先级的;
能帮助你知道带宽与路由最差的地方,这些地方可能就是产生问题的地方;
当然也能帮助你知道应该去联系谁。
识别网络自治系统的关系同样有所帮助:
典型三个角色:Transit Provider、Peer、Customer
很多网络都会尝试将以上信息写在DNS上。如etworkname.customer.alter.net
有时能够看到反解域名的明显变化:
|
有时能够看到DNS的某一部分变化:
|
当然有时DNS的信息根本没有用:
|
以上无法判断GBLX的边界,同时无法判断192.205.34.109是在哪里。
来看更多的信息:
|
ar5.DCA3.gblx.net有多个DNS域名解析,通过以上分析,就算第5跳的DNS中没有cogent字眼提示也能判断第5跳与第4跳分属两个自治系统(命名规则发生变化)。
以上分析涉及到一个关键点,根据/30掩码获取对端IP。
如上图,两个接口虽然同在一个/30掩码网段内,但路由器并不会收集或维护邻居的DNS信息,所以当一个包发出时路由器并不知道邻居的DNS信息,这时就会填充上自己接口的DNS信息而不是留空白让邻居去填充。因此通过分析对端的接口信息,就能够知道路由器所属自治系统(若64.212.107.89的域名是cogent-0.ar5.DCA3.gblx.net,那么ar5.DCA3路由器将属于两个自治系统)。
四、网络延时
三种主要网络延时:
串行延时。该延时是路由器或交换机发送数据包的时间,串行延时=包大小(bits)/传输速率(bps);
排队延时。该延时是数据包在路由器队列中等待发出的时间,非拥塞情况下排队延时可忽略不计;
传播延时。该延时是数据包在传播介质中传播所用时间,该延时主要取决于光或电磁的传播速度。
4.1 串行延时
该延时产生在转发数据包的时候,产生原因:
一个数据包被移动到网络上的时候是一个不可分的单元;
在一个数据包传输完毕之前另外一个数据包无法发送。
在高速网络中该延时非常小
1500 bytes over a 56k link (56Kbps) = 214.2ms delay
1500 bytes over a T1 (1.536Mbps) = 7.8ms delay
1500 bytes over a FastE (100Mbps) = 0.12ms delay
1500 bytes over a GigE (1Gbps) = 0.012ms delay
4.2 排队延时
1. 利用率
1G的接口跑到500Mbps我们会说利用率是50%,但实际上,一个接口只能进行转发数据(100%利用)或者不能转发数据(0%利用),故所谓的50%利用率实际上是指1s内有0.5s用来了传输数据。
2. 排队
当一个接口在被使用,下一个包必须排队等待被发送。通常来说,一个接口90%使用率等于将要转发的包90%都在排队。当一个接口达到饱和时,排队时间将迅速增加,当一个接口过饱和时,一个包排队可能要耗费几百甚至几千毫秒,排队延时通常与拥塞程度相关联。
4.3 传播延时
该延时由光信号或电磁信号在介质中的传播速度与距离决定。光速(真空状态下传播)约为300,000km/s,但光纤是由玻璃制作,非真空,故光在光纤内传播速度较真空状态慢,约为0.67c,即200,000km/s,1ms的往返延时距离为100km。
例子:
环地球赤道一圈(约为40000km)传播延时大概为200ms(往返延时为400ms)。
知道以上数据,通过traceroute的每一跳地理位置信息,通过距离计算传播延时就知道延时是否正常了。
|
美国纽约到英国伦敦只需要67.6ms,两地相距约6759km,延时正常。
|
在美国本土传播耗时220ms,延时不正常。
[转]Traceroute网络排障实用指南(1)的更多相关文章
- [转]Traceroute网络排障实用指南(2)
五.优先级与限速 5.1 Traceroute延时判断影响因素 Traceroute延时包括三点: 探测包到达一个特定路由器的时间 路由器生成IPMI TTL Exceed的时间 ICMP TTL E ...
- [转帖]记一次KUBERNETES/DOCKER网络排障
记一次KUBERNETES/DOCKER网络排障 https://coolshell.cn/articles/18654.html 记得之前在一个公众号里面看过这个文章 讲的挺好的.. 物理机直接跑d ...
- 记一次KUBERNETES/DOCKER网络排障
https://coolshell.cn/articles/18654.html 总结在前面: 1.kill -9杀死docker进程,系统一定是要遍历所有的docker子进程来一个一个发退出信号的, ...
- A Practical Guide to Distributed Scrum - 分布式Scrum的实用指南 - 读书笔记
最近读了这本IBM出的<A Practical Guide to Distributed Scrum>(分布式Scrum的实用指南),书中的章节结构比较清楚,是针对Scrum项目进行,一个 ...
- 家用wifi信号覆盖增强扩展实用指南
家用wifi信号覆盖增强扩展实用指南 现在网上很多号称穿墙王的无线路由器,但是一般用起来效果都不理想,其实最主要的原因还是家里面一般每个房间不大,但是墙比较多.并且一般也没有一个所谓的中心点放置路由器 ...
- 搜寻Linux软件实用指南
搜寻Linux软件实用指南 对于初学者来说,仅仅安装好Linux系统还是不够的,还需要安装大量的应用软件.许多下载网站都提供了诸如装机必备软件的下载,分门别类提供经典的工具软件下载.本文主要针对初学 ...
- flannel vxlan工作基本原理及常见排障方法
写在前面 最近用kubeadm鼓捣了几个cluster集群测试用,网络用的flannel.因为这些机器都不是纯净的环境(以前部署过其他的k8s或者有一些特别的设置),所以部署起来遇到了很多问题.看了下 ...
- TensorFlow 卷积神经网络实用指南 | iBooker·ApacheCN
原文:Hands-On Convolutional Neural Networks with TensorFlow 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心 ...
- 【思考】由安装zabbix至排障php一系列引发的思考
[思考]由安装zabbix至排障php一系列引发的思考 linux的知识点林立众多,很有可能你在排查一个故障的时候就得用到另一门技术的知识: 由于linux本身的应用依赖的库和其它环境环环相扣,但又没 ...
随机推荐
- WebFrom模拟MVC
如: aspx前台 这样写生成页面时不会产生新的html标签,用控件则会产生新的html标签 <h1><%= title %></h1> <p> ...
- handsontable插件事件
Hook插件 afterChange (changes: Array, source: String):1个或多个单元格的值被改变后调用 changes:是一个2维数组包含row,prop,o ...
- python学习之路-13
SQLAlchemy ORM框架 连表操作 一对多 创建表 指定约束 ForeignKey from sqlalchemy import create_engine from sqlalchemy.e ...
- Gym Class(拓扑排序)
Gym Class Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- 【DataStructure】Description and usage of queue
[Description] A queue is a collection that implements the first-in-first-out protocal. This means th ...
- Android-JNI编程-图文解析
要想阅读并调试下文源码,首先要确保你的NDK环境是ok的: 编译环境:win7+Eclipse+ADT+SDK+NDK:基本用最新的就ok. 说明下,下文代码就是一个简单的 ...
- windows下用vs2008和boost结合编译程序
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://co63oc.blog.51cto.com/904636/504469 win ...
- Hacker(十)----常用入侵工具
黑客若想攻击目标计算机,仅靠DOS命令是无法完成的,还需要一些功能强大的入侵工具,如端口扫描工具.网络嗅探工具.木马制作工具及远程控制工具等. 一.端口扫描工具 端口扫描工具有扫描端口的功能,所谓端口 ...
- POJ 1556 - The Doors 线段相交不含端点
POJ 1556 - The Doors题意: 在 10x10 的空间里有很多垂直的墙,不能穿墙,问你从(0,5) 到 (10,5)的最短距离是多少. 分析: 要么直达,要么 ...
- QTestlib Manual翻译
Trolltech公司提供的QTestlib框架,是一种针对基于QT编写的程序或库的单元测试工具.QTestLib提供了单元测试框架的基本功能,并提供了针对GUI测试的扩展功能. 目录: QtestL ...