3. Overview of Operation (操作概述)
本节仅为描述性内容。
STUN是一个客户端-服务器协议。客户端向服务器发送请求,服务器返回响应。有两种类型的事务 (transactions)。第一种是请求/响应事务 (request/response transaction),其中客户端发送请求给服务器,服务器返回响应。第二种是指示事务 (indication transaction),其中客户端或服务器发送指示,不期望收到响应。
所有STUN消息都由一个20字节的头部组成,后面跟着零个或多个属性 (Attributes)。头部包含一个STUN消息类型、一个魔术饼干、一个事务ID和消息长度。
STUN属性由类型-长度-值 (Type-Length-Value, TLV) 编码,其中长度不包括任何填充。
STUN定义了单一的请求/响应对。绑定请求 (Binding request) 由客户端发送给服务器。当绑定请求到达服务器时,它可能已经穿越了一个或多个NAT。结果,服务器接收到的请求的源传输地址 (即源IP地址和源端口) 将是NAT分配的公共IP地址和端口。服务器将这个源传输地址作为STUN属性复制到绑定响应 (Binding response) 中,并将响应发送回客户端。客户端检查绑定响应中的STUN属性,并从中学习其反射传输地址 (reflexive transport address)。
STUN提供了两种基本认证和消息完整性机制。第一种提供基于共享密钥的消息完整性。第二种提供基于用户名和密码的消息完整性和认证机制。两种机制都使用HMAC-SHA1。
STUN也定义了指纹 (FINGERPRINT) 属性,该属性可用于将STUN消息与同一传输地址上多路复用的其他协议区分开来。