• Home
  • 写文
  • 关于
    • jlweb Blog photo

      jlweb Blog

      occupied with moon theme of jelly

    • 详情
    • Github
    • Steam
  • 文章
    • 所有文章
    • 所有标签
  • 项目
  • 主站
search clear

P2P 通信最大的障碍就是 NAT(网络地址转换),NAT 使得局域网内的设备也可以与公网进行通讯,但是不同 NAT 下的设备之间通讯将会变得很困难。UDP 打洞就是用来使得设备间绕过 NAT 进行通讯的一种技术。

  • 首先打洞p2p交流的实现是基于NAT转换完成的
  • 打洞前,需要一个公网服务器作为公共注册点,P2P通信双方把自己应用的通讯端口和外网ip(所属NAT设备ipv4地址)提交到registration中心
  • 打洞,是利用了NAT把内网设备和公网通讯的原理用成了 和 另一个NAT设备通信(看成公网了),当然中间需要让NAT设备完成NAT转换,也就是记录发包走向映射表的建立,具体如下: :::success ! 最关键的一步,打洞。 设备 1 向 42.120.241.46:41000 发一个包,NAT B 自然能接收到这个包,然而它不知道来自 NAT A 的包应该发给谁,因此 NAT B 将这个包舍弃。但是由于设备 1 向 42.120.241.46:41000 发过包,NAT A 会记录:以后来自 42.120.241.46:41000 的包都发给设备1。 设备 2 也做相同的操作,让 NAT B 也知道:以后来自 123.122.53.20:31000 的包都发给设备 2。 至此,NAT A 与 NAT B 都互相为对方保留了端口,就可以愉快地通讯了。 ::: 【其他】

  • UDP打洞是需要网络拓扑结构支持才行的
    • 这项技术需要一个圆锥型NAT设备才能够正常工作。对称型NAT不能使用这项技术。
  • TCP打洞和UDP打洞区别

【NAT类型划分】