今天,我们对WebRTC的错综复杂的问题做更进一步的探索,阐明了STUN、TURN、ICE候选者和SDP(会话描述协议)等关键组件,这有助于我们处理NAT和相关系统。本文将揭开这些技术背后的魔力,以及它们在实现点对点通信中不可缺少的作用。
我们先来了解一下STUN和TURN。
STUN(Session Traversal Utilities around NAT)
STUN 是 WebRTC 中使用的一种协议,用于发现隐藏在 NAT(网络地址转换)路由器或防火墙后面的设备的公共 IP 地址和端口。NAT 允许专用网络上的多个设备共享单个公共 IP 地址,这有助于节省 IP 地址。然而,这在设备之间建立直接通信时带来了挑战。
STUN 服务器充当设备之间的中介,帮助克服这一挑战。当设备想要与另一个装置通信时,它向STUN服务器发送STUN请求。服务器使用从外部网络看到的设备的公共 IP 地址和端口进行响应。此信息允许设备确定如何建立直接的点对点连接,绕过 NAT 并实现实时通信。
简化说明:想象一下您在一栋有多个房间的房子里,每个房间都有一个人在使用电话。当一个房间的人想要直接与另一个房间的人通话时,他们会遇到一个问题,因为每个房间都有自己的分机号码,而房子外面的人只知道主电话号码。STUN 服务器充当信使,帮助呼叫者发现他们的房间号码并绕过主电话号码直接连接。
TURN ( Traversal Using Relays around NAT )
TURN 是 WebRTC 中使用的中继服务器,用于在由于网络配置限制而无法进行直接点对点连接时促进设备之间的通信。设备有时可能位于对称 NAT 或防火墙后面,以防止直接联系。
当直接通信失败时,设备可以利用 TURN 服务器作为中介。TURN 服务器作为桥梁在设备之间中继媒体和数据包。当一个设备向另一个设备发送数据时,数据首先被发送到 TURN 服务器,然后由 TURN 服务器将其转发给预期的接收者。这确保了通信仍然可以进行,尽管由于 TURN 服务器的参与而可能会增加延迟。
简化说明:将 TURN 服务器视为邮局或信使,帮助在无法直接联系的两个人之间传递消息。想象一下两个朋友试图沟通,但他们之间有一堵大墙。TURN 服务器充当中介者,接收来自一个朋友的消息并将其传递给另一个朋友。这样,即使他们不能直接通信,他们仍然可以通过服务器交换信件。
在 WebRTC 中,当设备隐藏在路由器或防火墙后面时,它们使用 STUN 服务器来查找其公共“房间号”(IP 地址和端口)。这使他们能够建立直接通信,而无需依赖中间服务器。但如果设备由于网络限制而无法建立直接连接,TURN 服务器就会发挥作用。它们充当中介,在隐藏在防火墙或限制性 NAT 配置后面的设备之间中继通信。虽然这可以确保通信,但可能会带来一些额外的延迟。
ICE(Interactive Connectivity Establishment – ICE 候选)
让我们从流程开始。假设有两个用户,Alice 和 Bob 都想使用 WebRTC 相互传输数据。该流程最初从 Alice 开始。爱丽丝试图找出如何有人可以与他联系,鲍勃也是如此,他试图找到可能的方式与他沟通。现在他们有了可以与他们产生共鸣的方法。他们将通过其他方式(例如 WhatsApp、Twitter、QRcode、HTTP、WebSocket 等)交换会话信息。Alice 使用最优路径与 Bob 连接。Alice 和 Bob 交换了他们支持的媒体和安全性,并最终建立了连接。
与上一流程一样,我们了解到 Alise 和 Bob 收集其他人可以联系的方式;每种方式称为 ICE 候选者或 ICE 候选者是在 WebRTC 信令过程中收集和交换的网络地址和传输协议。本地候选代表本地网络内设备的私有 IP 地址和端口。相反,服务器自反候选者是通过 STUN 服务器获得的,代表公共 IP 地址和端口。ICE 候选优先级排序:设备根据 IP 地址类型、传输协议和网络条件评估 ICE 候选者并确定其优先级,以选择最合适的候选对来建立直接连接。
然后,所有收集到的地址都会通过 WebRTC 使用的 SDP(会话描述协议)标准化格式发送到远程对等点,以在对等点之间交换会话相关信息。SDP 允许设备协商通信会话的参数,例如音频和视频编解码器、网络地址和传输协议。对等方交换包含会话描述(包括其能力、偏好和要求)的 SDP 消息,以建立兼容性并就通信参数达成一致。
Alice:
v=0
o=- 2890844526 2890844526 IN IP4 192.168.0.101
s=-
t=0 0
a=group:BUNDLE audio video
m=audio 5004 RTP/SAVPF 111 103 104 9 0 8 106 105 13 126
c=IN IP4 192.168.0.101
a=rtpmap:111 opus/48000/2
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=rtcp-mux
a=sendrecv
Bob:
v=0
o=- 2890844527 2890844527 IN IP4 192.168.0.102
s=-
t=0 0
a=group:BUNDLE audio video
m=audio 6004 RTP/SAVPF 111 103 104 9 0 8 106 105 13 126
c=IN IP4 192.168.0.102
a=rtpmap:111 opus/48000/2
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=rtcp-mux
a=sendrecv
结论: STUN、TURN、ICE候选和SDP是WebRTC实现无缝点对点通信的基本组件。STUN协助NAT穿越,TURN在无法直接连接时充当中继,ICE候选有助于最佳路径选择,SDP 允许对会话参数进行协商和协商。这些技术共同克服了 NAT、防火墙限制和兼容性问题带来的挑战,使 WebRTC 能够提供卓越的实时通信体验。
本文为原创稿件,版权归作者所有,如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/28401.html