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

简单解释 NAT
NAT 大家应该十分熟悉了,它分为几种。一种就叫做 NAT,它只对 IP 地址进行转换;另一种叫做 NAPT(Network Address/Port Translation),它可以对整个会话的端点(由 IP 地址和端口号组成)做转换,这是一种更加常见的 NAT 变种。当然了,NAPT 也分为许多种,我们这里就不深入探讨了,大家如果有兴趣可以查阅相关的文献。

下面就简单介绍一下 NAT 的工作原理:
首先,NAT A 网下的设备 1(192.168.1.101)想与某公网 IP 通讯,设备 1 将包发给 NAT A,然后 NAT A 对源 IP 进行转换发给 NAT B(中间可能还会经过多重 NAT)。

这样做的目的是,NAT B 并不知晓 NAT A 下的各个设备,他只能与 NAT A 本身通讯,因此发送给 NAT B 的包源 IP 必须是 NAT A 的公网 IP,不然 NAT B 没有办法进行回复。

接下来 NAT B 将回复包再发回 NAT A,此时就是 NAT 发挥作用的时候了,NAT A 现在要做的就是将包再分发回之前的设备,如何确定要发给谁呢?NAT 中记录了一张表,之前 192.168.1.101 通过 2333 端口与 42.120.241.46 端口 443 通讯了,并且 NAT A 是用 60001 的端口转发出去的,那么这次接受到发往该 NAT 60001 端口的包时就应该再通过 2333 端口转发给 192.168.1.101。经过这样的过程,NAT A 下的设备都可以连接到互联网了!

UDP 打洞原理及过程
如上图所示,由于 NAT 的存在,当 NAT A 的设备 1 想与 NAT B 下的设备通讯时,必然要将目标 IP 设置为 NAT B 的公网地址,而 NAT B 转发表中并没有记录过 NAT A 与自身网络下设备的通讯记录,因此 NAT B 会将包丢掉。

下面我们来看看 UDP 打洞是怎么解决这个问题的。
为了能够进行 UDP 打洞,我们需要一台公网的服务器作为中转站,它是 NAT A 与 NAT B 之间的信使。

(为了方便起见,我们把地址为 192.168.1.101 的设备称为设备 1,把地址为 192.168.1.2 的设备称为设备 2,信使服务器称为 S)

首先,设备 1 和设备 2 都向 S 注册自己,S 中能记录各个设备此时使用的公网 IP 地址和端口号,例如设备 1 是 123.122.53.20:31000,设备 2 是 42.120.241.46:41000。

然后设备 1 与设备 2 都向 S 获取对方的公网 IP 与之前预留的端口号,就像这样:
然后就是最关键的一步,打洞。

设备 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 都互相为对方保留了端口,就可以愉快地通讯了。

当然了,大致原理是很简单的,实际操作起来情况可能会更复杂,会涉及到丢包、多重 NAT 等问题的处理,本文仅起到一个科普解释的作用。

简单解释 P2P 技术之 UDP 打洞相关推荐

  1. P2P技术基础: UDP打洞原理

    转自:http://blog.pfan.cn/fengfei/18828.html 首先先介绍一些基本概念:             NAT(Network Address              ...

  2. 【原创】IP摄像头技术纵览(七)---P2P技术—UDP打洞实现内网NAT穿透

    [原创]IP摄像头技术纵览(七)-P2P技术-UDP打洞实现内网NAT穿透 本文属于<IP摄像头技术纵览>系列文章之一: Author: chad Mail: linczone@163.c ...

  3. UDP打洞、P2P组网方式研究

    catalogue 1. NAT概念 2. P2P概念 3. UDP打洞 4. P2P DEMO 5. ZeroNet P2P 1. NAT概念 在STUN协议中,根据内部终端的地址(LocalIP: ...

  4. pwnat——一种无需第三方服务器就能完成NAT点对点P2P穿透的基于UDP打洞技术的新方法

    pwnat--一种无需第三方服务器就能完成NAT点对点P2P穿透的基于UDP打洞技术的新方法 简介 传统的udp打洞 UDP 打洞原理及过程 pwnat技术,无需第三方服务器! pwnat用法 pwn ...

  5. p2p技术,python,udp实现打洞原理笔记

    peer-to-peer简称P2P,即点对点技术.又称对等互联网络技术,是一种网络新技术,简单的说,P2P直接将计算机直接联系起来,在两台都是公网ip下的计算机可以轻松实现两台电脑的连接,但是运营商现 ...

  6. p2p内网穿透技术-udp打洞

    在公司如何访问家里的电脑?实现方法有很多,其它p2p传输文件最快,能否实现? udp打洞原理 假设有两台分别处于各自的私有网络中的主机:A和B:N1和N2是两个网络的NAT设备,分别拥有IP地址P1和 ...

  7. p2p的UDP打洞原理

    P2P技术 一 P2P技术翻译,主要UDP hole punching技术 P2P技术翻译,主要UDP hole punching技术,经过测试证明有可行性,但也受其制约条件影响 2. 对于使用NAT ...

  8. P2P技术详解(三):P2P中的NAT穿越(打洞)方案详解(进阶分析篇)

    目录 1.NAT和NAPT 2.NAT带来的问题 3.P2P通信穿越NAT的技术.方法 4.NAT穿越技术1:应用层网关 4.1.原理 4.2.限制 5.NAT穿越技术2:中间件技术 5.1.原理 5 ...

  9. NAT穿透技术详解(udp打洞精髓附代码)

    以前自己写的代码都只是在本地进行c/s通信,今天想写一个可以跨越外网的c/s通信,这里我就用udp实现一个点对点的不同外网的通信.用到的技术就是nat穿透技术,这里最直接使用的就是udp打洞技术.文中 ...

最新文章

  1. 北大清华合力打造通用人工智能实验班
  2. 揭秘毕加索被隐藏千年的“画中画”,神经网络让它重新面世
  3. linux 挂载硬盘_Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令...
  4. 三角数字(某年南理工研究生入学上机试题)
  5. Linux下多网卡MAC配置问题
  6. 自定义控件:滑动开关
  7. raid5通常需要几块盘_raid5需要几块硬盘
  8. k8s label和label选择器
  9. Elasticsearch7.X ILM索引生命周期管理(冷热分离)
  10. 新一代球王!日本推AI篮球机器人,命中率接近100%!
  11. python循环顶帖_设计Python数据库连接池1-对象的循环引用问题
  12. 官方的正则表达式组件 RegularExpressions (4) : 表达式选项
  13. 【debug】 烧写 ttn-otaa.ino提示 undefined reference to ‘table_g‘ / ‘table_get_ostime‘
  14. 安岳天气预报软件测试,安岳天气预报15天
  15. 【QT】QT从零入门教程(一):图像处理自编软件
  16. 【073】Android 数据存储(SQLite)
  17. 2M口,电口,光口的区别
  18. Initial Audio Trap Phantom Heatup3 Expansion for mac(Heatup3扩展预设)
  19. network 节点label以及相关字体设置
  20. RK平台HDMI、喇叭音频同时输出

热门文章

  1. 手机客户端访问本机计算机局域网服务器
  2. ASP.NET网站实现中英文转换(本地化资源)
  3. Hadoop重点难点:Shuffle过程中的环形缓冲区
  4. 日常使用——利用油猴脚本将数据所需要的数据输出的控制台
  5. android:sharedUserId=android.uid.system 的使用
  6. 设备指示灯开关状态识别检测系统 yolov5
  7. PT927G光猫获取超管+删除tr069教程
  8. K8s系列之:Deployment应用实战和Deployment相关命令整理
  9. EFM32 学习调试记录
  10. 51单片机的C语言延时的一些总结