大家帮我看看这个问题如何解决:
    我的开发机器在公司的内网,要求公司信息中心的给我做了个内网到外网的映射,想在外网上往我的开发机器上发送udp数据包,但是问题来了:tcp数据包能发送出去,但是udp数据包无论如何也发不出去,不知道什么原因?
    测试前提:
    1、我用mina框架写了两个socket数据接收程序,一个基于tcp , 另一个基于udp,程序是没有问题的,我在内网里发送数据这两个程序都能接收到;
    2、我在外网上发送时:走tcp协议我的内网机器的程序可以成功接收到,udp的程序就是接收不到,不知道为什么(端口上tcp和udp两个协议都是开发的)   急问啊
    

解决方案 »

  1.   

    防火墙策略呗,一般很多防火墙默认都是彻底屏蔽UDP包的,毕竟常规应用都是走TCP连接。这个安全策略可能一直从内网的网关到外网的路由上都有,任何一个地方都可能彻底屏蔽UDP包。最毙的是,我以前用铁通的网络,这个鸟供应商,丫的直接封杀1024以上端口号的UDP包。跟你公司信息中心的说一下,安全策略能否在你开放的这个端口上做忽略。
    不过客观地说,如果我是管信息中心的,你的要求我肯定不同意,这么搞公司的安全漏洞风险也太大了。。
      

  2.   

    谢谢ldh911,
    问题是这样:我当时只要求映射我的内网机器,开通某个端口:如9090,协议选择TCP和UDP,结果就是tcp的数据包从外网发到内网机器上,而 udp的数据包发送不成功,
    我对网络配置这块不熟悉,可能是防火墙策略的原因吗?我想先把原因找到
    大家给说说
      

  3.   

    要准确定位问题,不是很方便,除非你公司的网管很配合你,比如:
    1、先尝试你服务器本机发送UDP包是否成功;
    2、再尝试在你服务器向同网段的机器向你服务器发送UDP包是否成功;
    3、最后尝试直接在公司外网的路由同网段向你服务器发送UDP包是否成功;
    --如果以上三种都成功,那么可能是运营商问题;否则就在以上的网络设备之间缩小范围继续测试。如果最终确定是运营商问题,那基本无解。
      

  4.   

    谢谢,
    我在内部局域网中测试是成功的,如果把服务器做了外网映射,然后从外网发送数据到内网服务器时,收不到数据,不知道为何?是不是udp 不能做这样的外网映射啊
      

  5.   

    是不是基于udp的socket服务器不能做外网映射,从外部向内部发送数据啊
      

  6.   


    不是,技术上不存在这种限制。一定是因为某些安全策略的问题。你最好能尝试“直接在公司外网的路由同网段向你服务器发送UDP包是否成功”,如果能成功,那么基本上是运营商限制了UDP发送,可以询问网络运营商或者修改外网映射的端口地址进行测试。
      

  7.   

    好的,谢谢,也就是说基于socket的udp程序是可以做外网向内网的映射的,
    如果找到原因了我会发出来