执行tcp重组时计算tcp连接表哈希的最佳方法

执行tcp重组时计算tcp连接表哈希的最佳方法,tcp,cryptography,network-programming,tcp-ip,Tcp,Cryptography,Network Programming,Tcp Ip,从(192.168.0.134829,80.229.161.151,80,6)中计算哈希的好算法有哪些,我可以用它们在哈希表中查找连接 192.168.0.1:34829 -> 80.229.161.151:80 (3232235521, 34829, 1357226391, 80, 6) 我在这篇文章中读到一种流行的方法,就是对整数求和,然后mod N,wer N是最大连接数 3232235521 + 34829 + 1357226391 + 80 + 6 = 4589496827 m

从(192.168.0.134829,80.229.161.151,80,6)中计算哈希的好算法有哪些,我可以用它们在哈希表中查找连接

192.168.0.1:34829 -> 80.229.161.151:80
(3232235521, 34829, 1357226391, 80, 6)
我在这篇文章中读到一种流行的方法,就是对整数求和,然后mod N,wer N是最大连接数

3232235521 + 34829 + 1357226391 + 80 + 6 = 4589496827 mod 65536 = 10747
但是,这将与以下内容相冲突:

3232235521 + 34818 + 1357226391 + 80 + 17 = 4589496827 mod 65536 = 10747
这样做会更好吗

3232235521 ⊕ 34829 ⊕ 1357226391 ⊕ 80 ⊕ 6 mod 65536
只是为了确保以下TCP连接不可能,因为源端口80不可用,因为它在该主机上已处于侦听模式

80.229.161.151:80 ->192.168.0.1:34829
(1357226391, 80, 3232235521, 34829, 6)

我可以使用toeplitz散列还是仅用于cpu核心的负载平衡数据包?

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

如果您的计算资源受到限制,并且您需要更高的速度,您可以使用CRC32或类似xxHash或hurrushash的东西。一些现代CPU支持
crc32c
指令,因此每个内核的吞吐量高达每秒十亿哈希


您也可以使用Toeplitz散列,但它确实很原始,冲突更容易发生。

您已经用加密技术标记了这一点,但是没有一种方法是安全的wrt加密技术。另外,您没有指定速度是一个问题。通常,您可以使用SHA-2(SHA-256或SHA-512,后者在64位机器上通常更快)进行加密哈希。如果你需要一个相对快速的加密散列,那么看看Blake2。如果你需要一个非常快速的非加密散列,你可以看看例如。XOR并不比加法好多少,而且两个选项都不是很好。只需看看python或java如何散列整数列表。它快速、简单,而且似乎工作得很好,并且很容易移植到您正在使用的任何语言。字节可以很容易地用这种方式进行规范表示:IP只有4个字节,端口只有2个字节。使用字符串也可以,但不要忘记在值之间留下分隔符。