1.分布式哈希表
2.1.1 Kademlia(DHT)
Kademlia(DHT)是分布式点对点计算机网络的分布式哈希表。
它通过节点查找指定网络的结构和信息交换。
Kademlia节点使用UDP在它们之间进行通信。
虚拟或覆盖网络由参与者节点形成。
每个节点由数字或节点ID标识节点ID不仅作为识别,但Kademlia的算法使用节点ID来定位的值(通常是文件散列或关键字)。
实际上,节点ID 提供文件哈希的直接映射,该节点存储有关获取文件或资源的位置的信息。
在搜索某些值时,算法需要知道相关的密钥并分几步探索网络。每个步骤都会找到更靠近密钥的节点,直到联系的节点返回值或找不到更近的节点。这非常有效:与许多其他DHT一样,Kademlia O( log(n))在搜索系统中的总节点的时间复杂度仅为n。
特别是在分散结构中发现了进一步的优点,这增加了对拒绝服务攻击(DDoS)的抵抗力。即使整个节点集合被淹没,这也会对网络可用性产生有限的影响,因为网络将通过围绕这些“漏洞”编织网络来恢复自身。
KAD算法
(1)Kadelia二叉状态树:
XOR运算:判断两个节点之间的距离的远近d(x,y)=x⊕y
(2)节点路由表:节点路由表 保存每个节点与自己一顶范围内其他节点的连接信息
- 每条路由信息:ip addr、UDP port 、Nodeid
- 路由查询机制
- 节点加入和离开
Kademlia中的路由表,其中nodeId前缀为0011的节点
自我思考:实质上就是构造哈夫曼二叉树,树的分裂的知识。
Kademlia有四条消息。
- PING - 用于验证节点是否仍然存在。
- 存储 - 在一个节点中存储(键,值)对。
- FIND_NODE - 请求的接收者将返回他自己的桶中的k个节点,这些节点是与请求的密钥最接近的节点。
- FIND_VALUE - 与FIND_NODE相同,但如果请求的收件人在其商店中具有请求的密钥,则它将返回相应的值。
每个RPC消息都包含来自发起者的随机值。这确保了当接收到响应时,它对应于先前发送的请求。
2.1.2 Coral DSHT
提出coral协议的两位大佬,纽约大学,内容分发网络系统 其论文原文:
Michael J. Freedman and David Mazi`eres NYU Dept of Computer Science
目的:
避开互联网传输瓶颈 降低内容供应服务器的网络压力
基本思想:
在网络内部部署一些节点 建立一套虚拟的网络 将用户的请求重定向到最适合的服务器上去
优点:
- 通过节点服务器中转 提高了用户访问网页的速度
- 降低网络的负载
- 内容服务器暂时离线 用户可以通过节点服务器的缓存读取
索引机制和分层
基于键值对的路由层
Sloppy存储
Coral执行存储分为两步进行:
第一步是前向查询,Coral会持续迭代查找距离Key更近的节点ID,每一个节点返回两个信息,1.该节点是否loaded,2.对于该Key,这一节点存储有几个Value ,每一个Value的实效时间是多长。客户端根据信息决定这些节点是否可以存储新的值
第二步为反向查询,客户端从第一步得到了可存放的节点列表,按照距离Key从近到远的顺序,依次尝试添加Key/Value到这些节点
2.1.3 S/ Kademlia(DHT)
论文来源:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.68.4986&rep=rep1&type=pdf
因为 Kademlia是一种开放的p2p网络协议,易受到来自恶意节点的各类攻击。
这是一种基于Kademlia的安全Key路由协议,该协议通过在多条不相交的路径上使用并行查找来抵抗常见攻击,用隐式身份认证密码来限制自由节点ID生成,并引入可靠的兄弟广播。 后者需要以安全复制的方式存储数据。
中文翻译:
https://medium.com/@elninowang_cn/s-kademlia2007-%E7%BF%BB%E8%AF%91-4af0bcc09b66
参考: http://blog.lpc-win32.com/2018/10/29/coral-dsht/ Coral DSHT(内容分发网络系统)