wangjia 发表于 2022-11-3 15:10:58

比特币通信协议 - 币圈消息

比特币通信协议篇11、二、TURN简介。在典型的情况下,TURN客户端连接到内网中,并且通过一个或者多个NAT到达公网,TURN服务器架设在公网中,不同的客户端以TURN服务器为中继和其他peer进行通信,。
2、| CreatePermissionreq(PeerA)

回复用户2 发表于 2022-11-3 15:11:33


3、在下一次request请求中,客户端加上了收到的nonce,以及USERNAME和REALM等属性,再次发送到TurnServer:。
4、1:15:210:49191。
5、服务器如果通过验证,就会返回successresponse,随后Client可以通过上文说到的两种方法与Peer进行通讯,比如下面的Sendindication方法:。
6、

回复用户3 发表于 2022-11-3 15:12:30

||。|(15:50000)

回复用户3 发表于 2022-11-3 15:13:12


7、TurnClient运行在106,为了方便,令peer也在106运行,端口为59593。
8、七、信道机制(Channels)。
9、2:15:3478|+-+//PeerA。
10、Client’sServer|/

回复用户6 发表于 2022-11-3 15:14:11


/img/280.jpg
比特币通信协议篇21、||dropped||。

回复用户6 发表于 2022-11-3 15:15:00

|v|T|2:49582。
2、|| ==data====||。
3、

回复用户6 发表于 2022-11-3 15:15:36

|/+-+。如果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:09


7、|+-+

回复用户2 发表于 2022-11-3 15:16:43

A|/Address。
8、TransportAddressTransportAddressAddress。
9、| Allocatefailure

回复用户2 发表于 2022-11-3 15:17:30


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
页: [1] 2 3
查看完整版本: 比特币通信协议 - 币圈消息