进入DHT的节点都是很自由的。 很难保证每个节点都遵守DHT的游戏规则。
所以很难保证以下情况不会出现:
1、多个主机争用同一个ID。
以下属于正常情况:
1) 一个客户端的网络断开(ADSL重新拨号), 然后重新进入DHT网络。
2) 两个客户端随机生成了两个相同的ID。
3) 一个恶意客户端不断使用不同的ID, 试图跟其他节点产生冲突, 因为可以知道每个ID是否存在于网络。
2、同一个主机使用多个不同的ID。
1) 客户端的重新启动, 生成了不同的ID。
2) 客户端进行恶意攻击, 故意产生不同的ID。
产生的后果:
与正常情况的ID与主机一一对应的相比, 多少将会造成问题。
对于情况1: 将会产生坏节点, 由于路由表保存的是旧的节点。所以客户端试图想该节点发送请求的时候将
失去响应。所以碰到该情况时(发现出现该问题时), 应该向旧的节点发送ping请求, 如果节点没有响应则替换
为新的节点否则使用旧的节点(根据DHT的游戏规则, 应该这样做)。不过正常情况下(非攻击)只是简单的替换成新的节点应该不会
有什么大的问题, 毕竟1-2)的情况发生的可能性很少(微乎其微, 除非随机函数有问题)。
对于情况2: 由于每个DHT包都会包含发送者ID, 所以直接更新ID即可。不过假如为恶意客户端, 故意每次
产生比上次更接近目标节点的ID话, 将需要浪费大量的带宽用于请求。特别是不对返回的内容进行过滤的话,
那么将会产生无休止的请求。直到所有的ID都被用完(1-2^160)。所以假如使用, 而不是id对返
回的处理进行标记,那么就可以避免这种情况。
由此可见, 恶意客户端的共同行为是同一个host节点, 不断虚报, 占用不同的ID(冲突, 或者不存在), 所以发
现该类节点, 应该把它给MASK掉。 至于如何尽快发现, 处理的方法是:
PS: IE该淘汰了, 用IE打开gmail总是一卡一卡, 总没有firefox那么流畅。
阅读(910) | 评论(0) | 转发(0) |