iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0
Mobile Development

IOS菜逼八連續30天挑戰系列 第 30

Day 30 後記-TUTK跟一些P2P介紹

  • 分享至 

  • xImage
  •  

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


上一篇
Day 29 Realm的練習-使用者註冊系統(3/3)
系列文
IOS菜逼八連續30天挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
juck30808
iT邦研究生 1 級 ‧ 2021-10-12 18:34:34

恭喜即將完賽!!!

我要留言

立即登入留言