什么是STUN服务器以及STUN协议和VOIP

STUN(Simple Traversal of User Datagram Protocol through Network Address Translators (NATs),NAT的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户 端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于 NAT路由器之后的主机之间建立UDP通信。该协议由RFC 3489定义。目前RFC 3489协议已被RFC 5389协议所取代,新的协议中,将STUN定义为一个协助穿越NAT的工具,并不独立提供穿越的解决方案。

STUN服务器的UDP端口是3478,但服务器将提示客户端对备用IP和端口号执行测试(STUN服务器有两个IP地址)。 RFC声明此端口和IP是任意的。

IP PBX软件3CX内置Stun服务器协助远程网络电话机进行内网穿透。点击链接快速申请

3CX免费许可申请 | 58VOIP-3CX

不使用STUN协议发送SIP消息

以下是SIP注册消息的捕获; 基于SIP的VoIP电话在NAT后面运行,试图在不使用STUN协议的情况下在其网络外运行的IP PBX(监听主机名voipproducts.org)上注册为分机101。

REGISTER sip:voipproducts.org SIP/2.0

Via: SIP/2.0/UDP 192.168.2.14:7214;branch=z9hG4bK-d8754z;rport

Max-Forwards: 70

Contact: : <sip:101@192.168.2.14:7214;rinstance=0639bae5043c66ac>

To: “account1” <sip:101@voipproducts.org>

From: “account1″<sip:101@voipproducts.org>;tag=0a75d76e

Call-ID: OTcxMDU5MGNhNTAxNzgzYjZkODVkY2I3MmE3NDhlNzQ.

CSeq: 1 REGISTER

Expires: 3600

Content-Length: 0

From the above we can see that:

Contact: <sip:101@192.168.2.14:7214;rinstance=0639bae5043c66ac>

在“contact”字段中,我们可以看到基于SIP的VoIP电话正在指定其自己的私有IP地址(192.168.2.14)和端口7214。因此,它正在请求其网络外的远程IP PBX尝试通过发送建立连接 SIP消息返回到IP地址192.168.2.14和端口7214。在这种情况下,IP PBX将尝试建立连接,但由于这是私有IP地址,因此无法在Internet上路由,因此IPPBX尝试响应 发送通常是由路由器或互联网网关丢弃。 由于数据包被丢弃,因此无法建立连接。

STUN解析阐释

如果基于SIP的VoIP电话启用了STUN解析并且指定了STUN服务器,则VoIP电话向STUN服务器发送STUN解析请求并等待STUN服务器进行回复。 这种请求通常在VoIP电话启动期间或在尝试与外部SIP实体通信之前完成。 下面是典型的STUN服务器响应的捕获:

Message Type: Binding Response(0x0101)

Message Length: 0x0044

Message Transaction ID: E753D76EA857A24DA38A229F7576E18E

Attribute: MAPPED-ADDRESS

Attribute Type: MAPPED-ADDRESS(0x0001)

Attribute Length: 8

Protocol Family: IPv4 (0x0001)

Port: 6023

IP: 78.158.143.115 (78.158.143.115)

Attribute: SOURCE-ADDRESS

Attribute Type: SOURCE-ADDRESS(0x0004)

Attribute Length: 8

Protocol Family: IPv4 (0x0001)

Port: 3478

IP: 10.252.131.113 (10.252.131.113)

Attribute: CHANGED-ADDRESS

Attribute Type: CHANGED-ADDRESS(0x0005)

Attribute Length: 8

Protocol Family: IPv4 (0x0001)

Port: 3479

IP: 75.101.138.128 (75.101.138.128)

From the above we can see that:

Message Type: Binding Response(0x0101)

Message Length: 0x0044

Message Transaction ID: E753D76EA857A24DA38A229F7576E18E

Message type: This field states the message type; in the above example we can see that this is a Binding response to the Binding request sent to the STUN server by the VoIP phone.

Message Length: This field states the message length in bytes.

Message Transaction: This is a unique identifier used for each STUN message binding / response session. For each new transaction, a new unique identifier is created.

Attribute: MAPPED-ADDRESS

Attribute Type: MAPPED-ADDRESS(0x0001)

Attribute Length: 8

Protocol Family: IPv4 (0x0001)

Port: 6023

IP: 78.158.143.115 (78.158.143.115)

The above attribute is called “MAPPED-ADDRESS”; its purpose is to indicate the source IP (from the above example; 78.158.143.115) and source Port (from the above example; 6023) the server saw in the Binding request sent from the SIP based VoIP phone.

Attribute: SOURCE-ADDRESS

Attribute Type: SOURCE-ADDRESS(0x0004)

Attribute Length: 8

Protocol Family: IPv4 (0x0001)

Port: 3478

IP: 10.252.131.113 (10.252.131.113)

上述属性称为“SOURCE-ADDRESS”; 其目的是指示是否正在使用两次NAT配置。 从上面我们可以看到正在使用两次NAT配置,因为VoIP电话的IP地址是192.168.2.14,接收绑定请求的公共IP是78.158.143.115,以及从哪里接收到的最后一个点的IP地址 STUN服务器收到STUN请求的是10.252.131.113。

Attribute Type: CHANGED-ADDRESS(0x0005)

Attribute Length: 8

Protocol Family: IPv4 (0x0001)

Port: 3479

IP: 75.101.138.128 (75.101.138.128)

上述属性称为“CHANGED-ADDRESS”; 其目的是指示客户端在“CHANGE-REQUEST”属性中请求“更改IP”和“更改端口”时发送响应的IP地址和端口。

使用STUN协议发送SIP消息

以下是SIP注册消息的捕获; 基于SIP的VoIP电话在NAT后面运行,试图通过使用STUN协议在其网络外运行的IP PBX(在主机名上监听voipproducts.org)注册为分机101。

REGISTER sip:voipproducts.org SIP/2.0

Via: SIP/2.0/UDP 192.168.2.14:7214;branch=z9hG4bK-d8754z;rport

Max-Forwards: 70

Contact: <sip:101@78.158.143.115:8676;rinstance=c82d2f5b1918e5cf>

To: “account1″<sip:101@voipproducts.org.com>

From: “account1″<sip:101@voipproducts.org>;tag=484b4e36

Call-ID: YWI3Y2I3ODIzOWIxYWI5NDQwMzA5ZTYxMTAzOTM4Y2I.

CSeq: 1 REGISTER

Expires: 3600

Content-Length: 0

From the above we can see that:

Via: SIP/2.0/UDP 192.168.2.14:7214

The VoIP client is still listening on the same internal IP address (192.168.2.14) and same port (7214).

Contact: <sip:101@78.158.143.115:8676;rinstance=c82d2f5b1918e5cf>

在注册SIP消息的“contact”字段中,VoIP电话用外部IP地址(78.158.143.115)替换自己的IP地址(192.168.1.14),并在尝试注册之前通过STUN解析发现外部端口(8676) 使用外部IP PBX。 归功于STUN解析,现在IP PBX可以通过在端口8676上发送SIP响应到IP地址78.158.143.115来建立与VoIP电话的连接,该响应映射到NAT设备上的IP地址192.168.2.14和端口7214。

如上所述,由于基于SIP的VoIP呼叫中使用的大多数协议通常使用UDP作为传输协议,这是无连接协议,因此STUN在帮助在建立基于SIP的VoIP呼叫的NAT后面运行的SIP实体中起非常重要的作用。