📜  环绕概念和 TCP 序列号

📅  最后修改于: 2021-09-28 09:45:58             🧑  作者: Mango

先决条件 – TCP |服务和分部结构
传输控制协议(TCP)是互联网协议中最重要的协议之一。它为应用程序提供完整的传输层服务,并在发送方和接收方之间生成一条虚拟电路,该电路在传输期间处于活动状态。它的段由 TCP 标头、TCP 选项和段传输的数据组成。

序列号 –
32 位序列号字段定义了分配给该段中包含的数据的第一个字节的编号。 TCP 是一种流传输协议。为确保连通性,要传输的每个字节都有编号。在连接建立期间,每一方都使用随机数生成器来创建初始序列号 (ISN),它通常在每个方向都不同。我们知道一个 TCP 序列号是 32 位的。所以它有有限的(从 0 到 (2 32 -1) = 4 Giga 序列号),这意味着我们将只能发送 4GB 的数据,唯一的序列号不超过这个数。它有助于分配与通过 TCP 连接传输的其他数据字节不冲突的序列号。 ISN 对每个连接都是唯一的,并由每个设备分隔。

环绕概念 –
它可能发生在高流量下,所有序列号都用完了。每个数据包的序列号必须是唯一的,但由于它在某个时间点是有限的(4 Giga),因此序列号被完全消耗掉。使用过的序列号在可用时可以根据要求再次使用,这种序列号的重用被称为环绕概念

简单来说,“为了保持数据传输的连续性,为了保持数据传输的连续性,反复使用序列号一次又一次地使用这些序列号”被称为Wrap around概念。这有助于发送越来越多的数据,而不必担心要发送多少数据。由于序列号可以反复使用,因此对数据量没有限制。

何时以及如何实施环绕?
例如,如果我正在下载大小为 4GB+2 字节的软件,但可用的序列号只有 4GB,其余两个字节将不会获得任何序列号。在这种情况下,序列号会被包装起来,即根据要求一次又一次地使用它们。这种包装受随机初始序列号的影响。我们可能在开始时得到较少数量的序列号,但在所有序列号再次被消耗后,序列号将从 0 开始。

从我们开始使用序列号的地方,我们将得到 2 32 个序列号。因此我们可以说按照要求重用一个序列号是 TCP 序列号的 wrap 概念。现在,如果我们有环绕概念,那么一个新概念就出现了,即环绕时间,它依赖于序列号的环绕。

环绕时间 –
环绕所花费的时间称为环绕时间。这意味着如果我们从序列号 0(或者它可能是任何东西)开始,那么在多少时间之后我们将再次使用这个相同的序列号。环绕时间是开始重用相同序列号所花费的时间,也可以说是按照要求重复序列号所花费的时间。环绕时间取决于序列号和带宽的数量。因为带宽是消耗比特(序列号)的比特率。消耗速度越快,序列号消耗越快。

Wrap Around Time
= (Total sequence number) / (Bandwidth)
= (232) / (Bandwidth) 

为什么环绕是可能的?
有一个概念称为Life Time ,在最坏的情况下,数据包将需要 3 分钟(180 秒)才能到达目的地(即数据包的生命周期)。在今天的技术中,相同的序列号将在 180 秒后可用,但我们不会在回绕时间之前使用它。只要数据包的环绕时间>生命时间,使用相同的序列号就没有问题。在回绕时间段的生命周期结束后,这意味着在那个时候,超时发生。在使用了所有序列号并且它们的生命周期结束后,再次使用相同的序列号并没有什么坏处。

减少环绕时间——
如果要消耗的比特总数等于序列号,则不需要环绕序列号。但这是不可能的,我们将使用环绕概念。由于环绕时间直接取决于序列号的数量,而与带宽(数据流动的速率)成反比。

可用的序列号越多,回绕时间就越高。带宽越小,回绕时间越长。因此,为了减少环绕时间,我们需要:

  1. 减少序列号或
  2. 增加带宽(可能)

示例 1:给定 n 位,可能有多少个序列号?
解释 –
对于 1 位,可能有 2 个数字,即 0 和 1
对于 2 位,可能有 4 个数字,即 00、01、10、11
对于 3 位,可能有 8 个数字,即 000、001、010、011、100、101、110、111 ……等等
对于 n 位,可能有 2^n 个数字,即从 0 到 2 n -1(二进制)。

示例 2:给定 n 个序列号需要多少位来表示集合?
解释 –
让我们需要 x 个位数,我们知道 2 x = n

=> x log(2) = log(n) 

我们将有,

=> x = log(n) 

取给定日志的基数 2。

示例 3:信道带宽为 1 GBps。一个数据包可以在链接中停留多长时间而不必担心具有相同序列号的 2 个数据包的问题?
解释 –

Bandwidth = 1 GBps = 230 
Sequence numbers = 232

So, Wrap around time: 
= Sequence number/Bandwidth
=232 / 230
=22
=4 seconds 

示例 4: GATE-CS-2014-(Set-3) |第 65 题

示例 5: GATE CS 2018 |第 32 题