3. 操作概览 (Overview of Operation)
本节仅作描述性说明.
STUN 是一种客户端-服务器协议. 客户端向服务器发送请求, 服务器返回响应. 事务有两种类型: request/response transactions 和 indication transactions.
所有 STUN 消息都由一个 20-byte 头部后跟零个或多个 Attributes 组成. 头部包含 STUN message type, magic cookie, transaction ID, 以及 message length.
STUN 属性使用 Type-Length-Value (TLV) 格式编码, 其中长度不包括任何填充.
STUN 定义了一个单一的 request/response 对. Binding request 由客户端发送到服务器. 当 Binding request 到达服务器时, 它可能已经经过一个或多个 NAT. 因此, 服务器收到的请求的源传输地址 (source IP address 和 source port) 将是 NAT 分配的公网 IP 地址和端口. 服务器将该源传输地址复制到 Binding response 中的一个 STUN 属性里, 并将响应发回客户端. 客户端检查 Binding response 中的 STUN 属性, 并从中获知自己的反射传输地址 (reflexive transport address).
STUN 提供两种基本的认证和消息完整性机制. 第一种基于共享秘密提供消息完整性. 第二种基于用户名和密码提供消息完整性与认证. 两种机制都使用 HMAC-SHA1.
STUN 还定义了 FINGERPRINT 属性, 可用于将 STUN 消息与复用在同一传输地址上的其他协议区分开来.