网赚技巧-网赚技巧学习-网赚技巧分享-天天网

网站地图网上挣钱

网赚技巧-网赚技巧学习-网赚技巧分享-天天网

当前位置: 天天网 > 网赚心得 >

挂机赚一小时75元 p2p赚钱原理

时间:2021-07-24 01:36人气:来源: www.eluyouwo.com

端口受限锥形NAT也类似,只当外部数据包的IP地址和端口号都匹配内网主机发送过的地址和端口号时才进行转发. 端口受限锥形NAT为内部结点提供了和对称NAT相同等级的保护,以隔离未关联的数据.

假设A和B用了上节介绍的UDP打洞技术来打造点对点通路,那样会发生什么呢?第一A和B会得到由S观测到的他们的公网IP和端口号,然后给他们的地址发送信息. 两个推广客户端只有在NAT允许内网主机对内网其他主机发起UDP会话的时候才能正常通信,大家把这样的情况称之为"回环传输“(loopback transmission),由于从内部 到达NAT的数据会被“回送”到内网中而不是转发到外网. 比如,当A发送一个UDP数据包给B的公网地址时,数据包刚开始有源IP地址和端口地址10.0.0.1:1234和 目的地址155.99.25.11:62001,NAT收到包后,将其转换为源155.99.25.11:62000和目的10.1.1.3:1234,然后再转发给B. 即使NAT支持 回环传输,这种转换和转发在此状况下也是没必要的,且大概会增加A与B的对话延时和加重NAT的负担.

目前考虑如此一种情景,两个推广客户端A和B正好在同一个NAT之后,因此在同一个内网网段之内. 推广客户端A和服务器S打造了一个UDP会话,NAT为此分配了公网端口62000,B同样和S打造会话,分配到了端口62001,如下图:

当推广客户端B想要发起一个对推广客户端A的点对点链接时,要么链接A的外网地址155.99.25.11:62000,要么链接A的内网地址10.0.0.1:1234,然而两种方法链接都会失败. 链接10.0.0.1:1234失败自不需要说,为何链接155.99.25.11:62000也会失败呢?来自B的TCP SYN握手请求到达NAT A的时候会被拒绝,由于对NAT A来讲只有外出的链接才是允许的. 在直接链接A失败之后,B可以通过S向A中继一个链接请求,从而从A方向“逆向“地打造起A-B之间的P2P链接.

逆向链接

对称NAT正好相反,不在所有公网-内网对的会话中保持一个固定的端口绑定. 其为每一个新的会话开辟一个新的端口. 如下图所示:

假设A开始给B的公网地址发送UDP数据的同时,给服务器S发送一个中继请求,需要B开始给A的公网地址发送UDP信息. A往B的输出信息会致使NAT A打开 一个A的内网地址与与B的外网地址之间的新通讯会话,B往A亦然. 一旦新的UDP会话在两个方向都打开之后,推广客户端A和推广客户端B就能直接通讯, 而无须再通过引导服务器S了.

推广客户端A和推广客户端B不直接通信,而是先都与服务端S打造链接,然后再通过S和他们打造的通路来中继传递的数据. 这钟办法的缺点非常明显, 当链接的推广客户端变多之后,会显著增加服务器的负担,完全没体现出点对点的优势. 但这种办法有哪些好处是能保证成功,因此在实践中也常作为一种备选策略.

固定端口绑定

关于TCP打洞,有一点需要提的是,由于TCP是基于连接的,所以任何未经连接而发送的数据都会被丢弃,这致使在recv的时候是没办法直接从peer端读取数据. 其实这对UDP也一样,假如对UDP的socket进行了connect,其也会忽视连接以外的数据,详见connect(2).

这是最可信但也是最低效的一种点对点通信达成. 其原理是通过一个有公网IP的服务器中间人对两个内网推广客户端的通信数据进行中继和转发. 如下图所示:

在打造了一对(公共IP、公共端口)和(内部网IP、内部网端口)二进制文件后,只须一个会话仍处于活动状况,Cone NAT就会为应用程序的所有后续会话(相同的内部网IP和端口)重用这组绑定。比如,假设推广客户端A已经打造了两个连续的外部会话。只有一个公共互联网端点(155.99.25.11:62000)从同一内部端点(10.0.0.1:1234)映射到两个不一样的外部服务器S1和S2。Cone NAT确保在地址转换过程中推广客户端端口的“身份”维持不变。由于基本的互联网地址转换和防火墙,

第二种办法在当两个端点中有一个没有中间件的时候有效. 比如,推广客户端A在NAT之后而推广客户端B拥有全局IP地址,如下图:

目前假设推广客户端A计划与推广客户端B直接打造一个UDP通信会话. 假如A直接给B的公网地址138.76.29.7:31000发送UDP数据,NAT B将非常可能会无视进入的 数据,由于源地址和端口与S不匹配,而刚开始只与S打造过会话. B往A直接发信息也类似.

锥形互联网地址转换

受限锥形NAT只能转发符合某个条件的输入数据包. 条件为:外部IP地址匹配内网主机之前发送一个或多个数据包的结点的IP地址. AT通过限制输入数据包为一组“已知的”外部IP地址,有效地精简了防火墙的规则.

UDP打洞技术有一个主要的条件:只有当两个NAT都是Cone NAT时才能工作. 由于其保持了一个给定的二元组 和二元组固定的端口绑定,只须该UDP端口还在用中,就不会变化. 假如像对称NAT一样,给每一个新会话分配一个新的公网端口,就 会致使UDP应用程序没办法用跟外部端点已经打通了的通信链路. 因为Cone NAT是当今最广泛用的,尽管有一小部分的对称NAT是不支持打洞的,UDP打洞 技术也还是被广泛采纳应用.

具体达成

端点在不一样的NAT之后

Server S | | +----------------------+----------------------+ | |NAT A NAT B | | | |Client A Client B

到现在为止,最容易见到的是NAPT,它测试和修改传入和传出数据包的IP地址和端口号,从而允很多个内部网主机同时共享一个公共IP地址。

Server S 18.181.0.31:1234 | | NAT X A-S 155.99.25.11:62000 B-S 155.99.25.11:62001 | | +----------------------+----------------------+ | | NAT A NAT B192.168.1.1:30000 192.168.1.2:31000 | | | | Client A Client B 10.0.0.1:1234 10.1.1.3:1234

互联网地址转换器

假设推广客户端A和推广客户端B的地址都是内网地址,且在不一样的NAT后面. A、B上运行的点对点应用程序和服务器S都用了UDP端口1234,A和B分别初始化了 与Server的UDP通信,地址映射如图所示:

依据推广客户端的不同,推广客户端之间进行点对点传输的办法也略有不同,这里介绍了现有些穿越中间件进行点对点通信的几种技术.

目前假设A和B计划打造直接点对点链接,用普通的办法自然是没问题的,那能否优化呢?一种想当然的优化方法是A直接把信息发送给NAT B的 内网地址192.168.1.2:31000,且B通过NAT B把信息发送给A的路由地址192.168.1.1:30000,不幸的是,A和B都没方法得知这两个目的地址,由于S只看见了推广客户端 ‵全局‵地址155.99.25.11. 退一步说,即使A和B通过某种办法得知了那些地址,大家也没办法保证他们是可用的. 由于ISP分配的子网地址可能和NAT A B分配的子网地址 域相冲突. 因此推广客户端没其他选择,只能用S来进行打洞并进行回环传输.

假设NAT X是一个互联网提供商ISP部署的工业级NAT,其下子网共用一个公网地址155.99.25.11,NAT A和NAT B分别是其下不同用户的网关部署的NAT. 只有服务器S 和NAT X有全局的路由地址. Client A在NAT A的子网中,同时Client B在NAT B的子网中,每经过一级NAT都要进行一次互联网地址转换.

Server S1 Server S218.181.0.31:1235 138.76.29.7:1235 | | | | +----------------------+----------------------+ | ^ Session 1 (A-S1) ^ | ^ Session 2 (A-S2) ^ | 18.181.0.31:1235 | | | 138.76.29.7:1235 | v 155.99.25.11:62000 v | v 155.99.25.11:62001 v | Symmetric NAT 155.99.25.11 | ^ Session 1 (A-S1) ^ | ^ Session 2 (A-S2) ^ | 18.181.0.31:1235 | | | 138.76.29.7:1235 | v 10.0.0.1:1234 v | v 10.0.0.1:1234 v | Client A 10.0.0.1:1234

点对点通信技术

不少目前的点对点系统都达成了这种技术,但其局限性也是非常明显的,只有当其中一方有公网IP时链接才能打造. 愈加多的状况下, 通信的双方都在NAT之后,因此就要用到大家下面介绍的第三种技术了.

防火墙主要限制内网和公网的通信,一般丢弃未经授权的数据包。防火墙将测试(但不修改)试图进入内部网的数据包的IP地址和TCP/UDP端口信息。

NAT不只检查传入数据包的报头,还会对其进行修改,从而使同一内网中的不同主机共享较少的公共IP(一般是一个)。

第三种点对点通信技术,被广泛使用的,名为“点对点打洞“. 点对点打洞技术依靠于一般防火墙和Cone NAT允许正当的点对点应用程序在中间件中打洞且与他们打造直接链接的特质. 下面主要考虑两种容易见到的场景,与应用程序怎么样设计去完美地处置这部分状况. 第一种场景代表了大部分状况,即两个需要直接链接的推广客户端处在两个不一样的NAT之后; 第二种场景是两个推广客户端在同一个NAT之后,但推广客户端自己可能并不知晓(譬如同一ISP下面的不同子网).

Server S 18.181.0.31:1235 | | +----------------------+----------------------+ | | NAT A |155.99.25.11:62000 | | | | | Client A Client B 10.0.0.1:1234 138.76.29.7:1234

一个UDP打洞的例子见点对点-Over-MiddleBoxes-Demo

TCP打洞(TCP Hole Punching)

端口受限锥形NAT(Port-Restricted Cone NAT)

受限锥形NAT(Restricted Cone NAT)

Server S 18.181.0.31:1234 | | +----------------------+----------------------+ | | NAT A NAT B155.99.25.11:62000 138.76.29.7:31000 | | | | Client A Client B 10.0.0.1:1234 10.1.1.3:1234

:15px;">在一个新会话打造了公网/内网端口绑定之后,全锥形NAT下面会同意对应公网端口的所有数据,无论是来自什么终端. 全锥NAT有时也被叫做“混杂”NAT.

Server S 18.181.0.31:1234 | | NAT A-S 155.99.25.11:62000 B-S 155.99.25.11:62001 | +----------------------+----------------------+ | | Client A Client B10.0.0.1:1234 10.1.1.3:1234

所以,假如大家要进行TCP打洞,一般需要重用当地的endpoint来发起新的TCP连接,如此才能将已经打开的NAT借助起来. 具体来讲,则是要设置socket的 SO_REUSEADDR或SO_REUSEPORT属性,依据系统不同,其达成也不尽一致. 通常来讲,TCP打洞的步骤如下:


对于这个状况,优化策略是非常直观的. 当A和B刚开始通过S交换地址信息时,他们应该包含自己的IP地址和端口号,同时也包含从服务器看的我们的 地址和端口号. 然后推广客户端同时开始从他们已知的两个的地址中同时开始互相发送数据,并用第一个成功通信的地址作为他们地址. 假如两个推广客户端在同一个 NAT后,发送到他们内网地址的数据最大概先到达,从而可以打造一条不经过NAT的通信链路;假如两个推广客户端在不一样的NAT之后,发送给他们内网地址的数据包 根本就到达不了他们,但仍然可以通过公网地址来打造通路. 值得一提的是,虽然这部分数据包通过某种方法验证,但在不同NAT的状况下完全大概会致使A往B 发送的信息发送到其他A内网网段中无关的结点上去的.

中继

在一些拓朴结构中,可能会存在多级NAT设施,在这样的情况下,假如没关于拓朴的具体信息, 两个Peer要打造“最佳”的点对点链接是不可能的,下面来讲为何. 以下图为例:

UDP打洞技术有很多有用的性质. 一旦一个的点对点链接打造,链接的双方都能反过来作为“引导服务器”来帮其他中间件后的推广客户端进行打洞, 很大降低了服务器的负载. 应用程序无需知晓中间件具体是什么,由于以上的过程在没中间件或者有多个中间件的状况下 也一样能打造通信链路.

服务器S1服务器s 1218 . 181 . 0 . 31:1235 138 . 76 . 29 . 733601235 | | |-| ^会话1 (A-S1) ^ | ^会话2(a-S2)^ | 18 . 181 . 0 . 313:1235 | | | 138 . 76 . 29 . 7:1235 | v 155 . 99 . 25 . 11115

互联网地址-端口转换器(NAPT)

全锥形互联网地址转换(全锥形互联网地址转换)

挂机赚一小时75元 p2p赚钱原理

一些术语

基本NAT将内部网主机的IP地址映射到公共IP,而不改变其TCP/UDP端口号。基本NAT一般只在NAT有公共IP池时有用。

UDP打洞

防火墙

基本互联网地址转换

端点在相同的NAT之后

端点在多级NAT之后

普通的互联网编程,都是推广客户端比服务端要难,由于要处置与服务器的通信同时还要处置来自用户的事件;对于点对点推广客户端来讲更是这样,由于点对点推广客户端不止作 为推广客户端,同时也作为对等连接的服务器端. 这里的大体思路是,输入命令传输给服务器之后,接收来自服务器的反馈,并实行相应代码. 比如A想要与B打造 通信链路,先给服务器发送punch命令与给B发送数据,服务器接到命令后给B发送punch_requst信息与A的端点信息,B收到之后向A发送数据打通通路,然 后A与B就可以进行点对点通信了. 经测试,打通通路后即使把服务器关闭,A与B也能正常通信.

推广客户端A内网地址为10.0.0.1,且应用程序正在用TCP端口1234. A和服务器S打造了一个链接,服务器的IP地址为18.181.0.31,监听1235端口. NAT A给推广客户端A分配了TCP端口62000,地址为NAT的公网IP地址155.99.25.11, 作为推广客户端A对外目前会话的临时IP和端口. 因此S觉得推广客户端A就是155.99.25.11:62000. 而B因为有公网地址,所以对S来讲B就是138.76.29.7:1234.

对称NAT(Symmetric NAT)

标签: 挣钱指南(2)