Day 30 後记-TUTK跟一些P2P介绍

Tutkt P2P使用方法介绍:

连接原理为:

(1) -> Device向P2P Server注册
(2) -> 客户端向P2P Server请求连接
(3) -> P2P为客户端打洞
(4) -> P2P为Device打洞
(5) -> Device跟客户端可以不用透过P2P,而直接连接

我们需要理解的是,P2P是一个叫做"点对点通信,或称为对等联网"的东西,在P2P里面,全部东西都是对等的,意思就是peer-to-peer,藉由每个使用者,形成一个网路体系,它的作用在於,降低资料在传输过程中遗失的风险。

(传统传输方式)如下图:

(P2P)如下图:

那我们要去理解一下什麽叫做打洞(或称打孔):假设我们的Device(以下简称A) ,然後Client(简称B),我们要实现A跟B直接通信,就必须经过打洞,也就是穿透双方的NAT,假设今天有个公网C,A跟B各发送数据到C,C就得到了AB的IP,接着C之後要跟AB建立对谈就不用透过NAT勒,但这仅仅是C能跟AB进行通讯,我们要做的是,A向NAT-A向B的公网发数据包,这样B就可以对A进行存取,反之,B也一样,这样AB就可以"透过NAT"直接通讯~

(上面所讲的,都是建立在有不同NAT的情况下),如下图:

如果是单一NAT的话,AB是可以直接通信的,如下图:

然後我们来了解一下什麽是NAT跟爲什麽要用NAT~

首先,NAT的全名是(Network Address Translation),NAT的使用,是因为IPV4位址不够用,所以需要透过NAT来设置私有服务器,然後再透过NAT把内部封包,传给外部网路
,虽然IPV6可以解决位址不够问题,但目前众多网络设备和网络应用大多是基於IPv4的,因此在IPv6广泛应用之前,使用一些过渡技术,NAT就是这众多过渡技术中的一种

NAT的种类:

1.全锥型NAT(Full Cone NAT):
最简单的一种NAT,只做最简单的封包交换,没有对端口等等做限制

2.位址受限锥形NAT(Restricted Cone NAT)
只对IP做限制,,只有符合要求的目的IP才可以通讯,没有对端口做限制,然後不能主动对内网做通讯,要内网先对外网发起主动通讯,外网才能对内网发起通讯

3.端口受限锥形NAT(NAT Port Restricted Cone NAT)
跟第二个很像,但是多了端口限制,简单说,就是,一次只能一个拉~

4.对称式NAT(Symetric NAT)
简单说,就是把送出的东西独立出来,让他变成唯一得通道,一对一的概念

TCP/UDP打洞:
基本上,打洞都是基於在UDP上,因为Socket的关系,UDP可以允许多个Socket连接到同一个端口上,TCP不行,Socket翻译是插座,间单说就是端点,只要使用者连线到Socket,然後可以连线到不同通讯端点,在之前提到的,打洞过程,AB会在本地建立Socket,之後要连出去,又会在建立连接外部的Socket,但是这里就碰到问题,TCP不允许多个Socket,所以就没办法透过TCP打洞,但是TCP对比UDP,在安全性上,TCP相对安全的,如果真的要用TCP打洞,可以透过"端口重用的方式解决"

备注:
TCP VS UDP

TCP:
一次传一个封包,然後会跟接收方确认识别码跟序号,接收方收到後会回传讯号给传送方,如果失败,就不会传送讯号,可以验证是否有遗失或错误,这样代表传送方会需要再传送一次,缺点是传送速度慢。

UDP:
一次传送多个封包,然後不会跟接收方确认,优点是传送速度快。

如图:

中继器(relay),如果P2P没办法实现穿透,会改走Relay Server,前提是Relay Server要先有公网的IP:

(1) -> 客户端向中继器传送封包
(2) -> 中继器传送讯号给P2P Server
(3) -> P2P把客户端的IP给装置
(4) -> 装置跟设备透过Relay Server,不走P2P Server

Kalay Platform:

IOTC Platform Service -> 整合全部的IOTC的API

IOTC Basic Data Transfer Module (IOTC API) -> 提供物联网的连线服务,让客户端跟装置可以连线

Audio/Video Transfer Module (AV API) -> 音讯跟视频的API

Reliable Data Transfer Module (RDT API) -> 建立在IOTC基础的API,确保资料的送达

Tunnel Data Transfer Module (Tunnel API) -> 透过这个隧道API,所传输的资料会经过一些公共传输的协定例如,http,ssh等等("The tunnel API uses public key authentication to connect with a bastion server in your network")

消息推送:
把一些消息等等,第三方平台传输得讯息给到客户端,譬如你是用Google建立跟设备的连线,Google如果有软件要更新,就会透过这个方式传送更新通知给客户端

他是透过腾讯消息平台,再转发给第三方的平台
APNS -> Apple Push Notification Service(Apple推播通知服务)

GCM -> Google Cloud Messaging(Google云端推播服务)

Baidu -> 百度云推送

图片来源以及参考资料网站来源:
https://nordvpn.com/zh-tw/blog/tcp-udp-bijiao/
https://blog.51cto.com/u_13291771/3110070
http://www.52im.net/thread-542-1-1.html
https://blog.csdn.net/jakejohn/article/details/87445555
https://wayne1818.gitbooks.io/beaglebone_chap1/content/32.html


<<:  【第二八天 - Flutter 开发套件之旅(上)】

>>:  Day27 海鲜义大利炖饭Risotto

Day 23 - 字串又来了,我还是没吃到串烧

Outline 可以把这三个东西理解成 class 的更多运用。 C++ Strings : 比之前...

基本操作 - 历史资讯

根据官方说明,因为历史资料的查询蛮耗资源的,有可能会拖慢系统的速度,所以官方不建议使用,而且有每5秒...

全端入门Day03_何谓全端之前端中篇

今天就承接昨天说的前端 前端所使用的程序语言 我们这边以网页为例,前端所要用的程序语言主要有3个: ...

DAY24:模型训练ResNet152

ResNet 简介 在当时的CNN中,都是较浅层的设计,较深层的训练未必会带来正面效果,容易训练不起...

DAY6-我的SQL

前言: 上一篇文章中,我们最後完成了一个简单的网页留言版,主要是使用php的GET方法来进行资料的...