家用的无线路由器是私有IP地址,也就是说连接到WLAN中应该是处于内网之中的。
但是互联网的设备是无法访问内网中的设备中的,那么QQ消息是怎么样从外网传到内网中的呢?
很简单,因为QQ有客户端。
QQ好友之间的消息是通过QQ服务器中转(store and forward),而不是QQ好友Peer to Peer
这样做的好处在于:
- QQ客户端可能存在于NAT设备的后面,但是QQ客户端是可以与服务器通信的,尽管厂家的NAT设备各不相同,但是都支持最基础的NAT技术,也就是Source IP/Port-Based NAT技术。
- 即使对方离线,也可以把消息传给服务器,等待对方上线
- 所有消息都经过服务器,所以服务器可以记录所有用户的消息。
但是QQ也同时集成了P2P技术,也就是说不通过服务器中转直接在用户之间传输。
但是P2P其实很局限。
比如经过了Symmetric NAT设备,已经不再使用原有的Global IP + Port,所以双方服务连接到彼此,只能通过服务器中转
再比如通信双方的Global IP相同,说明在同一个NAT设备后面,需要NAT设备支持Harpin
> Hairpin:是将某个接口接收的流量,做完NAT处理之后,从该接口再次发送出去