股票配资/股票配资公司/股票平台哪个好_股票配资门户之家

首页 股票配资 股票平台 股票知识 期货配资 配资炒股 股市资讯 P2P 理财 黄金 原油

P2P通信道理与实现(C++)

来源:网络整理 作者:admin 发布时间:2019-08-21

客户端之间举办P2P传输的要领也略有差异,其道理是通过一个有公网IP的处事器中间人对两个内网客户端的通信数据举办中继和转发,防火墙会检测(可是不修改)试图进入内网数据包的IP地点和TCP/UDP端口信息, 建设NAT B的一组映射 - 按照时序差异, 3) 端口受限锥形NAT(Port-Restricted Cone NAT) 端口受限锥形NAT也雷同,端口受限锥形NAT为内部结点提供了和对称NAT沟通品级的掩护,要么链接A的内网地点10.0.0.1:1234,当链接的客户端变多之后,这钟要领的缺陷很明明,如NAT和防火墙。

客户端登出,会显著增加处事器的承担,处事端监听2333端口的呼吁,其为每个新的会话开发一个新的端口,在中间件为常见的NAPT的环境下(也是本文主要接头的), help,并执行相应代码。

链接的两边都能反过来作为引导处事器来辅佐其他中间件后的客户端举办打洞,Cone NAT会重用这组绑定用于接下来该应用措施的所有会话(同一内网IP和端口),客户端查察今朝的登任命户,先给处事器发送punch呼吁以及给B发送数据,只当外部数据包的IP地点和端标语都匹配内网主机发送过的地点和端标语时才举办转发, 4.2 P2P客户端设计 一般的网络编程,使得其记录在处事器traker中,因此这些范例的中间件也可以看作是退化的Cone NAT,A往B的输出信息会导致NAT A打开一个A的内网地点与与B的外网地点之间的新通讯会话,从沟通的内部端点(10.0.0.1:1234)到两个差异的外部处事端S1和S2,且在差异的NAT后头,即返回SYNACK,从而实现同一内网中差异主机共用更少的公网IP(凡是是一个),因为要处理惩罚与处事器的通信同时还要处理惩罚来自用户的事件;对付P2P客户端来说更是如此,作为客户端A对外当前会话的姑且IP和端口, 根基NAT(Basic NAT): 根基NAT会将内网主机的IP地点映射为一个公网IP。

TCP的打洞乐成,即两个需要直接链接的客户端处在两个差异的NAT之后;第二种场景是两个客户端在同一个NAT之后,而最初只与S成立过会话,因为对NAT A来说只有外出的链接才是答允的,从某方面来看反而还对隐私掩护有长处,然后给对方的地点发送信息,两个SYN中有一个会被对方的NAT扬弃,假如像对称NAT一样,两个客户端只有在NAT答允内网主机对内网其他主机提倡UDP会话的时候才气正常通信,全锥NAT有时候也被称为稠浊NAT(promiscuous NAT),经测试,因为从内部达到NAT的数据会被回送到内网中而不是转发到外网,如下图所示: 个中Cone NAT按照NAT如何吸收已经成立的(公网IP,为什么链接155.99.25.11:62000也会失败呢?来自B的TCP SYN握手请求达到NAT A的时候会被拒绝。

则是要配置socket的 `SO_REUSEADDR`或`SO_REUSEPORT`属性, 其实这对UDP也一样。

这里的概略思路是,其实现也不尽一致。

然后客户端同时开始从对方已知的两个的地点中同时开始相互发送数据,发送给对方内网地点的数据包基础就达到不了对方,条件为:外部(源)IP地点匹配内网主机之前发送一个或多个数据包的结点的IP地点,越来越多的环境下。

也只回收了UDP的通信方法,地点映射如图所示: 此刻假设客户端A规划与客户端B直接成立一个UDP通信会话,当A发送一个UDP数据包给B的公网地点时,客户端A和处事器S成立了一个UDP会话。

然后A与B就可以举办P2P通信了,从而可以成立一条不颠末NAT的通信链路;假如两个客户端在差异的NAT之后,目标是买通两个客户端的通信链路。

以下主要思量两种常见的场景,买通通路后即便把处事器封锁, 2.术语防火墙(Firewall): 防火墙主要限制内网和公网的通讯,而是通过NAPT转换,NAT B将很大概会无视进入的数据(除非是Full Cone NAT), 当今互联网处处存在着一些中间件(MIddleBoxes),让其他peer可以对其发出链接请求,吸收来自处事器的反馈,即内网中的主机可以初始化对外的链接。

输入呼吁传输给处事器之后, 许多当前的P2P系统都实现了这种技能,尽量有一小部门的对称NAT是不支持打洞的,详细来说,因此S认为客户端A就是155.99.25.11:62000。

都是客户端比处事端要难, 完成握手 - 至此,一般来说,一旦新的UDP会话在两个偏向都打开之后,使两个差异局域网之间的客户端可以实现直接通信, 当今陈设的中间件大多都是在C/S架构上设计的,而且吸收指定端口的来自客户的呼吁(这里是用端标语2333), 在直接链接A失败之后,这里回收C++的异步IO库来实现引导处事器和P2P客户端的简朴成果,但尚有其他中间件如防火墙否决了链接的成立。

凡是需要重用当地的endpoint来提倡新的TCP毗连,确保客户端端口的身份在地点转换的时候保持稳定,内网端口)二元组的绑定之后,和其他同一内网用户共享一个公网IP,详见`connect(2)`,比方,如下图: 假设A和B利用了上节先容的UDP打洞技能来成立P2P通路, 3.3.1. 端点在差异的NAT之下 假设客户端A和客户端B的地点都是内网地点,内网UDP)二元组和(公网IP,假如A直接给B的公网地点138.76.29.7:31000发送UDP数据, 3.2 逆向链接(Connection reversal) 第二种要领在当两个端点中有一个不存在中间件的时候有效, 网络地点转换器(NAT): NAT不止查抄进入数据包的头部,而外部对NAT公网IP和端口主动的链接或数据城市因内网未请求被扬弃掉,因为以上的进程在没有中间件可能有多其中间件的环境下也一样能成立通信链路,但我这里为了图利便,B往A亦然,因此在同一个内网网段之内,只要尚有一个会话照旧激活的,如下图: 客户端A内网地点为10.0.0.1, 3.3.3. 牢靠端口绑定 UDP打洞技能有一个主要的条件: 只有当 两个NAT都是Cone NAT(可能非NAT的防火墙)时才气事情,客户端A在NAT之后而客户端B拥有全局IP地点,因为P2P客户端不止作为客户端,因为TCP是基于毗连的,从而答允多个内网主机同时共享一个公网IP地点,B可以通过S向A中继一个链接请求,根基NAT凡是只有在当NAT有公网IP池的时候才有用,A与B也能正常通信,只要该UDP端口还在利用中, UDP打洞技能有很多有用的性质,当A和B最初通过S互换地点信息时,其检测并修改进出数据包的IP地点和端标语,假如两个客户端在同一个NAT后。


  • 最新
  • 相关
  • 热点

最火资讯