P2P之NAT穿透原理介绍

背景

一次项目中,对于主动协议接入的设备,客户希望能够设备端直接推送码流到客户端以此减少中心媒体的负载。所以对P2P这块方案做了了解,这里做下整理。

基本概念

P2P对等网络

即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构  ,是对等计算模型在应用层形成的一种组网或网络形式。“Peer”在英语里有“对等者、伙伴、对端”的意义。因此,从字面上,P2P可以理解为对等计算或对等网络。国内一些媒体将P2P翻译成“点对点”或者“端对端”,学术界则统一称为对等网络(Peer-to-peer networking)或对等计算(Peer-to-peer computing),其可以定义为:网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源、服务和内容的提供者(Server),又是资源、服务和内容的获取者(Client)

P2P网络特点

优点

缺点

  • 非中心化
  • 可扩展性
  • 健壮性
  • 高性价比
  • 负载均衡
  • 隐私保护
  • 受两端网络影响较大
  • 受NAT限制,某些NAT难以穿透

P2P主要应用

  • 文件内容共享和下载
  • 计算能力和存储共享
  • 即时通讯系统
  • 游戏
  • 网络电视
  • 等等

思考

我们来看一组网络模型:

分别在两个网段内的C和D该如何来建立通信呢?

一般情况是这样的:

通过一个中心服务E,C和D分别连接到E,然后通过E来转发数据,这样就行完成C和D的相互通信。但是这种方式,针对用户端较多,且传输数据量较大时,中心节点的负载会急剧增大,导致构建中心服务的成本很高。如果能够端到端直接通信则中心成本能够降低很多。

NAT穿透

NAT

NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。

这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。

另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC1632中有对NAT的说明。

NAT上有关系对应表,当NAT内部地址向外部目标地址发送报文时,会产生一个内部地址和NAT对外地址的对应关系。

同时,也会有NAT对外地址和目标地址的映射关系

一般来讲, NAT可以分为四种类型,分别是:

  • 全锥型(Full Cone)
  • 受限锥型(Restricted Cone), 或者说是IP受限锥型
  • 端口受限锥型(Port Restricted Cone), 或者说是IP + PORT受限锥型
  • 对称型(Symmetric)

全锥型(Full Cone)

  • 全锥型是最容易连通的NAT,因为只需要内部ip+port在NAT表中有申明过,则外部任意IP,端口均可以透过NAT对外映射的的IP、端口访问。
  • 同一个内部地址,向不同目标地址发送报文时,使用的NAT对外地址相同

如上图,如果B在NAT A上有一个对外的映射地址,那么不管是C还是D都能通过该映射地址访问到B.

受限锥型(Restricted Cone)

对于目标IP的任意端口均可以访问NAT对外映射的地址。即,只限制IP不限制端口。

同一个内部地址,向不同目标地址发送报文时,使用的NAT对外地址相同

端口受限锥型(Port Restricted Cone)

  • 只有当外部主动请求的的源IP和端口等于内部网发送的请求的目的IP和端口是才能通信。即NAT表中,必须有源地址和目的地址的对应关系。
  • 同一个内部地址,向不同目标地址发送报文时,使用的NAT对外地址相同

对称型(Symmetric)

  • 如果发送的包的目的IP 和 PORT相同,那么映射 IP 和 PORT将相同。内部的同一台机器,同一个端口如果目的地址不同,那么映射的端口也不同,所以只有他主动连的服务器才可能知道他的映射后端口,别的服务器如果想连他只能靠猜测端口。
  • 对于这种NAT,连接不同的外部目标(IP或者端口不同),原来NAT打开的端口会变化,而Cone NAT则不会。

非对称型NAT穿透过程

这里示例介绍对称型中限制最多的穿透过程(两个端口限制型的NAT穿透过程),因为这个过程会包含所有限制更少的穿透过程。

1. 首先,C和D连接一个中心服务E.

2. 通过中心服务E交换双方的对外通信地址

3. C向从E拿到的D的外部通信地址发送一个报文,此时NAT B没有该路由信息,报文会被丢弃,但是NAT A上会有NAT A 到 NAT B的映射。

4. D向从E拿到的D的外部通信地址发送一个报文,此时NAT A上已经有对应路由信息,所以信息能够通过NAT A发送到C。

5. 此时NAT B上也有对NAT A的映射关系,至此C和D的P2P通信连接建立。

对称型NAT穿透

由于对称型NAT对于不同的目的地址,对外映射端口会发生改变,所以上述过程将无法直接打通,目前常用的方法是端口猜想,主要是基于大部分对称NAT一般新分配的端口是向下自增的原理。这里不做具体介绍,过程基本和上述描述一致。

P2P之NAT穿透原理相关推荐

  1. 通俗易懂:快速理解ipv4的NAT穿透原理

    NAT基础   IPv4由于最初的设计原因,长度只有32位,所以只提供了大约40亿个地址.这造成了地址耗尽危机.   NAT(Network Address Translation,网络地址转换),也 ...

  2. (转)NAT与NAT穿透 原理

    原文:http://blog.csdn.net/ustcgy/article/details/5655050 5. NAT穿透 5.1 转发      最可靠但又是最低效的点对点通信方法,莫过于将p2 ...

  3. 一款超牛逼的 P2P 内网穿透神器(附安装、使用教程)

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  4. P2P之UDP穿透NAT的原理

    关键词: P2P UDP NAT 原理 穿透 Traveral Symmetric Cone 原始作者: Hwycheng Leo(FlashBT@Hotmail.com) 源码下载: http:// ...

  5. P2P之UDP穿透NAT的原理与实现(附源代码)

    原文链接 关于UDP穿透NAT的中文资料在网络上是很少的,仅有<<P2P之UDP穿透NAT的原理与实现(shootingstars)>>这篇文章有实际的参考价值. 本人近两年来 ...

  6. P2P之UDP穿透NAT的原理与实现 - 增强篇(附修改过的源代码)

    关键词: P2P UDP NAT 原理 穿透 Traveral Symmetric Cone 原始作者: Hwycheng Leo(FlashBT@Hotmail.com) 源码下载: http:// ...

  7. P2P之UDP穿透NAT的原理与实现--增强篇(附源代码)

    关键词: P2P UDP NAT 原理 穿透 Traveral Symmetric Cone 原始作者: Hwycheng Leo(FlashBT@Hotmail.com) 源码下载: http:// ...

  8. P2P UDP NAT 原理 穿透

    关键词: P2P UDP NAT 原理 穿透 Traveral Symmetric Cone 原始作者: Hwycheng Leo(FlashBT@Hotmail.com) 源码下载: http:// ...

  9. P2P 之 UDP穿透NAT的原理与实现

    转自:http://www.cnblogs.com/tianyamoon/archive/2007/04/04/700064.html P2P   之   UDP穿透NAT的原理与实现(附源代码)   ...

最新文章

  1. 生成彩条的MATLAB代码
  2. 用非递归方式实现二叉树中序遍历
  3. 看完99%的人都学会了!9次Android面试经验总结,我先收藏为敬
  4. 研究机构预计芯片短缺将导致全球轻型汽车今年减产502万辆
  5. easypoi之IExcelVerifyHandler自定义校验使用
  6. python自回归_【时间序列】自回归模型
  7. 如何编写makefile文件
  8. 南京大学计算机专业考研难吗,计算机专业考研,除了南大和中山,还有哪些大学难度大性价比高...
  9. 真香!java全栈工程师前景
  10. 儿童视力档案小程序开发,视力“云管家”
  11. Android状态栏添加QS快捷开关
  12. 需求分析岗的一般工作流程
  13. QT学习-超漂亮的软件登录界面模块
  14. MT6261处理器规格介绍,MT6261芯片技术资料集锦
  15. 关键字驱动和数据驱动
  16. 浮点数存储方式理解,浮点数和整数之间的转换
  17. 【网络工程】身为工程师不懂工程类专业知识?小心被人笑话
  18. 群晖NAS备份建议及备份方式
  19. Redis和RedisClient 官网下载方式
  20. 三星android9更快么,三星S9将会成为最快Android手机 有6大要点你必须知道

热门文章

  1. 强化你的Cobalt strike之Cortana
  2. sleep(0),sleep以及yeid 的区别
  3. 郑大跨专业考研计算机,多所985/211大学计算机考研禁止跨考!新乡寄宿考研
  4. 李琦-《人月神话》三十年-UMLChina讲座-音频和幻灯
  5. Python学习笔记——AES 加密/解密
  6. Sql Server数据库中的用户及权限配置,保障数据库安全
  7. 富士施乐m115b怎么连接电脑_施乐 m115b打印机怎么安装
  8. 绘图软件veusz如何导出eps/ps格式的图片
  9. 音频放大电路制作记录
  10. Vue+ElementUI实现的权限管理系统