玩转网络(一)用TTL(Time To Live)排查网络问题
先大概介绍一下TTL(Time To Live)吧!
TTL翻译过来就是网络生存时间,说的是一个网络数据包,它在网络设备中转发的跳数(网络设备这里一般指的是路由器),默认值为64,也有很多设置为了128,或者可以设置为255以下,所以有时候看到一些TTL值大于64也不用惊讶。每经过一次路由,一般TTL值就会-1,比如原来是64,经过一层路由后,就会变成了63。
TTL的主要作用是避免IP包数据包在网络中的无限循环和收发,并能使IP包的发送者能收到告警消息(这个不是本文的重点,就不具体介绍了,网络上很多,可以自己搜一下)。
TTL字段存在于IP层协议中,所以我们可以在IP层的数据包中查找到该字段,看下图(图中的数据包是我随手在网络上下载的一个)
看到上图的Time To Live是64,说明目标主机和源主机在同一个网段,没有经过路由转发,甚至就是本机。
上面的数据包的Time To Live是251,说明源主机的TTL应该设置为了255.(我想应该没有人故意设一个奇葩值251,253吧。。。)
那基本介绍就到这里了,现在来说说TTL的玩法,怎么看它来排除网络问题。
首先一般在一些专业的网络里面,都会有对应的网络拓扑图。但是当你拿到了网络拓扑图,里面的网络情况是不是真的和拓扑图上的一致?这就需要验证了,这时候我们就可以通过ping(有些主机上设置了一些策略,不会回复ping消息)或者根据两台主机间的数据包中的TTL来观察是否和拓扑图中主机的分布情况一致。
下图是ping时候出现的TTL值:
至于数据包的TTL在上面已经有例子,就不给出了。
有时候会发现,TTL和它的网络拓扑会不一致,特别是在网络复杂的情况下,和网络时间很久了,其中又经过了后人对网络的修改,往往会出现各种奇怪的问题。
还有在一些没有网络拓扑的网络上,刚开始网络可能很简单,不需要,但是慢慢地增加了很多网络设备,也改变了网络的结构,这时候,我们也可以使用TTL来验证网络是否正确。说一个题外话,如果感觉这样观察不清晰,在Linux下可以使用traceroute命令和windows下使用tracert命令来打印出清晰的网络路径,如下图:
另外会出现一种情况,就是抓的一个网络数据包,比如下图:
在图中是10.0.0.1和10.0.0.2通信,TTL 是255,有可能你会发现有些数据包照样是10.0.0.2发出的,但是TTL差别很大,那有可能网络路径被重新导向,访问了另外一个服务器,或者被其他服务器给劫持了。所以在分析网络数据时候,我们也有必要观察一下TTL值是否异常。
最新文章
- Android NDK开发之Jni调用Java对象
- 在C#使用文件监控对象FileSystemWatcher的几种方案
- Struts2中通配符
- CSS表格固定列宽
- BZOJ2553: [BeiJing2011]禁忌
- NETBSD-DTARCE
- 整型数组处理算法(八)插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N[华为面试题]
- 修改VISUAL STUDIO EXPRESS 2012新建C++文件编码
- DisplayContent、StackBox、TaskStack笔记
- 关键自li,em,dl,ul,ol,footer,header,nav,aside,article
- 分享两个网址,一个是使用mssql自带的跟踪工具和分析工具
- 产生AJAX跨域问题的原因
- 浅谈RMQ
- Hadoop---Java-API对HDFS的操作
- 1.Windows下使用VisualSVN Server搭建SVN服务器
- 36-2018 蓝桥杯Java B组试题及答案
- Java环境编写
- 配置codis-dashboard
- 【Linux】特殊符号$$,$#,$?等解释
- django第二课 网页继承