玩转网络(一)用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值是否异常。
玩转网络(一)用TTL(Time To Live)排查网络问题的更多相关文章
- 40 网络相关函数(八)——live555源码阅读(四)网络
40 网络相关函数(八)——live555源码阅读(四)网络 40 网络相关函数(八)——live555源码阅读(四)网络 简介 15)writeSocket向套接口写数据 TTL的概念 函数send ...
- 36 网络相关函数(四)——live555源码阅读(四)网络
36 网络相关函数(四)——live555源码阅读(四)网络 36 网络相关函数(四)——live555源码阅读(四)网络 简介 7)createSocket创建socket方法 8)closeSoc ...
- 33 网络相关函数(一)——live555源码阅读(四)网络
33 网络相关函数(一)——live555源码阅读(四)网络 33 网络相关函数(一)——live555源码阅读(四)网络 简介 1)IsMulticastAddress多播(组播)地址判断函数 多播 ...
- 网络编程介绍,C/S 架构,网络通讯协议,osi七层
网络编程: 什么是网络编程: 网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的 编写基于网络的应用程序的过程序称之为网络编程 为什么要学习网络编程: 我们已经知道计算机, ...
- iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
- 39 网络相关函数(七)——live555源码阅读(四)网络
39 网络相关函数(七)——live555源码阅读(四)网络 39 网络相关函数(七)——live555源码阅读(四)网络 简介 14)readSocket从套接口读取数据 recv/recvfrom ...
- 38 网络相关函数(六)——live555源码阅读(四)网络
38 网络相关函数(六)——live555源码阅读(四)网络 38 网络相关函数(六)——live555源码阅读(四)网络 简介 12)makeSocketNonBlocking和makeSocket ...
- 37 网络相关函数(五)——live555源码阅读(四)网络
37 网络相关函数(五)——live555源码阅读(四)网络 37 网络相关函数(五)——live555源码阅读(四)网络 简介 10)MAKE_SOCKADDR_IN构建sockaddr_in结构体 ...
- 35 网络相关函数(三)——live555源码阅读(四)网络
35 网络相关函数(三)——live555源码阅读(四)网络 35 网络相关函数(三)——live555源码阅读(四)网络 简介 5)NoReuse不重用地址类 6)initializeWinsock ...
- 34 网络相关函数(二)——live555源码阅读(四)网络
34 网络相关函数(二)——live555源码阅读(四)网络 34 网络相关函数(二)——live555源码阅读(四)网络 2)socketErr 套接口错误 3)groupsockPriv函数 4) ...
随机推荐
- Java8系列 (二) Stream流
概述 Stream流是Java8新引入的一个特性, 它允许你以声明性方式处理数据集合, 而不是像以前的指令式编程那样需要编写具体怎么实现. 比如炒菜, 用指令式编程需要编写具体的实现 配菜(); 热锅 ...
- SQL挑战一 : 查找最晚入职员工的所有信息
以上数据库表: CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_nam ...
- 代码传奇 | 身价10亿的程序员 雷军当年也为他打工——WPS之父 求伯君
他的前半生,值得我们每一个人深思. 在普通人眼里,他寂寂无名,只有年岁稍长的文化人,才听说过他传奇般的存在. 在IT人眼里,他是块活化石,中国第一的大旗除了他,没人敢抗! 他是求伯君,从一个浙江穷山村 ...
- Mui 长按保存图片
必须先要 引入 mui.js,然后参考具体代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...
- .net调用阿里短信接口
一.创建一个空的api项目 二.应用阿里的短信包 aliyun-net-sdk-core 三.登录阿里添加签名和模板 四.创建创建AccessKey 注意 AccessKey创建后,无法再通过控制台查 ...
- Python项目生成所有依赖包的清单
最近写完的自动化脚本,分享给同事的时候发现依赖包很难解决(使用的不是virtualenv环境).想起来之前看开源接口平台项目的时候可以一键下载依赖包,于是就找到了第三方包pipreqs,可以自动帮助我 ...
- 转:nginx和php-fpm的两种通信方式
原文地址:https://segmentfault.com/q/1010000004854045 Nginx和PHP-FPM的进程间通信有两种方式,一种是TCP,一种是UNIX Domain Sock ...
- 关于B/S模式CGI上传文件,遇到的问题归纳(待更新。。。)
由于项目问题是基于web的,最近一直在改进web界面,由于产品需要升级,而且升级操作是由客户在web端完成,将软件包放在本地,由web上传到后台完成更新,之前做的是TFTP更新方式,但是需要借助第三方 ...
- JS- 封装、继承、多态
http://www.cnblogs.com/silence516/articles/1509456.html
- Laravel + Vue + Element 考勤应用 - 人力资源系统
项目地址 Bee 介绍 Bee 是人力资源系统中的考勤应用,主要功能用于员工申请假单.Bee具有较高的性能.扩展性等,其中包括前后端分离.插拔式的规则验证(验证器).数据过滤(装饰器).消息队列等,后 ...