之前工作上遇到需要将自家 IPCam 与 iOS/Android 手机做 P2P 串流影音,研究了许多有关 P2P 的技术,因此想写一系列有关 P2P 技术的文章.
在了解一门技术前,我们先来看看为什麽会需要这门技术,这门技术是为了解决什麽问题
所有 client 都连接到同一台 Server,Server 拥有所有 client 的数据讯息
可以想成是国家央行发行货币,所有人的钱都来自国家央行
顾名思义就是不只有一台 server,会有多台 server ,所以当一台或多台 server 故障时,client 还是可以继续从其他 server 存取数据
可以想成是很多银行可以存钱领钱,有美银、高盛、摩根、富国等等银行,且每家都能互相转钱
中心化网路
有较高的容错率 (因为有多个 server)类似 Decentralized , 没有唯一的中心 server,用户间可以共享资料所有权,消除了中心 server 的概念,如此可以避免中心 server 故障导致所有 user 无法使用的问题,internet 就是一个分布式网路,p2p 也属於此类
可以想成是目前的区块链比特币,并没有像央银银行的角色,货币是由链上的所有主机帮你做验证交易纪录等等,必须要串改超过 51% 以上的主机才能成功串改资讯,较安全
三种网路方式皆有各自优点,可以依照遇到的情况去设计.
在 IoT 应用中,假如你要控制家中的 IPCam,就会有以下两种做法
疑问 : 分布式方式在复杂的 Internet 下,如何让手机与 IoT 装置沟通,就是接下来我们要讲解 P2P 技术的部分
P2P 是一种无中心化的技术,每一个 client 既是 client 也是 server,在每台主机皆存在共享的数据,以此降低资料遗失安全性等等的风险.
Internet 能够如此成功进入人类的生活中,IP 的设计可以说是非常重要的一个基础,可以把 IP 想成你在 Internet 世界里的地址,任何人要寄信给你都需要知道你的地址才能与你通信,IPv4 的设计就是希望可以容纳大家上网,IPv4 总共有 4 * 8(bits) = 32 bits,大约为 43 亿,在当时认为已经非常足够使用,但如今在 Internet 高速发展下,IPv4 已经不够用了,所以网路专家一方面寻找 IPv4 替代方案(也就是 IPv6),一方面研究如何减缓 IPv4 耗尽的问题,於是 NAT 诞生了.
就如同字面上的意思,他会在私有网域及公有网域之间做将封包的 IP 做转换,根据 RFC1918 保留了三段 IP 地址给内部网路做使用,10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255,这些地址在公有网路上是没有意义的,且不需像 IANA 做申请,如此就大大增加了 IPv4 环境可以容纳的上网装置,因为一个组织只需要一个公有 IP 即可让所有内部装置连上 Internet.
但是 NAT 这样的设计是有缺点的,外部网路主机无法直接与在 NAT 路由器内的内网主机进行连线
一般没有 NAT 情况下,Internet 上的两台主机只要知道彼此 IP 就能进行通讯
在有一方於 NAT 情况下,外部网路主机 B 要与内部网路主机 A 通讯,就会遇到 NAT 不知道要将来自 B 的封包转给哪一台内部主机
除非 A 已经先访问过 B 主机的情况下,NAT 会将 A 的转址纪录在 mapping table 中,之後由 B 发给 A 的封包,NAT 就会透过 mapping table 转址将封包正确转发给 A
但如果两台主机皆在 NAT 下,此时不管是由 A 或 B 发起 (A → B 或 B → A),都无法连接到对方,因为两边的 mapping table 都是空的没有纪录
此时就必须要由任一方先发起封包,假设由 A 发起 (1),此时 A 的 NAT mapping table 会留下 A 的转换 IP (2),但封包到了 B 的 NAT 时,因 B 的 NAT mapping table 为空,所以会先失败 (3),再来由 B 发起封包给 A (4),会在 B NAT mapping table 留下 B 的转换 IP (5),封包到了 A NAT 後 (6),因 A 的 NAT mapping table 存在 A 的 IP,所以封包可以顺利到达 A (7),A 在发送封包到 B (8),此时双方的 NAT mapping table 皆有纪录(9, 10),在 NAT 里的 Client 就能顺利相互通讯,此时 P2P 就成功了,反之亦然
类似受限制锥形 NAT(Restricted cone NAT),但是还有埠限制。
Symmetric NAT 无法实现 P2P ,原因就在於对称型每次的请求都会对应到不同的外部 IP 和 Port
有关 P2P、IPv4、NAT 就先介绍到此,下一篇会介绍实现 P2P 需要哪些协定工具,STUN、TURN、ICE 是什麽
>>: 搞懂 P2P 技术 (2) - STUN x TURN x ICE
前言 写在前面 这是一个记录自己成长的三十天挑战 进入公司原本说要做 data 结果进来之後才发现很...
哈罗,大家好,我是韦恩。今天的文章是系列文的第三十六篇。我们会把完整snippet的元件与routi...
前言 HIYO!又是阿峻我啦~ 再经过之前的环境处理系列之後,我们就要来开始实作几个常见的 Deep...
今天的影片内容为介绍具有强大功能的Pandas模组(对...熊猫模组) 利用这个模组,可以很方便的执...
终於读到我很想读的段落了。 积极主动参与 active engagement - 定义 这里讲的是「...