WebRTC 基础:WebRTC 如何以及为什么使用你的浏览器地址
2017-03-27 11:40
495 查看
原作者:Tsahi Levent-Levi
原文地址:
最近我被要求写一些以WebRTC 基础为主题的文章,解释一下它是如何工作的。这里是其中一篇。
《纽约时报》使用WebRTC搜集用户IP地址引发了暴怒。广告的欺诈检测机制使用WebRTC来寻找本地地址,以决定用户是真实的还是机器。作为一个基于广告费用的猫捉老鼠游戏,意味着继续使用兵器库中的每件武器。(Being a cat and mouse game over ad money means this will continue with every piece of arsenal both sides have at their disposal) WebRTC 在里面发挥了有趣的角色。现在问题来了 —— 为什么WebRTC需要浏览器的IP地址?它用IP地址来做什么?
为了回答这个问题,我们首先需要明确 web 通常是如何工作的 (这要先于WebRTC)
上面这张图解释了整个过程。Web 服务器位于云端的某个地方。你通过它的 IP 地址来访问它。但通常是通过域名访问它,并且通过域名得到它的 IP 地址。然后浏览器发送请求到服务器。
现在假定这是不同的社交网络,一个用户想要和另外一个用户互动。用浏览器来实现这个互动的唯一方式是设定一个所有消息的服务器代理 —— 任何从A到B的消息都会经过web服务器。即便web服务器并不想储存这些消息或者了解它们。
WebRTC allows working differently. 它使用端到端技术,即所谓的P2P。
上面这张图对于VoIP开发者来说并不陌生,但是有一个非常重要的区别:在引入WebRTC之前,web是如何工作的?两个浏览器之间的直接连线吗?这是第一次web浏览器可以使用HTML和另外一个浏览器直接通信,而不用经过web服务器。
这就是导致需要IP地址的差异的原因。(This is what makes all the difference in the need for IP addresses.)
当你和一个web服务器通信时,你的浏览器负责初始化通信。它发送请求到服务器,然后通过你的浏览器创建的相同的路径进行响应。所以不论哪种情况你的浏览器都没有必要宣布它的IP地址。但是,当一个浏览器需要向另一个浏览器发送信息时 —— 如果没有 IP 地址,要如何实现?
所以,浏览器之间需要交换IP地址。图示中的web服务器在浏览器间传递信息,这些信息包括SDP,包含了未来在浏览器之间直接进行数据交换需要使用到的IP地址。
但是在很多例子中,你可能会想要跳过服务器部分:
音频和视频需要很大的带宽,将这个负担放到服务器上意味着服务开销增加
音频和视频需要消耗更多的CPU功耗,将这个负担放到服务器上意味着服务开销增加
通过服务器传输音频和视频意味着更大延迟以及更多丢包可能,从而导致媒体质量下降。
隐私顾虑,当我们通过服务器发送媒体时,信息应该是私密的
所以我们希望媒体或者消息通过端到端而不是服务器进行传输。基于此我们考虑使用WebRTC,但是需要在浏览器之间交换IP地址,来使得它可以运行。
现在,这个交换或许并不总需要翻译成两个web浏览器的直接通信 —— 我们还是需要根据消息或者媒体进行终结。如果你想了解更多,请访问:the introduction to NATs and Firewalls on webrtcHacks
原文地址:
最近我被要求写一些以WebRTC 基础为主题的文章,解释一下它是如何工作的。这里是其中一篇。
《纽约时报》使用WebRTC搜集用户IP地址引发了暴怒。广告的欺诈检测机制使用WebRTC来寻找本地地址,以决定用户是真实的还是机器。作为一个基于广告费用的猫捉老鼠游戏,意味着继续使用兵器库中的每件武器。(Being a cat and mouse game over ad money means this will continue with every piece of arsenal both sides have at their disposal) WebRTC 在里面发挥了有趣的角色。现在问题来了 —— 为什么WebRTC需要浏览器的IP地址?它用IP地址来做什么?
为了回答这个问题,我们首先需要明确 web 通常是如何工作的 (这要先于WebRTC)
上面这张图解释了整个过程。Web 服务器位于云端的某个地方。你通过它的 IP 地址来访问它。但通常是通过域名访问它,并且通过域名得到它的 IP 地址。然后浏览器发送请求到服务器。
现在假定这是不同的社交网络,一个用户想要和另外一个用户互动。用浏览器来实现这个互动的唯一方式是设定一个所有消息的服务器代理 —— 任何从A到B的消息都会经过web服务器。即便web服务器并不想储存这些消息或者了解它们。
WebRTC allows working differently. 它使用端到端技术,即所谓的P2P。
上面这张图对于VoIP开发者来说并不陌生,但是有一个非常重要的区别:在引入WebRTC之前,web是如何工作的?两个浏览器之间的直接连线吗?这是第一次web浏览器可以使用HTML和另外一个浏览器直接通信,而不用经过web服务器。
这就是导致需要IP地址的差异的原因。(This is what makes all the difference in the need for IP addresses.)
当你和一个web服务器通信时,你的浏览器负责初始化通信。它发送请求到服务器,然后通过你的浏览器创建的相同的路径进行响应。所以不论哪种情况你的浏览器都没有必要宣布它的IP地址。但是,当一个浏览器需要向另一个浏览器发送信息时 —— 如果没有 IP 地址,要如何实现?
所以,浏览器之间需要交换IP地址。图示中的web服务器在浏览器间传递信息,这些信息包括SDP,包含了未来在浏览器之间直接进行数据交换需要使用到的IP地址。
为什么需要P2P?仅通过服务器来实现不可以吗?
当然我们可以通过服务器来实现。事实上,大量的使用案例都是用服务器来对各种不同的需求进行终结 —— 像记录会话,多方或者连接到其他网络这些不得不使用服务器的场合。但是在很多例子中,你可能会想要跳过服务器部分:
音频和视频需要很大的带宽,将这个负担放到服务器上意味着服务开销增加
音频和视频需要消耗更多的CPU功耗,将这个负担放到服务器上意味着服务开销增加
通过服务器传输音频和视频意味着更大延迟以及更多丢包可能,从而导致媒体质量下降。
隐私顾虑,当我们通过服务器发送媒体时,信息应该是私密的
所以我们希望媒体或者消息通过端到端而不是服务器进行传输。基于此我们考虑使用WebRTC,但是需要在浏览器之间交换IP地址,来使得它可以运行。
现在,这个交换或许并不总需要翻译成两个web浏览器的直接通信 —— 我们还是需要根据消息或者媒体进行终结。如果你想了解更多,请访问:the introduction to NATs and Firewalls on webrtcHacks
相关文章推荐
- linux基础之使用异步 I/O 大大提高应用程序的性能 学习何时以及如何使用 POSIX AIO API
- 用 ConTest 进行多线程单元测试 - 为什么并行测试很困难以及如何使用 ConTest 辅助测试
- 解释一下你对盒模型的理解,以及如何在 CSS 中告诉浏览器使用不同的盒模型来渲染你的布局。
- HTTP基础(一):如何使用浏览器network查看请求和响应的信息
- Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址
- 为什么我们要使用Go语言以及如何使用它的
- 解释一下你对盒模型的理解,以及如何在 CSS 中告诉浏览器使用不同的盒模型来渲染你的布局。
- 解释一下你对盒模型的理解,以及如何在 CSS 中告诉浏览器使用不同的盒模型来渲染你的布局。
- 解释一下你对盒模型的理解,以及如何在 CSS 中告诉浏览器使用不同的盒模型来渲染你的布局。
- Flask MVVM 开发(vue.js) - ajax如何同步更新地址栏history 以及使用浏览器返回按钮
- 用WebView访问证书有问题的SSL网页以及在文件关联窗口中选择浏览器后,浏览器如何识别到该连接地址
- 解释一下你对盒模型的理解,以及如何在 CSS 中告诉浏览器使用不同的盒模型来渲染你的布局。
- Netflix on Linux:如何在Linux上使用Netflix以及为什么在Linux上使用Netflix怎么就这么难
- 解释一下你对盒模型的理解,以及如何在 CSS 中告诉浏览器使用不同的盒模型来渲染你的布局。
- 使用ajax时浏览器何时缓存以及如何避免浏览器缓存
- JS 通过用户IP 获取用户所在地址以及所使用浏览器和操作系统
- 解释一下你对盒模型的理解,以及如何在 CSS 中告诉浏览器使用不同的盒模型来渲染你的布局。
- 解释一下你对盒模型的理解,以及如何在 CSS 中告诉浏览器使用不同的盒模型来渲染你的布局。
- Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址
- Qt中如何禁掉所有UI操作以及注意事项(处理各个widget的eventFilter这一层,但是感觉不好,为什么不使用QApplication呢)