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服务的作用。

相关推荐
小张成长计划..9 小时前
【Linux】12:进程状态
linux·运维·服务器
许彰午9 小时前
02-网络的抽象层
网络·智能路由器
农村小镇哥10 小时前
C#中的字符串格式化
服务器·开发语言·c#
Geek-Chow10 小时前
A Practical Tour of AWS Networking: VPCs, Subnets, Gateways, and More
网络·aws
数据知道11 小时前
网络地址转换(NAT)与安全:映射原理、打洞与内网暴露风险
网络·安全·智能路由器·内网安全
KaMeidebaby12 小时前
卡梅德生物技术快报|原核膜蛋白表达优化实操手册,膜蛋白的纯化梯度洗脱完整流程
前端·网络·数据库·人工智能·算法
一只小菜鸡..13 小时前
Stanford CS144 学习笔记 (七):跨越虚实的边界——物理层、链路层与无线网络
网络·笔记·学习
且随疾风前行.13 小时前
Android Binder 驱动 - 内核驱动层源码初探
android·网络·binder
寒晓星13 小时前
【网络编程】UDP编程
linux·网络·网络协议·udp
在水一缸13 小时前
当 AI 拥有了“核按钮”:深入解析 MCP 服务器与命令执行护栏
运维·服务器·人工智能·命令执行·智能体·ai安全·mcp