udp打孔

    技术2026-10-01  1

    备忘:

       这里涉及到两个概念: NAT和PPPoE

       借助于NAT,私有(保留)地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)      即可实现私有地址网络内所有计算机与Internet的通信需求。

      udp打孔技术,是两个内网间的计算机A、B需要通信,但却都没有对方的公网IP地址,无法直接进行通信,

      这时需要一个具有公网IP的服务器作为中转站,获取到两台计算机的公网IP、端口号(经过NAT变换)。

      (接下来就可以进行打洞操作,打洞成功后两机之间即可建立连接。)

    0.连接服务器前, A、B应已各自建立UDP监听

    listenSocket = new DatagramSocket(listenPort);//必须传入listenPort listenSocket.receive(packet...);

    1. A向服务器请求和B(B的ID)通信,服务器查找地址表

    listenSocket.send(cmd_packet...);

    2.服务器发打洞命令给B,

    3. B从打洞命令得到A的IP和端口号,B 发送一段message到A的IP、端口(路由器记录此次NAT会话),

    4. B通知服务器,已发message给A,

    5. 服务器通知A, A得到B的IP、端口号,

    6.A向B的IP、端口发送message ,这样A、B之间建立了一个临时session(session由NAT记录, 超时后会删除此session),

    7.打洞完成,两机可互相发送message。

     (经测试,使用域名转换工具,如花生壳,使内部计算机做服务器也可以,关键是在路由器上做一个端口映射到内部计算机服务器的监  听端口)

     

    打洞不一定能够成功,原因可能如下:

    1 、NAT变换失败(具体需查询交换机支持哪种NAT变换)

    2、现在普遍使用的ADSL,分配过来的IP是动态变化的(但在连网期间不应改变,所以A、B连接后应该定时发送连接包,保持连接)

    最新回复(0)