Wireshark 网络包分析实战四:TTL

Overview

本文的行文逻辑如下:

首先讲述什么是TTL,为了更好的讲清楚TTL的作用,我试着举了多个TTL在真实生活帮助我们解决的问题。

你会感叹这一个小小的字段,居然有这么大的用处!

Introduction to TTL

TTL定义于IPv4协议中,如下

RFC规定占8位,即数值0-255

TTL,其实就是记录了网络的路径跳数 。

The Time-to-Live field, or TTL, sets an upper limit on the number of routers through which a datagram can pass. It is initialized by the sender to some value (64 is recommended [RFC1122], although 128 or 255 is not uncommon) and decre- mented by 1 by every router that forwards the datagram. When this field reaches 0, the datagram is thrown away, and the sender is notified with an ICMP message (see Chapter 8). This prevents packets from getting caught in the network forever should an unwanted routing loop occur.

上面的话总结起来就是:

1、数据包每经过一个routerTTL值就减少1

2、TTL值如果为0,当时的router负责返回一个ICMP告知发送方,TTL值耗尽

3、TTL值一般初始为64、128、255

4、TTL存在的目的是防止数据包进入无限循环,浪费网络带宽

不过你会不会有这个疑问:TTL,也就是Time to Live,看起来像是一个时间限定,一个时间单位,为啥实际上却成了允许经过的最多router个数呢?

The TTL field was originally specified to be the maximum lifetime of an IP data- gram in seconds, but routers were also always required to decrement the value by at least 1. Because virtually no routers today hold on to a datagram longer than 1s under normal operation, the earlier rule is now ignored or forgotten, and in IPv6 the field has been renamed to its de facto use: Hop Limit.

哦,原来如此。 一开始TTL确实表示时间,后来在实际工程中发现,正常场景下一个router并不会持有一个数据包超过1s,所以后面TTL的含义就变了。IPv6中直接"明牌",我不装了,它就叫做Hop Limit

是啊,TTL就是Hop Limit的意思哦。

Usage 1、操作系统指纹

不同的操作系统的TTL默认值不同,windows128,类unix系统为64

所以呢,我们可以根据抓到的包的TTL推测对端OS的类型。

这应该是个类unix操作系统呢

这应该是个windows操作系统呢

Usage 2、判断抓包在哪一端

比如,给你一个包含http请求和响应的抓包文件。你使用wireshark打开,你如何确定该文件是从http client端抓取,还是从http server端抓取的呢?

talk is cheap, show me the wireshark pcap 🐶

这个需要用到上面的知识:

不同的操作系统的TTL默认值不同,windows128,类unix系统为64

It is initialized by the sender to some value (64 is recommended [RFC1122], although 128 or 255 is not uncommon

如果在你抓到的包中,看到TTL=64/128等初始数值,大概率就是在当前端所抓。比如:

点开1号包的详情,发现IP协议中TTL=128,那你大概率可以认为这些网络包是在src=10.5.28.229这台机器上所抓。

Usage 3、识别防火墙

在讲述本小节之前,首先说一个知识:

对于外网来说,同一个连接TTL有可能会变化;

对于内网来说,同一个链路上,TTL基本不会变化;

这是什么意思?

对于内网来说,网络拓补是比较稳定和单一的。但是对于外网来说,同一个TCP连接,IP路由走的可能不太一样。这也是互联网这个名称的由来,从A点到B点,路线很多,每次都可能走不通的路径。

也就是说,在内网环境,如果一个连接中,发现TTL有变化,就要引起重视,而且很可能就是内网防火墙引起的啊。

下面引用极客时间《网络排查案例课》中的一个例子,具体来说就是在一个连接的初始阶段,三次握手成功,紧接着的TLS四次握手失败,clientRST

这是在client端抓取的包,首先我们查看server端发来的SYN+ACK

然后查看貌似是server端发来的RST

啊哈,通过TTL的对比,一下子就露出了马脚,这个RST是由中间的某台设备------防火墙发出,断掉了本次的TLS四次握手。

Usage 4、网络超探测类工具

探测类工具,比如traceroute,它的原理便依赖IP协议的TTL

首先简单介绍一下traceroute,它是干什么呢?和ping探测的区别?它的原理是什么?

你应该很熟悉ping,我们一般使用ping+host来判断你的主机与host是否能够联通、以及它们之间的往返时间RTT等。

那么traceroute呢?

它更进一步,它能详细的列出数据包在通往host主机路上经过的每一个router

The primary difference between ping and traceroute is that while ping simply tells you if a server is reachable and the time it takes to transmit and receive data, traceroute details the precise route info, router by router, as well as the time it took for each hop.

pingtraceroute的原理都是发送ICMP数据包,traceroute之所以能列出每一跳的router统计信息,根本离不开IP协议的TTL

下面让我们来看一个例子:

shell 复制代码
$ traceroute -I  -q 1  www.baidu.com   
                               
traceroute: Warning: www.baidu.com has multiple addresses; using 110.242.68.3
traceroute to www.a.shifen.com (110.242.68.3), 64 hops max, 72 byte packets
 1  bogon (172.24.159.253)  8.894 ms
 2  36.110.17.17 (36.110.17.17)  141.932 ms
 3  *
 4  *
 5  *
 6  *
 7  219.158.41.1 (219.158.41.1)  67.226 ms
 8  *
 9  *
10  110.242.66.182 (110.242.66.182)  24.004 ms
11  221.194.45.130 (221.194.45.130)  32.467 ms
12  *
13  *
14  *
15  *
16  110.242.68.3 (110.242.68.3)  38.774 ms

traceroute基本列出了到达www.baidu.com所经过每一个router信息,它是如何做到的呢?

直接来看抓包文件

啊哈,原来如此,从本机发出的ICMP探测包,它的IP层的TTL1开始累加。

然后依靠TTL的原理:

每经过一个routerTTL1,当TTL0,当时的router负责返回一个ICMP Time Exceeded的数据包。

Traceroute sends packets with TTL values that gradually increase from packet to packet, starting with TTL value of one. Routers decrement TTL values of packets by one when routing and discard packets whose TTL value has reached zero, returning the ICMP error message ICMP Time Exceeded

请看ICMP回复包

果然返回了Time-to-live exceededtraceroute就靠这种逐渐递增TTL的方式,探测本机与目的主机之间的路径。

不过你可能还有疑惑:

1、traceroute -I -q 1 www.baidu.com,表示traceroute指定用ICMP网络包探测路径,难道还有别的网络包探测方式?

2、为啥中间的几个路由都是****,难道是出错了?

3、中间出错,为什么后面的还是有能够正常显式的呢?

......

说到这里,我们已经明白,TTL是实现traceroute功能的底层支持之一,但关于traceroute本身还有很多东西可以深究,后面我会专门写文章讨论,敬请期待😏

Summary

我相信通过我的介绍,你会稍微了解TTL的作用了吧。

那么你还有没有其他应用场景呢,欢迎分享给我~

Reference

  • 📚《TCP/IP Illustrated》
  • 极客时间《网络排查案例课》
  • wiki
相关推荐
前端李易安17 分钟前
什么是HTTP,什么是HTTPS?HTTP和HTTPS都有哪些区别?
网络协议·http·https
胎粉仔17 分钟前
网络初阶——应用层:HTTPS 协议
网络协议·http·https
hgdlip1 小时前
本机ip地址和网络ip地址一样吗
网络·网络协议·tcp/ip·网络ip地址·本机ip地址
hzyyyyyyyu9 小时前
隧道技术-tcp封装icmp出网
网络·网络协议·tcp/ip
清尘沐歌12 小时前
有什么好用的 WebSocket 测试工具吗?
websocket·网络协议·测试工具
清尘沐歌12 小时前
有什么好用的 WebSocket 调试工具吗?
网络·websocket·网络协议
earthzhang202113 小时前
《深入浅出HTTPS》读书笔记(7):安全的密码学Hash算法
网络·网络协议·http·https·1024程序员节
找藉口是失败者的习惯13 小时前
探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解
网络·网络协议·http
vortex513 小时前
HTTP 协议及内外网划分详解
网络·网络协议·http·网络安全
莫轻言舞13 小时前
Java Http 接口对接太繁琐?试试 UniHttp 框架吧
网络·网络协议·http