首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要一个哈希函数来创建32位的ipv6 16字节地址和TCP2字节端口号的值

我需要一个哈希函数来创建32位的ipv6 16字节地址和TCP2字节端口号的值
EN

Stack Overflow用户
提问于 2011-06-30 15:07:13
回答 4查看 4.6K关注 0票数 7

我想创建一个32位的哈希值。我有16个字节的源和目的ipv6地址以及2个字节的源端口号和目的端口号。

32位输出=(源IP、Dst Ip、源端口、目标端口)

如果散列函数沿着32位空间很好地分布实体,那就更好了。我想使用结果作为索引。

重坐

EN

回答 4

Stack Overflow用户

发布于 2011-06-30 16:01:27

另一个,可能是有用的参考:

General Purpose Hash Function Algorithms

CityHash by Google

请注意,很难创建一个无冲突保证的散列函数(在相同的散列代码中没有不同的输入结果)。解决这个问题的方法有很多,最简单的就是开放寻址。

Open Addressing

票数 5
EN

Stack Overflow用户

发布于 2011-07-07 08:10:39

32位的索引?你的桌子有多大?!

考虑到大多数IPv6地址将基于硬件地址。看一看RFC 4291

代码语言:javascript
复制
[EUI64] defines a method to create an IEEE EUI-64 identifier from an
IEEE 48-bit MAC identifier.  This is to insert two octets, with
hexadecimal values of 0xFF and 0xFE (see the Note at the end of
appendix), in the middle of the 48-bit MAC (between the company_id
and vendor-supplied id).  An example is the 48-bit IEEE MAC with
Global scope: 

|0              1|1              3|3              4|
|0              5|6              1|2              7|
+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+

在这种情况下,尝试这个在大多数情况下都有效的快速而肮脏的方法(假设端口和MAC地址均匀分布):

  • 采用源IPv6地址的低16位。将其左移16位,并将其与目的IP地址
  • 的低16字节进行OR运算,以获取源端口。将其左移16位,并将其与目标端口
  • 进行异或运算,将上述两个32位值的结果相加

如果用户使用手动分配的地址,这个散列函数将不会非常均匀地分布,但我认为在大多数情况下它会很接近。如果需要,您可以从地址的上半部分添加(XOR)一些位。

票数 3
EN

Stack Overflow用户

发布于 2011-06-30 15:33:42

有关散列函数和几种著名算法的一般信息,请参阅Eternally Confuzzled;我可能会使用FNV或Jenkins的一次一个散列。

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

https://stackoverflow.com/questions/6531147

复制
相关文章

相似问题

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