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

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依