首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tcp重组时计算tcp连接表散列的最佳方法

tcp重组时计算tcp连接表散列的最佳方法
EN

Stack Overflow用户
提问于 2018-08-21 03:59:07
回答 1查看 449关注 0票数 1

从(192.168.0.1,34829,80.229.161.151,80,6)计算哈希的一些好算法是什么,我可以使用这些算法在哈希表中查找连接?

代码语言:javascript
复制
192.168.0.1:34829 -> 80.229.161.151:80
(3232235521, 34829, 1357226391, 80, 6)

我在这篇文章中读到,一种流行的方法是将整数相加,然后是mod N,其中N是最大连接数。

代码语言:javascript
复制
3232235521 + 34829 + 1357226391 + 80 + 6 = 4589496827 mod 65536 = 10747

但是,这将与以下内容发生冲突:

代码语言:javascript
复制
3232235521 + 34818 + 1357226391 + 80 + 17 = 4589496827 mod 65536 = 10747

这样做会不会更好?

代码语言:javascript
复制
3232235521 ⊕ 34829 ⊕ 1357226391 ⊕ 80 ⊕ 6 mod 65536

只是为了确保以下TCP连接是不可能的,因为源端口80不可用,因为它已经在该主机上处于侦听模式?

代码语言:javascript
复制
80.229.161.151:80 ->192.168.0.1:34829
(1357226391, 80, 3232235521, 34829, 6)

我可以使用toeplitz散列吗?或者这只是为了将数据包负载均衡到cpu核心?

EN

回答 1

Stack Overflow用户

发布于 2018-08-21 08:47:37

您可以将输入连接为字符串,然后使用任何常见的散列函数,如SHA-1,它速度很快(在现代PC上,每秒约有1000-3000万个散列)。您可以将值连接为字节而不是字符串,但这并不重要(例如,在SHA-1的情况下,任何低于56字节的值都是1块)。

如果您的计算资源有限,并且需要更高的速度,您可以使用CRC32或xxHash或MurmurHash之类的工具。一些现代CPU支持crc32c指令,因此每个内核的吞吐量高达每秒10亿个哈希。

你也可以使用Toeplitz散列,但它确实很原始,而且更有可能发生冲突。

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

https://stackoverflow.com/questions/51937753

复制
相关文章

相似问题

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