TCP序列号 与 序列号循环介绍

我们知道,TCP有如下特性:

  • TCP不断从应用程序层接收数据。
  • 它将数据分为多个块,其中每个块都是一系列字节为单位的数据块集合。
  • 然后,通过向数据块中添加TCP标头来创建TCP段。

在本文中,我们将讨论TCP序列号。

TCP序列号

  • 发送方发送的每个TCP段都包含一些字节的数据。
  • TCP为每个数据字节分配一个唯一的编号以进行标识。
  • 此唯一编号称为TCP序列号

目的

序列号用于以下目的:

  • 它有助于唯一地标识每个数据字节。
  • 它有助于将数据分段为TCP分段,并在以后重新组装它们。
  • 它有助于跟踪已传输和接收了多少数据。
  • 如果以错误的顺序接收到数据,则有助于将数据放回正确的顺序。
  • 当数据在传输中丢失时,它有助于请求数据。

最大序列号数

  • 在TCP标头中,序列号是一个32位字段。
  • 因此,最大可能的序号数= 2^32^ 。
  • 这些序列号在[0 , 2^32^ – 1].范围内。

注意

  • 可能的序列号的最大数量= 2^32^。
  • 这并不意味着使用TCP只能发送2^32^字节= 4 GB数据。
  • 循环的概念允许使用TCP发送无限的数据。

循环的概念

循环状态的概念

当2^32^个 序列号全部用完之后,如果需要继续发送数据,序列号就翻过来从头开始使用。

一般来说,

  • 如果选择的初始序列号是X。
  • 然后使用从X到2^32^ – 1,然后从到0到X-1的序列号。
  • 然后,将序列号包裹起来以发送更多数据。

  • 考虑使用的初始序列号为0。
  • 然后,在发送4 GB数据后,所有序列号都会用完。
  • 要发送更多数据,请从头开始重用序列号。
  • 可以一次又一次地包装,以发送越来越多的数据。 循环时间-**
  • 耗尽所有2^32^个序列号所花费的时间称为循环时间
  • 它取决于网络的带宽,即字节流出的速率。
  • 带宽越大,循环时间越短,反之亦然。

循环时间 ∝ 1 /带宽

公式

如果网络带宽= x字节/秒,则

TCP网段的生命周期

在现代计算机中:

  • TCP段的生存时间为180秒或3分钟。
  • 这意味着在发送TCP段之后,在最坏的情况下可能需要3分钟到达接收方。

TCP序列号为什么可以循环?

TCP可以循环序列号,因为

  • 每一个TCP段的寿命仅为180秒。(注意,不是TCP的会话寿命,是TCP发出去的每一个数据块。)
  • 循环时间远大于TCP段的生存时间。
  • 因此,当序列号循环时,就不可能存在任何具有相同序列号的段。
  • 因此,即使在循环之后,所有字节的序列号在任何给定时间都是唯一的。

减少循环时间

循环时间可以减少到与TCP段的生命周期相同。

这是因为

  • TCP段的使用寿命结束后,可以认为该段不再存在。
  • 因此,该段使用的序列号将释放并可以重复使用。

为了实现上述内容:

  • 序列号的数量必须与段中的生存时间相等。

公式

为了使循环时间等于TCP段的生命周期。

序列号字段中所开启的bit值=log~2~ (TCP段的生命周期x带宽)

  • 位数将大于32位。
  • 额外的位将附加在TCP标头的“选项”字段中。

TCP中基于序列号循环时间的实践问题

问题01:

给定网络带宽为1 MB /秒。计算循环时间。

答案

我们知道,

  • 循环时间=使用所有2^32^个序列号所需的时间。
  • TCP为数据的每个字节分配一个序列号。

要计算循环时间,我们只需要计算发送2 个32字节数据将花费多少时间。

现在,

  • 给定带宽= 1 MB /秒= 10 6字节/秒。
  • 这意味着10个6字节的数据在1秒钟的时间内发送。
  • 因此,将在时间=(1/10^6^)x 2^32^秒中发送2^32^字节的数据。
  • 答案决后,我们得到1.19个小时。

从而,

  • 如果带宽= 1 MB /秒,将花费1.19个小时来消耗所有2^32^个序列号。
  • 循环时间= 1.19小时。

或者,

使用公式,我们有
循环时间

= 2^32^ /10^6^秒

= 1.19小时

问题02:

如果网络带宽为1 GBps,那么必须在“选项”字段中添加多少个额外的位,以使循环时间等于网段的生存时间?

答案

为了使循环时间等于TCP段的生存时间,

所需的序列号数= TCP段生命周期内发送的字节数

我们知道

  • TCP段的生存时间= 180秒。
  • 网络带宽= 1 GBps(给出)

现在,

  • 1秒内传输的字节数= 1 GB
  • 因此,在180秒内传输的字节数= 180 GB = 180 x 2^30^字节
  • 因此,所需的序号数量= 180 x 2^30^

假设需要序列号字段中的y个位数来表示值180 x 2^30^。

因此,我们有
2^y^ = 180×2^30^

ylog2 = log(180 x 2^30^)

y =log~2~(180 x 2^30^)

y = log~2~180 +log~2~ 2^30^

y = 7.49 + 30

y≅38

从这里,

  • 序列号所需的总位数= 38位。
  • 在TCP标头中,序列号字段是一个32位字段。
  • 因此,需要在“选项”字段中附加额外的位= 38 – 32 = 6位。

或者,

使用公式,我们有

所需总位

=log~2~(TCP段的寿命x带宽)

=log~2~(180 x 2^30^)

=log~2~180 +log2 2^30^

= 7.49 + 30

= 38

从这里,

  • 序列号所需的总位数= 38位。
  • 在TCP标头中,序列号字段是一个32位字段。
  • 因此,需要在“选项”字段中附加额外的位= 38 – 32 = 6位。

问题03:

在最大TPDU大小为128字节,最大TPDU寿命为30秒和8位序列号的网络中,每个连接的最大数据速率是多少?

(TPDU是作为该段的传输层协议数据单元。)

答案

鉴于

  • 最大段大小(MSS)= 128字节
  • 段寿命= 30秒
  • 序列号中的位= 8

现在,

  • 使用8位= 2^8^ = 256的最大可能序列号数。
  • 因此,可以唯一标识的最大字节数= 256个字节。
  • 段的生命周期= 30秒。
  • 因此,可以在30秒内发送的最大数据量= 256个字节。

从而,

每个连接的最大数据速率

= 256字节/ 30秒

≈68位/秒

问题04:

假设宣告窗口的长度为1 MB。如果从整个序列号空间中随机选择一个序列号,那么该序列号落在宣告窗口内的概率是多少?

答案

我们知道,

  • 序列号字段中的位数= 32位。
  • 因此,最大可能的序列号数= 2^32^。
  • 这些序列号可以唯一地标记2^32^字节的数据。
  • 宣告窗口大小= 1 MB = 2^20^字节,使用2^20^个 序列号。

因此,所需概率

= 2^20^ / 2^32^

= 1/2^12^

觉得文章有用?

点个广告表达一下你的爱意吧 !😁