AWS WebRTC:获取ICE服务地址(part 2): ICE Agent的作用

上一篇,已经获取到了ICE服务地址,从返回结果中看,是两组TURN服务地址。

拿到这些地址有什么用呢?接下来就要说到WebRTC中ICE Agent的作用了,返回的服务地址会传给WebRTC最终给到ICE Agent。

ICE Agent的作用:

1、收集候选地址(ICE Candidates),包括 hostsrflxrelayprflx

类型 来源说明
host 本地 WebRTC自己通过系统网络接口直接获取的。
srflx 使用 STUN 服务器,发现 NAT 映射后的公网 IP
prflx 在通信过程中由对端反推出的 IP(较少见)
relay 使用 TURN 服务器,提供中继服务

2、测试连接性(connectivity checks):尝试不同的候选对组合

ICE Agent 通过发送 STUN Binding Request 检查候选对(candidate pair)的可连通性。

  • STUN Binding Request 是 ICE 用来做连接性检测的标准机制。

  • 无论对端 candidate 是哪种类型(host、srflx、relay),只要能够被访问,它就可以接收到并响应 STUN 消息。

  • 检查是否连通 = 看是否能收到 STUN Binding Response

  • 虽然 relay 类型的候选地址是由 TURN 服务 提供的,但它本质上依然支持 STUN Binding Request 的收发,作为 ICE 的连接性检测机制的一部分。

3、优选路径(nominating best candidate pair):优先使用能直连的、延迟最小的路径;当直连失败时,才使用 TURN 中继。

会按 ICE 优先级 测试连接路径,比如:

  • Host ↔ Host

  • Host ↔ srflx

  • srflx ↔ srflx

  • relay ↔ relay(最慢,最贵)

通常优先选择 非中继的直连链路(即 P2P)。

补充说明一下,收集候选地址(candidates)指的是仅收集本端(local)的候选地址,包括 hostsrflxrelay,将这些候选地址通过信令通道(比如 SDP)发送给对方,就是说本地收集完成后,WebRTC 应用会通过 SDP(Session Description Protocol) 把这些 candidates 发送给对端。

4、接收。对端候选地址的获取来自信令过程,对端收集完自己的候选地址后,会通过信令通道传送过来(在 SDP 中或者通过 trickle ICE 逐步发送),本地 ICE Agent 会接收到这些对端候选,并将其组合成 candidate pairs(候选对)进行连接性检测。

这时候我对比了一下,iOS app端的打印日志:

bash 复制代码
[iOS-P2P:2f214551-*****A1100*****] ICE servers retrieved - Count: 3
2025-05-19 15:48:29.611+0800 [Open Stream] ✅✅✅ INFO className:Channel+Tracker fuction:logP2PEvent(_:details:)  line:25 
 [iOS-P2P:2f214551-C2E2DA110017952] ICE[1/3] - turn:***-***-***-***.t-*****.kinesisvideo.cn-****-*.amazonaws.com.cn:443?transport=udp, turns:***-***-***-***.t-*******.kinesisvideo.cn-*****-*.amazonaws.com.cn:443?transport=udp, turns:***-***-***-***.t-*******.kinesisvideo.cn-****-*.amazonaws.com.cn:443?transport=tcp
2025-05-19 15:48:29.612+0800 [Open Stream] ✅✅✅ INFO className:Channel+Tracker fuction:logP2PEvent(_:details:)  line:25 
 [iOS-P2P:2f214551-*****A1100*****] ICE[2/3] - turn:**-***-***-***.t-********.kinesisvideo.cn-****-*.amazonaws.com.cn:443?transport=udp, turns:**-***-***-***.t-*******.kinesisvideo.cn-****-*.amazonaws.com.cn:443?transport=udp, turns:**-***-***-***.t-*********.kinesisvideo.cn-***-*.amazonaws.com.cn:443?transport=tcp
2025-05-19 15:48:29.613+0800 [Open Stream] ✅✅✅ INFO className:Channel+Tracker fuction:logP2PEvent(_:details:)  line:25 
 [iOS-P2P:2f214551-C2E2DA110017952] ICE[3/3] - stun:stun.kinesisvideo.*.amazonaws.com:443

iOS app的日志中是有stun返回的,为什么boto3请求却没有返回呢,查了一下:

AWS 的 WebRTC Signaling Channel 默认不提供 STUN Server,只靠 TURN 来确保连接可靠性。

  1. AWS 官方设计如此

    • AWS 的 get_ice_server_config() 接口返回的 IceServerList 默认只包含 TURN server。

    • 这些 TURN server 本身就能提供中继功能(比 STUN 更通用),AWS 更倾向于提供自己可控的服务。

  2. AWS 文档说明

    The returned ICE server list contains TURN-only servers. STUN servers are not included in this API.

我问了一下iOS开发同学,确实在本地配置了STUN server:

objectivec 复制代码
stun.kinesisvideo.{数字}.amazonaws.com

下一篇:AWS WebRTC:获取ICE服务地址(part 3)介绍STUN服务和TURN服务的作用。

相关推荐
嵌入式学习菌3 小时前
ESP32 智能插座调试软件功能测试
网络·物联网
醇氧3 小时前
OSI 七层网络模型总结
网络
新时代牛马3 小时前
Linux 系统调用与IPC 完整篇:从syscall 入口、VDSO 到pipe/shm/futex 选型
linux·运维·服务器
rcms152702692184 小时前
Nikon 4T070-360-1精准控制器模块
网络
wjcroom4 小时前
一个可以在线多人玩的五子棋开发与布署方法-WebRTC和WebSocket的测试方法
websocket·网络协议·webrtc
小HANN4 小时前
Linux建站实战:CentOS7+LNMP 从零部署 ECShop 开源电商系统
linux·运维·服务器·经验分享
数安旭说5 小时前
终端防火墙深度拆解:网络隔离、进程级管控与流量治理的落地避坑指南
网络·数据安全·企业安全·防火墙·终端安全·终端防火墙·违规外联
三8445 小时前
SSRF 从入门到实战:原理、危害与基础利用
服务器·网络安全·ssrf·#web安全
数智工坊5 小时前
NTIRE2024×4图像超分竞赛综述|Mamba崛起、数据缩放、频域增强成为新趋势
网络·人工智能·深度学习·cnn·机器人
聚美智数5 小时前
网安查询-备案查询-网络安全查询API接口介绍
网络·数据库·web安全