顺水外汇EA交易网MT4
标题:
比特币通信协议 - 币圈消息
[打印本页]
作者:
wangjia
时间:
2022-11-3 15:10
标题:
比特币通信协议 - 币圈消息
比特币通信协议篇11、二、TURN简介。在典型的情况下,TURN客户端连接到内网中,并且通过一个或者多个NAT到达公网,TURN服务器架设在公网中,不同的客户端以TURN服务器为中继和其他peer进行通信,。
2、| CreatePermissionreq(PeerA)
作者:
回复用户2
时间:
2022-11-3 15:11
。
3、在下一次request请求中,客户端加上了收到的nonce,以及USERNAME和REALM等属性,再次发送到TurnServer:。
4、1:15:210:49191。
5、服务器如果通过验证,就会返回successresponse,随后Client可以通过上文说到的两种方法与Peer进行通讯,比如下面的Sendindication方法:。
6、
作者:
回复用户3
时间:
2022-11-3 15:12
||。|(15:50000)
作者:
回复用户3
时间:
2022-11-3 15:13
。
7、TurnClient运行在106,为了方便,令peer也在106运行,端口为59593。
8、七、信道机制(Channels)。
9、2:15:3478|+-+//PeerA。
10、Client’sServer|/
作者:
回复用户6
时间:
2022-11-3 15:14
。
比特币通信协议篇21、||dropped||。
作者:
回复用户6
时间:
2022-11-3 15:15
|v|T|2:49582。
2、|| ==data====||。
3、
作者:
回复用户6
时间:
2022-11-3 15:15
|/+-+。如果TURN使用于ICE协议中,由ICE在多个候选中进行评估,一般来说中继的优先级都是最低的。TURN协议被设计为ICE协议(InteractiveConnectivityEstablishment)的一部分,而且也强烈建议用户在他们的程序里使用ICE,但是也可以独立于ICE的运行。值得一提的是,TURN协议本身是STUN的一个拓展,因此绝大部分TURN报文都是STUN类型的,作为STUN的一个拓展,TURN增加了新的方法和属性。因此阅读本章时最好先了解一下STUN协议!
4、PeerA。当服务器收到SendIndication之后,会将DATA部分的数据解析出来,并将其以UDP的格式转发到对应的端点去,Send/DataIndication是不支持验证的,因为长效验证机制不支持对indication的验证,因此为了防止攻击,TURN要求client在给对等端发送indication之前先安装一个到对等端的许可(permission),client到PeerB没有安装许可,导致其indication数据包将被服务器丢弃,对于peerB也是同样:。
5、在上一章也提到过,因为RFC是标准协议,因此实现上往往有良好的兼容性和拓展性.现存的开源P2P应用程序,如果按照标准来设计,可以很容易与之对接.其中比较著名的就是PJSIP,PJSIP是一个开源的多媒体通信库,实现了许多标准协议,如SIP,SDP,RTP,STUN,TURN和ICE.当然我们也能自己实现.比如GitHub上的TurnServer就是其中一个对TURN服务端的实现.下面在局域网环境下对TURN数据包进行简要分析.首先有如下机器情况:。
6、HostTransportTransport|//
作者:
回复用户3
时间:
2022-11-3 15:16
。
7、|+-+
作者:
回复用户2
时间:
2022-11-3 15:16
A|/Address。
8、TransportAddressTransportAddressAddress。
9、| Allocatefailure
作者:
回复用户2
时间:
2022-11-3 15:17
。
10、TURN的全称为TraversalUsingRelaysaroundNAT,是STUN/RFC5389的一个拓展,主要添加了Relay功能。如果终端在NAT之后,那么在特定的情景下,有可能使得终端无法和其对等端进行直接的通信,这时就需要公网的服务器作为一个中继,对来往的数据进行转发。这个转发的协议就被定义为TURN。TURN和其他中继协议的不同之处在于,而这些行为如何完成,是不在TURN协议范围之内的。其中一个可用的方式是客户端通过email来告知对等端信息,另一种方式是客户端使用一些指定的协议,如“introduction”或“rendezvous”,详见RFC。
比特币通信协议篇31、对于一些应用程序,比如VOIP(VoiceoverIP),在Send/DataIndication中多加的36字节格式信息会加重客户端和服务端之间的带宽压力.为改善这种情况,TURN提供了第二种方法来让client和peer交互数据.该方法使用另一种数据包格式,即ChannelDatamessage,信道数据报文.ChannelDatamessage不使用STUN头部,而使用一个4字节的头部,包含了一个称之为信道号的值(channelnumber).每一个使用中的信道号都与一个特定的peer绑定,客户端首先发送一个信道绑定请求(ChannelBindRequest)到服务器,并且可以通过重新发送ChannelBindRequest来刷新持续时间.和Allocation不同的是,并没有直接删除绑定的方法,只能等待其超时自动失效.。
2、| Allocaterequest
作者:
回复用户5
时间:
2022-11-3 15:18
。
3、SendMechanism使用了Send和Data指令(Indication).其中Send指令用来把数据从client发送到server,而Data指令用来把数据从server发送到client.当使用Send指令时,客户端发送一个SendIndication到服务端,其中包含:XOR-PEER-ADDRESS属性,包含要传给对等端的信息.。
4、服务器接收到了正确的allocation请求,于是返回succcessresponse,可以看到在返回中带有默认的lifetime为1800秒,XOR-MAPPED-ADDRESS以及XOR-RELAY-ADDRESS等属性:。
5、客户端首先发送Allocate请求,但是没带验证信息,因此STUN服务器会返回errorresponse,客户端收到错误后加上所需的验证信息再次请求,才能进行成功的分配.。
6、通过对TurnServer发送indication告知数据的接收方以及数据内容让TurnServer进行转发,从而间接地向对等端发送DATA.而从对等端来看,
7、TURN支持两种方式来创建许可,比如其中一种就是发送CreatePermissionrequest。
8、|Client| -|A| -|Server| |PeerB|。
9、即ChannelDatamessage的头部中头2字节,值得一提的是信道号的选取有如下要求:。
10、Client’s|PeerB。
比特币通信协议篇41、| Dataind(PeerA)
作者:
回复用户5
时间:
2022-11-3 15:19
。
2、
作者:
回复用户2
时间:
2022-11-3 15:19
。+ +
作者:
回复用户1
时间:
2022-11-3 15:20
+ +||+ +。
3、| -Allocatesuccessresp
作者:
回复用户6
时间:
2022-11-3 15:21
。
4、四、传输。clientserverAB。
5、0x0000-0x3FFF:这一段的值不能用来作为信道号。
6、上一篇STUN协议中介绍了在NAT上进行端口绑定的通用规则,应用程序可以根据这个协议来设计网络以外的通信。但是,STUN/RFC5389协议里能处理的也只有市面上大多数的ConeNAT,对于SymmetricNAT,传统的P2P打洞方法是不适用的。因此为了保证通信能够建立,我们可以在没办法的情况下用保证成功的中继方法,虽然使用中继会对服务器负担加重,而且也算不上P2P,但是至少保证了最坏情况下信道的通畅,从而不至于受NAT类型的限制。TURN/RFC5766就是为此目的而进行的拓展!
7、||===data=== ||。
8、| Refreshrequest -
作者:
回复用户4
时间:
2022-11-3 15:22
。
9、|(PeerAto0x4001)
作者:
回复用户2
时间:
2022-11-3 15:22
。
10、Server-Reflexive+ +。
比特币通信协议篇51、服务器和客户端都保存有一个成为五元组(5-TUPLE)的信息,比如对于客户端来说,和传输协议;服务器也是类似,因为那才是服务器所见到的.服务器和客户端在分配请求中都带有5-TUPLE信息,并且也在接下来的信息传输中使用,因此彼此都知道哪一次分配对应哪一次传输.。
2、|dropped
作者:
回复用户6
时间:
2022-11-3 15:23
。TurnServer运行在110,使用默认端口3478,采用用户名和密码验证,其中用户名为pannzh,密码123456。
3、还是那句老话,关于协议具体的细节可以去翻阅RFC5766的草稿,其中每个属性以及其格式都介绍得很详细.。
4、这里使用wireshark来抓包分析,关于wireshark的简介可以参照我之前的文章细说中间人攻击(一),首先TurnClient发送Allocation请求:。
5、|| ==data==================|。
6、前文也说过,若要和peer进行通信,必须先创建一个许可,因此Client向服务器发送CreatePermission请求,其中携带了peer的信息:。
7、150:32102||。AddressAddress|//|+ +。
8、////////。client和peer之间有两种方法通过TURNserver交换应用信息,第一种是使用Send和Data方法(method),第二种是使用通道(channels),两种方法都通过某种方式告知服务器哪个peer应该接收数据,以及服务器告知client数据来自哪个peer.。
9、0x8000-0xFFFF:这一段是保留值,留给以后使用。
10、| Sendind(PeerA)
作者:
回复用户5
时间:
2022-11-3 15:24
。
比特币通信协议篇61、八、实例。|(401Unauthorized)
作者:
回复用户6
时间:
2022-11-3 15:25
。
2、可以看到第一次requst被服务器拒绝,因为后者要求nonce验证信息,服务器的返回中包含了nonce信息,除此之外还包含了ERROR-CODE,SOFTWARE,FINGERPRINT属性.。
3、TURN|/^|PeerA|。
4、| [0x4001]data
作者:
回复用户1
时间:
2022-11-3 15:26
。
5、五、分配(Allocations)。
6、
作者:
回复用户2
时间:
2022-11-3 15:26
T
作者:
回复用户1
时间:
2022-11-3 15:28
||。| Sendind(PeerB)
作者:
回复用户5
时间:
2022-11-3 15:28
。
7、连接公网的TURN服务器后,即NAT分配的公网IP和端口)1:7000,此时Client会通过TURN命令创建或管理ALLOCATION,allocation是服务器上的一个数据结构,50000,另外两个对等端若要通过TURN协议和Client进行通信,。
8、一、前言。TURNTURNPeerPeer。
9、| [0x4001]data
作者:
回复用户5
时间:
2022-11-3 15:29
。
10、+ +
作者:
回复用户1
时间:
2022-11-3 15:30
|+ +/+ +。
极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:
比特币通信协议
喜欢 (0)
欢迎光临 顺水外汇EA交易网MT4 (http://waterforex.com/)
Powered by Discuz! X3.2