前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebRTC,P2P技术,IPv6的一些思考

WebRTC,P2P技术,IPv6的一些思考

作者头像
Jean
发布2019-11-18 21:55:17
2.7K0
发布2019-11-18 21:55:17
举报
文章被收录于专栏:Web行业观察Web行业观察

本文涵盖计算机网络,软件等多方面的知识。

不过放心,这篇文章不会只告诉你p2p”是什么“,也不会仅仅告诉你”为什么“,而要深刻探讨它的设计”是否合理“。

传统计算机行业 = IT行业 + 软件行业

作为一个网络工程出身的假工程师,我虽然半道转行做软件,但仍然持续关注着IT行业的发展。这不,近年来成熟起来的WebRTC技术更是将web与网络这两个毫不相关的科研方向结合了起来:web是什么?web是软件行业的主流方向,属于互联网应用技术,网络呢?网络是IT运维的一个方向,属于互联网建设技术。

然而,没有完美的层次模型,任何人为划分的层次化系统都不可避免的需要层次之间的妥协,就像我们应用层编程仍然要考虑采用TCP还是UDP一样。没有网络基础的程序员们碰到WebRTC一定一头雾水,甚至连p2p都不知道是啥,我来为大家解惑。

稍微有点网络常识的人都知道,在互联网上通讯理应是很简单的:一台电脑访问另一台电脑的ip地址即可,根本不需要服务器。既然微信不会保留用户的聊天记录,为啥还需要微信服务器呢?很显然,我们聊天的时候并不是p2p的,而是通过服务器来交换消息。稍微有点常识的人都知道这种通过第三方服务器来代理“聊天”的方式远不如2台电脑直接聊天来的快,而且还能避免隐私泄露。

注:p2p指peer to peer,对等体到对等体:在网络上2点之间直接交流而不走中间的服务器叫做p2p通讯。

去中心化通信的问题

那为啥微信客户端不能替你直接呼叫你的好友,非要让微信服务器代你呢?有许多原因,原因之一是你不知道好友的ip地址。

。。。

这个理由看似合情合理,那如果知道呢?也不行,因为IP地址是地理地址,每个省每个市都有不同的ip地址(比如南京市电信就有超过65536个地址),你可以做一趟地铁,每过5站查一次stun服务,每次都能看到不同的ip地址。

stun服务可以查询到自己在互联网上的ip地址,是一种廉价的服务,效果等同于百度搜索”IP地址“关键字得到的结果。常用的stun服务器来自谷歌:stun:stun.l.google.com:19302

所以,一个人在地球上是不断运动的,即使你们知道对方的ip地址,当好友走到了别的地方换了一个ip,你们的通讯就中断了,好友也不可能在中断前告诉你新的ip地址,因为这样的话他所有的好友都要通知一遍,显然是不合理的。(当然,在网络聊天出现之前真有人这么做)

那怎么办呢,我们希望ip地址变化之后只要通知一个人”中心管理者“,办法是在互联网上设置一个不动的,或很少移动的服务器(如微信服务器)来维护所有用户的ip地址(以及端口号),我们想知道好友的ip地址时就向管理者去询问,同时还要随时把自己的ip地址汇报给管理者,以便让好友可以随时找到自己。这样一来,问题就解决了。这就是WebRTC的工作原理。

在端到端通信时代,在网络上定位一个对等体除了ip地址还需要端口号,端口号是对地理地址的进一步划分(比如一台电脑有多个人使用)。所以必须知道对方的ip和端口号才能与之通信。

这幅图描述了webRTC大致的原理,其中signalling就是交换ip和端口以及协议协商的过程。值得一提的是,signalling没有强制的标准,并不一定得通过服务器来交换,你可以采用任何方式,通过其他网络,邮件,信鸽,甚至顺丰速运都行,只要达到交换地址的目的即可。

但是signalling推荐使用UDP传输,之前的stun服务也是基于UDP的,从这个趋势可以看出,UDP正在走向主流,正在逐渐挑战着TCP的地位。

讲完了?感觉和其他教程说的不大一样?是不是忘了谈NAT了?事实上,WebRTC和NAT根本没有关系,不信去webrtc.org上瞧瞧,官网都对NAT只字未提。但为啥许多介绍WebRTC的文章都说是为了解决NAT的问题呢?主要是因为NAT确实也破坏了端到端通信的能力:即使在互联网上的位置不变,在NAT网关之后的主机地址仍然是动态变化的,因为在这种情况下,即使IP地址不变,你的端口号会一直变化,p2p将无法进行。

为什么?

可能是因为IPv4地址太贵了(注意我说了可能),你和你的朋友都购买了NAT上网服务(比如电信和移动5G)。在这种上网模式下,我们只能通过”代理“上网,这个”代理“就是NAT网关,与此同时,我们在逻辑上处于互联网中的一个小型局域网当中:我们并没有直接暴露在互联网中,而是被一个局域网”保护“了起来。正是有了这层屏障,p2p被无情打破。可为什么IP地址这么贵呢?

NAT技术:用端口资源来扩充IP资源?

事实上IP地址资源早在20年前就不够用了,可为啥这20年还可以上网?这主要是NAT技术来解决的。

注: IPv4地址资源不足有2个原因,其一是IPv4地址是一个32位整数,理论上支持40多亿个地址,这个数远远小于世界总人口数。其二是由于IP地址在地理位置上严重分配不均:美国富余中国稀缺,占世界人口56%的亚洲只分到9%的地址,中国人均只有0.06个地址,日本也严重不够用,印度更惨,人均只有0.006个地址。

NAT技术的设计者们早就发现,我们个人电脑上同一时刻只有寥寥几个端口号在工作,剩下几万个端口都处于闲置状态,这不可谓不是一种浪费。既然ip地址快不够用了,为啥不利用这些闲置的端口号来扩充ip地址呢?这就是NAT技术的理论基础。

虚拟化:对内伪装,对外欺骗

如果给NAT下一个定义,NAT是一种虚拟化技术,用于将虚拟化的子网接入到父级网络(通常就是互联网)。什么是虚拟化技术呢?虚拟化就是伪装欺骗的艺术,比如在一台电脑上开多台虚拟机,每台虚拟机都分配一个ip,那么在外界看来就存在多台电脑,但实际上只有一台:虚拟机容器将一台电脑虚拟成多台电脑。

NAT则相反,NAT是将多台电脑虚拟成一台电脑,在外界看来你们只有一台电脑(即NAT网关),但实际上你们有若干台。虽然NAT网关只有1个公网IP,但是它有几万个端口号对应着子网内部几万个主机。

所以,从资源守恒的角度看,NAT是牺牲端口号资源来扩充稀缺的ip地址资源;从技术本质上看,NAT是一种虚拟化技术,实现了网络的嵌套。

理论上NAT子网中可以再嵌套一个NAT子网,网络嵌套的层数没有理论限制,但是层数越多通讯效率将大打折扣。

有人问,如果一开始互联网就使用IPv6,NAT技术就不会诞生了,上网的效率将大大提升?是这样吗?

IPv6能解决问题?怎么可能! 虽然NAT一开始是为了解决IP资源不足而流行开来的,但是刚刚说了,NAT本质上是虚拟化,是用来实现网络嵌套的。虽然IPv6资源多如牛毛(128位地址,约3.4×10^38个,比世界上所有灰尘的数量还多),世界上的子网仍然无处不在:每一个公司,园区,军事禁区几乎都有自己的私有网络。

之前也说了,IPv4地址太贵只是NAT被广泛使用的原因之一,更深层次的原因是,互联网诞生之初所构想的世界大同的格局根本不可能实现,从物理设备的角度思考,如果想让人人平等地使用互联网,想要人人都能随时随地获得一个公网IP,就得在世界各地均匀地搭建类似蜂窝布局的互联网接入点(如5G基站),从而将互联网络覆盖到地球每个角落,但只要国家和地区之间充斥着不信任,各种私人领地像钉子户一般的存在,基站就不可能覆盖全球。NAT仍将广泛使用。 子网将一直存在,网关和防火墙像长城(你知道我指的是什么)一样坚不可摧。地球仍以一定的角速度转动,互联网却面临着命运莫测的未来。。

最近人在魂不在,产出效率偏低,多多海涵~

(完)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WebHub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NAT 网关
NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档