Server S (219.237.60.1)
|
|
+----------------------+----------------------+
| |
NAT A (外网IP:202.187.45.3) NAT B (外网IP:187.34.1.56)
| (内网IP:192.168.0.1) | (内网IP:192.168.0.1)
| |
Client A (192.168.0.20:4000) Client B (192.168.0.10:40000)
Server S (外网IP: 888.888.888.888:4000) (不知道这个IP多少钱:)嘻嘻~~~
|
|
(外网IP:222.222.222.222)
NAT A
+----------------------+----------------------+
| (内网IP:192.168.0.1) |
| |
| |
Client A (内网192.168.0.20:4000) Client B (内网192.168.0.10:4000)
******注: Client A, Client B在一个局域网中
Client A, Client B,Server S 都是用的相同端口 4000
******注: 以下通信过程 除NAT A 通讯时端口未知外
Client A 和Client B 和 Server S 连接通讯时 用的都是端口4000
******注: 用得是UDP
******注: 偶无法碰到NAT A
2.程序目的:
Client A 和Client B 同时和 Server S连 (用的都是端口4000) 而且能正确通信.
3.问题由来:
Client A 首先和Server S 链接 通信~~(数据接受正常:)
然后Client B 和 Server S通信
当Client B 向Server S "打洞"、发消息时,Server S 能收到 Client B发来的消息
但,当 Server S向 Client B 发消息时
由于NAT A 中已经有了Server S 和 Client A 的映象.
所以 Server S 发往 Client B 的消息 被NAT A "智能"得中转到 Client A了~
4.疑问:
所以我有以下疑问:
Client A和Server S 能正常通信
为什么:
Client B 却不能 收到 Server S发送的信息 呢??(注:不能收到)
Server S 却 能 收到 Client B发送的信息 呢??(注:能受收到)
注意:
Client A 和 Server S 能正常通信 (正常通信)
Server S 能 收到 Client B发送的信息 (注:能受收到)
Client B 不能 收到 Server S发送 给Client B的信息 (注:不能收到)
我测过不行:(
5.自我分析:
问题就是 NAT A"智能了" 按
(
P2P 之 UDP穿透NAT的原理与实现(附源代码)
原创:shootingstars
参考:http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt
)
所说 NAT A 中有了一个 Server S 和 Client A 得映象 ,所有由Server S发送到 NAT A 的消息(端口4000)
都被默认转发到Client A了
但是 由于Server S 能收到 Client B 发送的消息 ,说明 NAT A 中也存在 Server S 和 Client B的映象
请大家回答上面我的两个问题:)
6.测试例子:
这是我的测试例子(Client A & B and Server S 都是用一个程序)
大家看看 是不是像我说的:)
把 ip改成你要发的ip就可以了 不过要 "出口"ip
下载地址:http://xwj98652.w84.isdns.com/aa/udp.exe (请各位大侠 先查毒,免得MM书信、Pic,没有了骂偶:)呵呵~~~