一个UDP穿透NAT的疑惑

littlebao 2006-12-21 09:06:32
如果Client A想向Client B发送信息,那么Client A发送命令给Server S,请求Server S命令Client B向Client A方向打洞.
A从server 那里得到B的地址和端口后不能直接向这个地址发送信息,因为如果这样发送信息,NAT B会将这个信息丢弃(因为这样的信息是不请自来的,为了安全,大多数NAT都会执行丢弃动作).但是S命令B向A方向打洞的话,A就可以接受到B的信息吗?这时NAT A不会把这个信息丢弃吗?因为此时NAT A并不知道client A要接受B的信息啊?
...全文
309 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
test2002 2006-12-25
  • 打赏
  • 举报
回复
A 发数据到 B
这一步为B向A发数据开了洞
B 发数据到 A
这一步这A向B发数据开了洞.

如果此时AB在NAT的Session超时之前交互数据,就能够成功收发.
(仅对锥形NAT)

-------------------------------------
再加上中间人,Server解释就完整了!

A 发数据到 B
这一步为B向A发数据开了洞
A 发数据超时(B没收到),命令Server,要B向A发数据(开洞)

Server收到A命令,向B发命令,

B收到S命令,B 发数据发到 A,
这一步B发数据,并给A开了洞.

前面A已经为B开了洞,所以B数据A成功收到,

接下来,A可以向B发数据,B也可以向A发数据

blastzgd 2006-12-25
  • 打赏
  • 举报
回复
多数厂家的Session超时在范围12-60s内.
DentistryDoctor 2006-12-25
  • 打赏
  • 举报
回复
当然要保持才行。至于周期,因不同的厂商而异。
littlebao 2006-12-25
  • 打赏
  • 举报
回复
请问这里开洞后,这个洞的持续时间有没有限制?如果有,是多少?
是不是要心跳保持啊?
blastzgd 2006-12-21
  • 打赏
  • 举报
回复
A 发数据到 B
这一步为B向A发数据开了洞
B 发数据到 A
这一步这A向B发数据开了洞.

如果此时AB在NAT的Session超时之前交互数据,就能够成功收发.
(仅对锥形NAT)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧