p2p网络中的节点发现之UDP
http://blockgeek.org/t/topic/1915
server启动的时候,除了监听本地的tcp端口之外,还启动了udp端口的监听,而且udp端口的监听与udp通信在节点发现的时候起着关键作用。
先看下为什么udp在节点发现中起着关键作用。
在 https://blog.csdn.net/adwen2009/article/details/82878626 介绍了在节点启动后连接到bootnode节点,然后每隔15s向bootnode发送ReqNodesMsg请求其他节点信息,收到bootnode节点返回的ResNodesMsg信息后,将节点信息放入到buckets中。前文介绍的节点的连接,nodesmsg的互换等都是通过TCP连接进行的。但在将节点信息放入buckets之前,是有一个节点的校验的,这里的校验是通过udp pingpong来实现的,如果udp的ping消息得不到正确的回应,则当前节点是不会加入到buckets中的,所以说udp在这里是起了关键作用。具体代码可参照table.go中的pingpong函数,从ping函数中可以看到,tab.net是实现ping的关键,这里的net就是包含了udp连接的结构体,下面看一下这个net的来源。
在server启动的时候,有一个UDP端口的监听,即下面的代码
ntab, ourend, err := discover.ListenUDP(…)
在这个函数中主要做了3件事
1、通过ResolveUDPAddr查询端口和IP地址是否可用,并返回一个UDPAddr
2、通过ListenUDP监听udp端口,创建一个接收目的地是本地地址UDPAddr的UDP数据包的网络连接conn,此连接
3、封装一个新的UDP结构体,在这个newUDP中有个newTable,传参为udp,对应的就是table.net属性。这就解释了net的来源问题。
4、在newUDP中还启动了两个线程,loop()和readloop()。其中loop()中主要是对收到的消息进行校验,readloop中主要是接收来自其他节点的消息,这里的消息包括ping消息,pong消息,nodeReq,nodeRes消息,主要是ping,pong消息,实际上节点信息交换用的TCP,而不是这里的udp。
另外从代码send函数中可以看出udp的消息传递是明文的,并没有进行加密,只是做了下签名
p2p网络中的节点发现之UDP相关推荐
- P2P网络中的节点发现
在P2P网络中,要发现并连接其他节点,常见的是通过种子节点连接到网络,然后通过种子节点获取其他节点的地址.以太坊的种子节点在cmd/swarm/bootnodes.go中定义,hpb的种子节点在con ...
- Unity网络:在局域网P2P网络中利用UDP广播实现保活/心跳
C/S与P2P 严格来讲客户端与服务器指的都是进程,N个Client客户端进程与一个或多个Server服务器进程可以组成一个C/S结构的网络,而同时既是客户端也是服务器的N个节点可以组成一个P2P网络 ...
- P2P网络中内网穿透的方法总结(2019)
P2P网络中内网穿越方法总结(2019) 内网穿越的需求 问题分析 方案一 方案二 方案三 内网穿越的需求 今天去图书馆搜资料查了一下,这个问题很老,但是解决办法很久都没有更新过了,还得翻翻书.网上的 ...
- P2P网络中DHT算法分析
结构化与非结构化P2P 依照节点信息存储与搜索方式的不同,诸多P2P协议可以分为2大类:结构化(Structured)的与非结构化(Unstructured)的系统. 非结构化P2P系统 在非结构化的 ...
- P2P网络中的DHT分布式哈希结构
现有的P2P实现可以分为三种类型.它们分别是:基于目录服务器P2P,非结构化P2P和结构化P2P.基于目录服务器这一类系统中设置目录服务器,用于保存用户节点的地址信息和该节点上共享文件的描述信息,文件 ...
- p2p网络中的NAT穿透技术----常见NAT穿越解决方案
p2p网络中的NAT穿透技术----常见NAT穿越解决方案 常见NA丁穿越解决方案 NAT技术在缓解IPv4地址紧缺问题.构建防火墙.保证网络安全等方面都发挥了重要 作用.然而,NAT设备的广一泛存在 ...
- 生物网络中基于节点相似度的链路预测图卷积
生物网络中基于节点相似度的链路预测图卷积 前言 一.介绍 二.材料和方法 三.结果与讨论 四.结论 文章地址:https://https://academic.oup.com/bioinformati ...
- 复杂网络中重要节点挖掘方法综述
复杂网络的一些相关概念可以参考我上一篇博客:复杂网络入门 重要节点挖掘的任务 1.找到一种适合于所有情形下量化节点重要性的方法是不可能的,甚至在给定明确的量化函数下,不同的参数或者不同的网络结构都可能 ...
- 一种创新性有效重力模型的复杂网络中关键节点的识别【论文阅读】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 摘要 一.识别有影响力节点的经典方法模型 1.1 度中心性 1.2 接近中心性 1.3 中介中心 1.4 特征向量中心性 1 ...
- 无线传感器网络中的节点定位技术
无线传感器网络中的节点定位技术 无线传感器网络中的节点定位技术 本文转载,原文链接://www.cnblogs.com/dolphin0520/archive/2013/05/03/3056789.h ...
最新文章
- 人工智能时代的“认知劳动”
- 宽带Internet连接的类型—Vecloud微云
- 【Python-pywt】 小波变化库—Pywavelets 学习笔记
- 文献学习(part39)--Cross-view semantic projection learning for person re-identification
- Android studio 导入module方法
- 第五篇:路由网关(zuul) zuul路由 服务过滤 (Finchley版本)V2.0_dev
- 阿里云MVP第六期发布——覆盖全球20多个国家和地区,成为数字化转型的中坚力量...
- 缺失值填充4——使用线性模型(岭回归、Lasso回归、ElasticNet回归)填充序列缺失值
- java第三方登录接口_第三方登录接入-qq,weibo-java
- manage.py和simplejson调用报错解决
- idea下搭建vue开发环境
- 那位有epson R1900中文清零软件?
- VMWare安装配置Win7详解
- ckfinder的使用
- 【深度学习基础】Epoch, Batch, Iteration这三个概念的区别与联系
- 【hdu 6438】Buy and Resell
- Java JDK安装及环境变量配置(windows)
- Linux CentOs7 ping网址 未知的名称或服务
- 国内首家中高端自由职业者共享平台——易分之一,即将上线运营
- spark任务卡住问题原因之一以及解决方案