当前位置: 首页 > java >正文

如何理解 IP 数据报中的 TTL?

ttl


目录

    • 前言
    • 理解


前言

面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首部的固定部分,这个 TTL 指的就是数据报在网络环境中的“生存时间”

理解

TTL 是“生存时间”的英文缩写(Time To Live),共占 8 位,由发出数据报的源点进行设置,目的是为了防止无法交付的数据报无限制存在于互联网中,从而耗费网络资源。TTL 最初的设计是以“秒”为单位,数据报每进过一个路由器就把 TTL 减去数据报在路由器所消耗的时间。当 TTL 值减为 0 时,就丢弃这个数据报。

而现在的计算机网络中 TTL 的单位已经不再是“秒”,而是“跳数”,其含义就是数据报在互联网中可以经过的路由器数量,由于 TTL 占 8 位,因此,数据报可在互联网中可经过的路由器数量的最大值为 255。

不同操作系统中,默认的 TTL 不一样,常见默认值如下:

操作系统 / 设备默认 TTL 值
Windows128
Linux / Unix64
Cisco 路由器255
Solaris255
FreeBSD / macOS64
Android64

TTL 默认值是否可修改?答案是“可以”,以 Linux 系统为例。

查看当前值:

cat /proc/sys/net/ipv4/ip_default_ttl

image-20250606165308416

临时修改:

echo 128 > /proc/sys/net/ipv4/ip_default_ttl

永久修改:

echo 'net.ipv4.ip_default_ttl = 128' >> /etc/sysctl.conf
sysctl -p

那如何直观理解 TTL 跳数?我们继续举个例子,比如我 ping www.baidu.com

image-20250606165356556

上图显示 TTL=52 表示 ICMP 数据报经过了 64 - 52 = 12 个路由器。

验证是不是 12 个路由器:

[root@ism ~]# traceroute -T www.baidu.com
traceroute to www.baidu.com (183.2.172.17), 30 hops max, 60 byte packets1  _gateway (172.17.10.1)  0.482 ms * *2  192.168.11.1 (192.168.11.1)  0.418 ms * *3  * * *4  * * *5  * * *6  * * *7  113.96.4.234 (113.96.4.234)  38.721 ms * *8  * * *9  14.29.117.178 (14.29.117.178)  30.439 ms  32.970 ms  34.381 ms
10  * * *
11  * * *
12  * * *
13  183.2.172.17 (183.2.172.17)  34.743 ms  35.205 ms *

traceroute 输出中,最后成功到达目标主机 183.2.172.17 是在第 13 跳

说明:

172.17.10.1:这是我本地的三层交换机,具备网络层,所以这里 TTL 会 -1

192.168.11.1:这是我本地的路由器,这里 TTL 也会 -1

所以:

  • 数据报在到达目标前经过了 12 个路由器(即跳数为 12);
  • 第 13 个 TTL 的数据包才到达目标主机;
  • TTL 初始值如果是 64,那么最终在目标返回时,你会在 ping 等工具里看到 ttl=52(64 - 12),如上图所示;
  • 实际中,跳数大于 30 就很少见了,一般公网路径 10~20 跳是常见范围
http://www.xdnf.cn/news/12409.html

相关文章:

  • LLM Agent 如何颠覆股价预测的传统范式
  • [BIOS]VSCode zx-6000 编译问题
  • Git 常用命令大全
  • itvbox绿豆影视tvbox手机版影视APP源码分享搭建教程
  • 香港维尔利发布“可视化健康轨迹图谱引擎”,AI驱动健康全周期管理新范式
  • Xilinx 325T FPGA 中的 GT(GTP 或 GTX)收发器和普通 LVDS 接口的差模和共模电压
  • 龙石数据中台V3.5.2升级 | 新增码表转换功能
  • C++.OpenGL (3/64)着色器(Shader)深入
  • Java并发编程面试题
  • 2025年06月06日Github流行趋势
  • 攻击模型的恶意行为检测
  • 【单片机期末】串行口循环缓冲区发送
  • C# 使用正则表达式
  • React-表单受控绑定和获取Dom元素
  • 图片切割工具:智能分割长图并控制文件大小
  • Flask 核心概念速览:路由、请求、响应与蓝图
  • 吃透 Golang 基础:使用 encoding/json 实现 Golang 数据结构与 JSON 对象的转换
  • [论文阅读] 人工智能 | 大语言模型计划生成的新范式:基于过程挖掘的技能学习
  • FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
  • Halcon透视矩阵
  • 基于深度强化学习的Scrapy-Redis分布式爬虫动态调度策略研究
  • RNN和CNN使用场景区别
  • Windows平台RTSP/RTMP播放器C#接入详解
  • 11-Oracle 23ai Vector Embbeding和ONNX
  • 正则持续学习呀
  • Kerberos面试内容整理-开源 Kerberos 实现(MIT Kerberos、Heimdal 等)
  • STM32 控制12VRGB灯带颜色亮度调节,TFTLCD显示
  • 全面理解 Linux 内核性能问题:分类、实战与调优策略
  • 【vLLM 学习】Cpu Offload Lmcache
  • 硅基计划2.0 学习总结 陆 抽象类与接口