P2P之NAT穿透原理

news/2024/11/16 10:45:03/

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一般新分配的端口是向下自增的原理。这里不做具体介绍,过程基本和上述描述一致。


http://www.ppmy.cn/news/300738.html

相关文章

免费P2P穿透通信(5) Tunnel隧道映射模块测试使用

Tunnel模块测试 Wkf lib p2p通信库提供了Tunnel隧道通信模块,提供隧道代理网络通信。 Tunnel模块的资料如下图: 这些Tunnel模块的信息如下: Test_lib_tunnel_client --- 提供Tunnel客户端的资料 Test_lib_tunnel_server --- 提供Tunnel服务…

p2p网络中的NAT穿透

一、p2p网络 1、简介 p2p网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。网络的参与者共享他们所拥有的一部分硬件资源&#…

小伙用C++代码实现P2P穿透文件传输,网友集体打call!

VC P2P穿透文件传输,目前只开放客户端开发,参考Test目录下的源码。如果无法运行,请先安装vcredist_x86_vs2010.exe。文件说明: 1.UDPServer.exe主要作用是进行P2P打洞穿透使用;UDPServer_Config.ini进行端口配置 2…

P2P网络中内网穿透的方法总结(2019)

P2P网络中内网穿越方法总结(2019) 内网穿越的需求问题分析方案一方案二方案三 内网穿越的需求 今天去图书馆搜资料查了一下,这个问题很老,但是解决办法很久都没有更新过了,还得翻翻书。网上的帖子众说纷纭&#xff0c…

【Protobuf】Protobuf中的Message语法规范

Protobuf中的Message语法规范 Protobuf快速使用 Java版、Python版 基本语法 标识号 包 选项 字段类型 枚举、数组、Map 消息嵌套的几种写法 消息嵌套的调用 Protobuf快速使用 Java版、Python版 参考上一篇:点击查看 基本语法 syntax "proto3"…

2612硒鼓拆装加粉

好久没有写文章了,和之前年初的时候说要在这里记录所以一些知识文档有一点了违被了,都过这么久了也该把我09年03月到09月所发生,所了解的知识做一记录. 3月17日 拆装2612硒鼓型号 先发个图上来吧. 结构:分为两边. 一边: 鼓芯,橡胶棒,废粉仓. 另一边: 粉盒,充电辊. 拆装…

清除三星SCX4200硒鼓上的计数器

注意4200机器分英文版机器和中文版机器2种,芯片里的资料也是不一样的,二种不能互换.附件里提供的是中文版用的,英文版机器的朋友不要用. 下面的线路板拆开硒鼓后就可以看见,如果不拆鼓只能看到 GND,CLK,DATA,VCC四个触点(外边只能看到3段金属丝,隐约可以看到板子上印的字) 记数…

三星SCX-4521F 4725F内存接收墨粉用尽问题

三星传真机SCX-4521F硒鼓粉终于耗尽,加粉后,还是提示“粉墨耗尽”,打印/复印正常,但是传真机功能不能使用,只处于内存接收状态。查看了一下,保险丝是85mA的,手头没这规格的,就没换&a…