IP协议的TTL解析(定义、执行、用途)

2024-05-04 06:44
文章标签 ip 协议 定义 解析 执行 ttl

本文主要是介绍IP协议的TTL解析(定义、执行、用途),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基本定义

ttl定义的目的是为了让数据包能不要在网上存活太久。为什么呢?最初的原因:

如果出现了路由环路会怎样?

其实也简单: 一个包会在网络里一直转来转去,永远不会被丢弃。网络里会慢慢堆积起垃圾,不断有新包在里面永久转圈。进而影响网络转发效率。

应用扩展:

2. 可以控制本地收发。本地收发可以通过把ttl设置成1或者255来控制。设置成1可以避免包被发送到外网。设置成255可以让接收者不接收外来的包(检查这个类型的包如果ttl不是255就丢掉)。这些都是很巧妙的设计,很简单的方法就隔离了内外网。本地收发的包只能来自本地去往本地,外网的干扰进不来,内网的内部行为不扩散影响internet。

3. 可以控制业务。tcp的时延可以影响业务流量,通过设置ttl,可以控制tcp。如果业务要求时延短,则可以设定小ttl,如果走时间太久,可能直接业务建立失败。另外ip原始设计是路由器丢包后会icmp通知源端。那么如果有些孤包被错误转发绕了远路,那么发送端很快就可以通过icmp知道包没有到达对端,不需要等ack时延。(这种设计并没有被广泛应用,原因之一是路由器懒惰,有时候丢包不报;之二是路由器设置安全限制;之三是主机收到icmp可能不会送回给tcp端口)

的吧了这么多,是想从另一个角度去理解ttl。好些人在这个回答下扯住traceroute不放。traceroute是ttl的一个应用而已,不是唯一的应用。

TTL 每跳减1

为什么在主机里不够1秒时延也必须ttl减1?原因是:

ip协议是per-hop的协议,每个包在每个路由器里的出来,有2个特点(解释ttl需要这两个特点,并不是说ip处理只有这两个特点):

1. 本路由器不保留对包出来的log或状态,转了就忘了,顶多记个数。

2. 路由器之间不会对每个包的处理进行协商或者对话,所有的信息必须通过每一个包“自明”。

这两个特点的结果,就是必须在包里改变点什么,才能说明这个包曾经在我这里耗了点时间。而ttl定义成8位,注定了不能是毫秒为单位。而以秒为单位,就会造成路由器处理不到1秒就没办法变ttl。于是,rfc规定,处理时间不够1秒的,也要ttl减1。另外小胖等同学们也都提到,路由器内部也懒得在出入口记时间,所以基本上不存在不减1的情况。

这样的结果,造成了internet上“既定事实”,ttl剪掉的量=跳数。但这不是ipv4的定义。

关于ttl,还有一个有趣的点,是过隧道的时候怎么办。有空再填坑吧。写的时候没想到能写这么多。回头补上。

------------原回答--------------

先拷rfc791原始定义

Time to Live: 8 bits

This field indicates the maximum time the datagram is allowed to

remain in the internet system. If this field contains the value

zero, then the datagram must be destroyed. This field is modified

in internet header processing. The time is measured in units of

seconds, but since every module that processes a datagram must

decrease the TTL by at least one even if it process the datagram in

less than a second, the TTL must be thought of only as an upper

bound on the time a datagram may exist. The intention is to cause

undeliverable datagrams to be discarded, and to bound the maximum

datagram lifetime.

定义非常清晰:

1. ttl是此包还能存活多长时间的标记

2. ttl时间单位是秒

3. ttl在每个转发点,即使停留了不够1秒也要减1

4. 收到ttl为0丢包

并不是因为实际应用才在路由器中减1,而是协议要求的。一般路由器很少把包缓存超过1秒,所以看到的都是减1。

例外?

如果缓存超过1秒,会不会有路由器减2呢?不知道,没有测过。

其实超过1秒也不是不可能,如果有低速率转发设备缓存足够大。。。。。。如果,在llc或rlc层做了确认重传,尤其是在卫星线路上。见过单向时延超过400毫秒的卫星链路

这篇关于IP协议的TTL解析(定义、执行、用途)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958557

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹