家用的無線路由器是私有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處理之后,從該接口再次發送出去