本帖最后由 PC_9527 于 2013-02-23 17:22:19 编辑

解决方案 »

  1.   

    1. 路由NAT 维护条目有个时间长度限制,如果在规定的时间内任何一方没有数据传输 nat就会删除该条目,你去查下linux nat 表 时间过期 TCP相对于UDP 时间会久点
    如果总是存在数据存在,nat条目的时间总是被刷新,这样就不会过期,如果确实没有数据传输,可以使用心跳包,防止nat条目过期2. 路由器 进行nat 有4种类型,可以wiki下
        对称    完美锥形  地址受限制锥形 端口受限制锥形对称NAT 无法进行内网到外网 打洞,因为每次使用不同的端口(或不同地址)总会在路由开辟新的条目并连接,导致无法完成 nat锥形的nat才支持 外网到内网的连接
    支持nat程度
    完美锥形   > 地址受限制锥形  > 端口受限制锥形从安全的角度来说 对称nat的安全性最好,其次为 端口受限制 > 地址受限制锥形  > 完美锥形   例如 完美锥形    内网主机只要在路由的nat 保存一个连接条目 ,外网的任何主机,不管是否为合法的连接还是 具有攻击意图的,都可以直接把报文发送到内网的主机上,而直接穿透路由器(某种程度上路由器是第一道屏障) 但是完美锥形 容易完成打洞, 大多数路由器使用 完美锥形3.不好说,
      

  2.   

    3.多重路由中 如果全部都是 full cone nat 的 是可以完成 打洞的,如果存在其他类型nat 特别是 对称nat就不能nat了
      

  3.   

    请问S的协助打洞端是不是有点多余了。因为当客户端连接到服务器时,服务器已经取得客户端的IP和PORT了。此时可以让服务器向所有的客户端发送对方的IP和PORT。但是当我做到这步之后,开始打洞并没有成功啊?为什么