视频类的功能,基于性能、流畅度等方面的原因,协议需要选用UDP(视频可以容忍偶尔不清晰,UDP丢包;不能容忍卡顿,TCP重传)。
《NAT是怎么回事》中介绍了NAT基本概念。由于NAT没有强制性标准,在实际应用中有多种类型。根据内网地址到外网地址的映射是1对1,还是1对多,NAT可以分成两大类:Cone NAT(锥型)和Symmetric NAT(对称型),锥形还能细分多种子类型。
本文只介绍NAT穿透原理,不纠结于具体NAT类型,因此选用比较简单的全锥形来进行讨论。如下图,A、B两个客户端分别通过NAT A(对应外网地址eA)、NAT B(eB)接入网络。A和B都只知道自己的内网IP地址,不知道eA,eB的公网地址,因此A和B无法简单的相互建立连接,视频类数据量大,也不能都通过服务器中转。因此需要在公网上设置一个Server,辅助A、B建立连接。
A、B建立连接步骤如下
1、A向Server发送数据包询问 NAT A 的公网地址
2、Server向A返回 eA (A向Server发过消息,所以Server能找到A,参看《NAT是怎么回事》)
3、B向Server发送数据包询问 NAT B 的公网地址(A可通过IM系统发送文本消息给B,协同B一起向Server发起询问)
4、Server向B返回 eB
5、Server向A返回 NAT B外网地址eB
6、Server向B返回 NAT A外网地址eA
至此,A、B均得到对方对应的外网地址,可以直接向对方投递数据了。比如A向B发送数据,A只需要向eB发送数据,NAT B会将数据转发给B。
以上只是基本原理,还有很多细节需要处理。