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

相关推荐
波波00714 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
記億揺晃着的那天15 小时前
NAS 内网域名访问为什么需要浏览器授权
网络·nginx·js·nas
chunmiao303216 小时前
DeepSeek V4-Pro 正式版上线,API 8月17日起分时调价
网络·安全
隔窗听雨眠16 小时前
GBase 8s并发控制深度解析:封锁机制、隔离级别与死锁处理全攻略
服务器·数据库·oracle
鲸采云SRM采购管理系统17 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
迪康Defender18 小时前
AI 重构终端安全运营:智能分析中枢 AI Insight 模块架构与落地场景深度解析
运维·网络·人工智能·其他·安全·重构·架构
那年窗外下的雪.18 小时前
AIDC 学习日志 第 04 天 BGP Underlay 基础与路由选择
服务器·学习·php
0x5318 小时前
Java网络编程(二)
java·服务器·网络
果果燕19 小时前
C++学习笔记(三):类与对象拓展学习笔记
java·服务器·前端
小绫网络安全20 小时前
Kali Linux渗透测试入门教程:从零搭建到实战攻防
linux·运维·服务器