首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TCP序列空间和现代1G/秒交换机?

TCP序列空间和现代1G/秒交换机?
EN

Software Engineering用户
提问于 2021-12-30 12:53:07
回答 1查看 78关注 0票数 0

现代世界充满千兆位/秒开关。

根据TCP标准,序列空间有2^32个字节(字节)。

让我们算一算。1_000_000_000是125_000_000字节。从概念上讲,已建立的TCP连接中的每个字节都有自己独特的序列号;在这里,唯一性是必须的,因为没有它,整个进程就会出现故障。因此,(2^32) / 125_000_000产生大约。35秒换句话说,一个现代千兆/秒交换机/网络可以在半分钟内耗尽整个序列空间。

在我看来,对于关于序号唯一性的核心假设来说,这听起来非常不安全。我们如何保证在这35秒内,一个假定的具有某些序列号X的“旧”数据包会死掉,旧数据包和新数据包之间不会突然出现冲突?如果OSI在最初的位置就存在,那么这个保证在哪一级生存?

为了清楚起见,我要引用TCP:

在正常情况下,TCPs跟踪要发出的下一个序列号和等待确认的最老序列号,以避免在第一次使用之前错误地使用序列号。这本身并不能保证旧的重复数据被从网络中抽走,因此序列空间变得非常大,从而降低了游荡复制在到达时会造成麻烦的可能性。每秒2兆位。用掉2**32八位数的序列空间需要4.5小时。由于网络中的最大段生存期不可能超过几十秒,因此对于可预见的网络来说,这被认为是足够的保护,即使数据速率上升到10‘S的兆位/秒。在100兆比特/秒的情况下,循环时间为5。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2021-12-30 13:15:12

千兆位的速度是吞吐量,但它没有告诉您缓冲区的深度或数据包的生存期。在某种程度上,较高的吞吐量交换机会导致更短的分组生存期,因为在正常情况下,分组将更快地被传送到其目的地(或丢弃)。

为了使序列号成为一个问题,您必须:

  • 有一个序列号为X的数据包
  • 复制它,其中一个副本在某处缓冲,另一个副本到达目的地。
  • 在同一个TCP流中将另一个4GB的数据传输到目标。
  • 然后将缓冲包发送到目的地。

这是不可能的,因为系统缓冲区倾向于按顺序缓冲.很难看出哪种间歇性故障会允许4GB传输,同时也会将流氓数据包路由到足够长/很深的延迟的某个地方,这样就可以作为副本到达。

这并不是很难保证永远不会有重复。只是不太可能在正常操作中造成问题。请注意,理论上,如果恶意参与者在connection - 有时通过猜测序列号其他连接.中看到其他数据包,则可以向数据包中注入目标序列号。

这是任何地方加密的另一个好处,因为如果使用MAC-然后加密(如TLS),有线上损坏的数据将导致解密失败,因此您可以拆下连接并在应用层恢复(例如重试操作)。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/435632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档