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
相关推荐
夜月yeyue3 小时前
AUTOSAR CP 从上电到 Runnable
c语言·网络·tcp/ip·车载系统
treesforest3 小时前
IP定位技术在网络犯罪侦查中的应用与价值
网络·网络协议·tcp/ip·网络安全·ip归属地查询·反欺诈
外滩运维专家3 小时前
HTTPS 证书报错排查手册:6 个高频错误码及解决方法
网络协议·http·https
起司喵喵4 小时前
通过Certbot自动申请更新HTTPS网站的SSL证书
网络协议·https·ssl
鲜花飘飘扬7 小时前
HTTP请求头中表示代理IP地址的属性及获取情况
网络协议·tcp/ip·http
paopaokaka_luck11 小时前
基于springboot3+vue3的智能文库平台(AI智能搜索、AI智能汇总、实时在线状态展示、多格式文档预览与富文本编辑、Echarts图形化分析)
前端·网络·spring boot·网络协议·echarts
发光小北13 小时前
SG-RS232/485/422-Fiber-110 串口光纤收发器如何使用?
网络协议
纵有疾風起13 小时前
从OSI到TCP/IP——分层架构的思想根源与模型之争
tcp/ip·计算机网络·架构·osi·408·体系结构·分层
我星期八休息13 小时前
扩展— TCP 全连接队列与 tcpdump 抓包
linux·服务器·开发语言·前端·网络·tcp/ip·tcpdump
看昭奚恤哭14 小时前
LWIP TCP滑动窗口为TCP ZeroWindow的解决方法
网络·tcp/ip·php