DS-Lite 隧道内数据包的正确协议版本是什么(v4 与 v6)?

网络工程 隧道 ipv6-transition
2021-07-31 04:09:16

我在一家开发深度包检测工具的公司工作。我们的客户之一,即拥有大量 DS-Lite 连接用户的大型 ISP,正在使用我们的 DPI 引擎来收集有关其网络中 IPv4 和 IPv6 使用情况的统计数据。直到最近,他们才发现一个重大问题。过去,为了避免 IPv4 和 IPv6 之间的混淆,使用所有不同的隧道,他们决定改为统计传输层的统计信息。但是,事实证明,我们的 DPI 将 DS-Lite 隧道内的 HTTP v4 流量视为使用 TCPv6 作为传输层协议,尽管理论上它直接位于 IPv4 数据包内。这会破坏他们的统计数据,因为他们将大量 DS-Lite 封装的 IPv4 流量计算为纯 IPv6。

现在他们来找我们争辩说这是错误的,我有点感觉到他们。这一切都是从打包成 IPv4 数据包的 TCPv4 段开始的,然后我们才将它们放入 IPv6 中,然后再通过 DS-Lite 链接发送出去。他们认为 IPv6 封装对于内部的数据包应该无关紧要,这些数据包实际上TCPv4。(我知道这很复杂,我希望你明白我的意思。)

当我在实验室中生成一些 DS-Lite PCAP 并检查它们在 Wireshark 中的外观时,大惊喜出现了。结果,Wireshark 证实了我们的引擎所说的 - IPv4 层内的数据包确实是 TCPv6。 Wireshark 中的 DS-Lite 数据包

我现在最大的问题是 - 是否有一个标准来描述这些协议版本的外观?我已阅读 DS-Lite RFC,我们的一位开发人员也已阅读,但我们无法找出答案。

2个回答

评论的共识是

  • 这些段在 IPv4 内
  • TCP 的协议恰好是 6 而不是它的 IP 版本号

正如您所说,如果您正在寻找协议版本的 4s 与 6s,您会找到它们!

结果,Wireshark 证实了我们的引擎所说的 - IPv4 层内的数据包确实是 TCPv6。

正如 jonathanjo 已经写过的那样:(6)是 IPv4 (!) 协议编号,TCP 为 6,UDP 为 17。

是否有标准描述这些协议版本的外观?

我什至怀疑官方文档中是否存在术语“TCPv6”或“TCPv4”。

我一直阅读诸如“TCP/IPv4”或“TCP/IPv6”之类的术语。

两种数据包类型之间有一个显着区别:

“TCP/IPv4”使用一些公式来计算使用 IPv4 源地址和目标地址的数据包校验和。“TCP/IPv6”使用修改后的校验和公式,因为 IPv6 地址用于校验和计算。

在 DS-Lite 的情况下...

  • ... IPv4 公式用于校验和计算
  • ... TCP 数据包最初作为纯 IPv4 数据包发送,最终目的地将作为纯 IPv4 数据包接收

因此,我肯定会说您的屏幕截图显示的是“TCPv4”数据包,而不是“TCPv6”数据包。