首先要知道內網地址是不能直接和外網通信的。這裡就牽涉到了一個 NAT 協議。現在用的最多的是 NAT 的一種 NAPTNetwork Address/Port Translator 的技術。簡單來說 NAPT 就是:當你與外網建立連接時,本地 IP 為 192.168.0.11:4000,要與外網 202.160.4.40:3300 建立連接。NAT 做的工作就是把本地地址映射成為外網地址(想連上 internet 都得至少有個外網 IP)如外網 IP 為 202.202.202.202,那麼 NAT 就把它映射為 202.202.202.202:5000(端口號隨機的)。那麼連接就變為 202.202.202.202:5000 到 202.160.4.40:3300。那麼如果 Server 發送來的包就又被 NAT 逆向轉換為內網 IP。就可以通信了。當然其他 IP 如果向 202.202.202.202:5000 發送信息是會被丟棄的,如何連接呢?這就是內網與內網通信這裡需要一個 Server,兩方都登陸,Server 記錄下 a,b 雙方的 IP。a,b 雙方都能和 Server 通信,那麼 a,b 怎麼通信呢,這就需要神奇的打洞技術。a 欲發信息與 b,a 把此事告知中間人 S,S 轉告 b,由於匿名的 IP 會被 b 丟棄,所以,要把 a 的地址變為不是匿名。所以 b 向 a 的地址發送信息(此為打洞),顯然連不上,但是網關卻記錄下了 a 的地址,此時 a 再發信息到 b 就搞定了。反過來就能發信息給 a,因此連接建立!a—>b? a->s s->b b->a? a->b ok!