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

相关文章

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

IDEA与JDK、Maven安装配置完整步骤解析

《IDEA与JDK、Maven安装配置完整步骤解析》:本文主要介绍如何安装和配置IDE(IntelliJIDEA),包括IDE的安装步骤、JDK的下载与配置、Maven的安装与配置,以及如何在I... 目录1. IDE安装步骤2.配置操作步骤3. JDK配置下载JDK配置JDK环境变量4. Maven配置下

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程