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

相关文章

解析 XML 和 INI

XML 1.TinyXML库 TinyXML是一个C++的XML解析库  使用介绍: https://www.cnblogs.com/mythou/archive/2011/11/27/2265169.html    使用的时候,只要把 tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.

探索蓝牙协议的奥秘:用ESP32实现高质量蓝牙音频传输

蓝牙(Bluetooth)是一种短距离无线通信技术,广泛应用于各种电子设备之间的数据传输。自1994年由爱立信公司首次提出以来,蓝牙技术已经经历了多个版本的更新和改进。本文将详细介绍蓝牙协议,并通过一个具体的项目——使用ESP32实现蓝牙音频传输,来展示蓝牙协议的实际应用及其优点。 蓝牙协议概述 蓝牙协议栈 蓝牙协议栈是蓝牙技术的核心,定义了蓝牙设备之间如何进行通信。蓝牙协议

通俗范畴论4 范畴的定义

注:由于CSDN无法显示本文章源文件的公式,因此部分下标、字母花体、箭头表示可能会不正常,请读者谅解 范畴的正式定义 上一节我们在没有引入范畴这个数学概念的情况下,直接体验了一个“苹果1”范畴,建立了一个对范畴的直观。本节我们正式学习范畴的定义和基本性质。 一个范畴(Category) C𝐶,由以下部分组成: 数据: 对象(Objects):包含若干个对象(Objects),这些

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

[vivado][IP核]FFT

刘东华的IP核详解: 1、 2、

[vivado][IP核]DDS

刘东华的IP核详解: 1、 这里的是指IP核配置中的相位数据的宽度。 2、 实际使用此IP核时并没有“频率分辨率”可以配,是靠改变来变的。 3、 4、 5、 数据输出的ready在数据正式输出时才会有。 自己仿真: 使用SIN/COS LUT only的模式,使用一个累加器作为相位输入,不知怎么,输出为X。

[ip核][vivado]aurora

Xapp1193:  discovered:1)并不是所有芯片都支持aurora.xc7z010就没有。                     2)XDC文件的指令-允许未约束的引脚的存在:                 set_property BITSTREAM.General.UnconstrainedPins {Allow} [current_design] PG046

[ip核][vivado]Block Menory Gennerator 学习

<刘东华的xilinx系列FPGA芯片IP核详解>读书摘录: 1. 2. 3.

[ip核][vivado]FIFO 学习

<xlinx FPGA应用进阶 通用IP核详解和设计开发>读书摘录: 1.        2.3.仿真模型 特点总结:1)复位后会有busy状态,需要等待wr_rst_busy信号低电平后才能正常写入                  2)prog_full信号的高电平长度可调                  3)仿真中的读状态很奇怪,并没有正常读取,都是XXX的状态。 所用的te

【杂记-浅谈DHCP动态主机配置协议】

DHCP动态主机配置协议 一、DHCP概述1、定义2、作用3、报文类型 二、DHCP的工作原理三、DHCP服务器的配置和管理 一、DHCP概述 1、定义 DHCP,Dynamic Host Configuration Protocol,动态主机配置协议,是一种网络协议,主要用于在IP网络中自动分配和管理IP地址以及其他网络配置参数。 2、作用 DHCP允许计算机和其他设备通