stun存在的意义就是进行nat穿越。
上述这句话是对于stun客户端来说的。
对于客户端来说,客户端首先要发送一个stun消息给到stun服务,stun服务收到这个消息,将发送这个消息的客户端ip地址和端口带回来(过nat为外网,不过为内网地址)。此时客户端即知道自己的外网地址了,当客户端与另外一端进行通讯的时候,通过candiate的交换,就可以将自己的外网地址告诉对方,当对方拿到这个外网地址,就可以进行nat穿越了。
stun对于流媒体服务端的作用是在客户端发送stun请求时候带来用户名和密码,用户名和密码实际是交换sdp信息的时候客户端从服务器得到的。客户端stun请求带上用户名和密码实际上表明此客户端之前进行过sdp信息交换的,是一个合法用户。只有你是合法用户,服务器才允许进行后续的数据收发,否则服务直接断开连接。
客户端主要使用stun进行p2p通讯,而服务端主要用来验证身份。
stun是典型的客户端服务器模式,客户端发送请求,服务端进行响应。
stun协议规范:RFC3489 RFC5389。
stun报文:
包括20字节的stun header。
body中可以有0个或者多个Attribute。
通过magic cookie就可以确定是否是stun消息。