如何使用IP五元组作为哈希表的键(使用google的dense_hash_map)?

时间:2015-12-17 03:18:15

标签: algorithm data-structures hash network-programming

我们可以使用IP五元组来识别网络连接:srcIP,srcPort,dstIP,dstPort,TCP / UDP。我希望将这些连接信息与哈希表保持一致,就像这个"scripts": { "test": "npm run client:test && npm run api:test", "knex": "babel-node node_modules/.bin/knex --cwd db", "api:test": "mocha --opts api/__dev__/mocha.unit", "api:cover": "api/__dev__/api-cover.sh", "api:tdd": "npm run -s db:cycle && npm run -s api:test -- -w -R min", "api:start": "babel-node api/server", "api:watch": "nodemon --exec npm run -s api:start", "client:test": "mocha --opts client/__dev__/mocha.unit", "client:tdd": "npm run -s client:test -- -w -R min", "client:cover": "client/__dev__/client-cover.sh", "client:build": "babel-node scripts/client-build.js", "client:watch": "npm run -s client:build -- --watch", "db:make": "npm run knex migrate:make", "db:latest": "npm run -s knex migrate:latest", "db:rollback": "npm run -s knex migrate:rollback", "db:cycle": "npm run -s db:rollback && npm run -s db:latest" } 一样。

现在我使用字符串作为哈希表的键,如“srcIP_srcPort_dstIP_dstPort_TCP / UDP”,但我认为这不是一个好的选择,因为它的效率。

所以,如果我想使用结构作为关键,可能就像:

Hash<quintuple, list<packet_information> >

如何实现哈希函数?

1 个答案:

答案 0 :(得分:1)

您可以使用任何哈希函数。 例如:

item = IP_QUINTUPLE。

hash1 = item.srcIP ^ item.srcPort ^ item.dstIP ^ item.dstPort ^ item.flag; 
hash2 = item.srcIP ^ (123 * item.srcPort) ^ item.dstIP ^ (987 * item.dstPort) ^ (1234567 * item.flag);

其中^按位XOR运算和*乘法。