P2P技术简介

NAT( Network Address Translation)穿越(俗称打洞)技术

前言:

p2p已经存在于我们生活的方方面面;我们通过下载在工具(比如迅雷,bitorent,各种网盘)下载,观看live视频(ppstream,pplive)都在使用p2p,有些im也是通过p2p来传递消息的;我们知道使用p2p技术的下载工具下载更快,使用p2p的live视频更流畅,而且同时使用的人越多效果越好,因为他是可能从我们“邻居”那里获取数据。

那么p2p到底是个什么样的东西呢。暂且我么可以这样理解为:他是通过NAT穿越来建立的一种网络链接,实现了私有网络对私有网络(peer to peer)的互通。既然p2p链接是通过NAT穿越来建立,那么NAT穿越又是怎么回事呢?且看下文分解。

一、NAT 简介

  • 为了解决ipv4地址的紧缺(约为43亿)问题而出现了NAT
  • NAT将网络划分为内部网络和外部网络
    • 内部网络使用私有ip地址
    • 私有地址段包括以下三个:
    • 10.0.0.0-10.255.255.255; 172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255
    • 私有地址段,仅能在内部使用,不能作为全球路由地址
    • 内网所有主机共用一个外网地址
    • 内网中的主机通过将地址转换为外网地址才可以访问外网

二、NAT的特点

  1. 网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关;
  2. 网络访问只能先由私网侧发起,公网侧无法主动访问私网主机
  3. NAT网关在两个访问方向上完成两次地址的转换或翻译,出方向做源地址替换,入方向做目的地址替换;
  4. NAT网关的存在对通信双方是保持透明的;
  5. NAT网关为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来。

在这里第二条是重点,正是因为NAT规定了“网络访问只能先由私网侧发起,公网侧无法主动访问私网主机”,才引出了我们的主题:NAT穿越,我们就是要通过NAT穿越来实现“公网侧主动访问私网主机”。

三、地址转换表的建立与删除

  • NAT中内外网地址转换表的形式如下:

(内网)ip:port <----->(外网)ipw:portw
                …… <-----> ……

  • 建立:内网的ip:port首次访问外网时,建立映射关系

Udp:使用sendto发出第一个包时,建立映射关系
Tcp:发生在connect过程中(三次握手的第一个包(syn)发出时)

  • 删除:

Udp链接长时间静默时,删除映射关系
Tcp链接还会通过监测其关闭事件(FIN)来删除映射关系

四、NAT的类型
锥型:
地址转换关系的建立条件:首次访问外网的时候
    锥型NAT按照地址转换关系可被使用的条件可细分三种:
        完全锥型(full cone)
           地址转换关系,可以被任意外网地址(ip:port)使用
        受限锥型(restrict cone)
           地址转换关系,只可以被特定外网ip使用,(之前向此ip发送数据)
        端口受限锥型(port restrict cone)
           地址转换关系,只可以被特定外网ip:port使用,(之前向此ip:port发送数据)
对称型:
地址转换关系的建立条件:首次访问外网的时候, 或者再次访问不同的外网地址(ip:port)时

下面,通过一张图来再次分析一下各种NAT类型

在这张图中左侧是内网 右侧是外网,中间一个NAT,NAT中有一个地址转换表,地址转换表的左侧是内网地址,右侧是对应的外网地址

完全锥形的地址转换关系,可以被任何的外网地址W(x,y)使用,这里W(x,y)只要知道W(u,v),只有就可以通过这个地址内网的L(a,b)发送数据

受限锥形的地址转换关系,增加了一个可以被使用的条件,就是特的ip,在这里只有ip为1,还有ip为2的外网地址使用,可以通过W(u,v)向内网L(a,b)发送数据

端口受限锥形的地址转换关系,可以被使用的条件更加严格,就是特定的ip:port,在这里只有ip和port都满足这个条件的外网W(1:1),W(2:2)才可以通过W(u:v)向内网L(a,b)发送数据

对称型的地址转换关系更加严格,它的地址转换关系和目的外网地址一一对应,为访问W(1:1)建立的转换关系,只可以用来与外网W(1:1)通信,为访问W(2:2)建立的地址转换关系,只用来与外网W(2:2)通信,这就是为什么对称型NAT不能穿越的原因

五、如何穿越各种NAT

  • 完全锥型

穿越者仅需要知道被穿越者的公网地址(ip:port),就可以通过此公网地址实现穿越

  • 受限锥型

被穿越者必须向穿越者公网ip发送数据,穿越者才能通过被穿越者的公网地址实现穿越

  • 端口受限锥型

被穿越者必须向穿越者公网ip:port发送数据,穿越者才能通过被穿越者的公网地址实现穿越

  • 对称型

目前没有较好的办法实现穿越,但是可以通过中继的方式实现数据中转

一招就够了

  1. 双方同时向对方的公网地址发送试探数据
  2. 如果对方是受限型或者端口受限型NAT,此试探数据丢失
  3. 双发再次向对方的公网地址发送试探数据,
  4. 如果排除网络丢包,此时三种锥型NAT均已穿越成功

打洞相关协议

STUN: Session Traversal Utilities for NAT (STUN)
https://tools.ietf.org/html/rfc5389

TURN: Traversal Using Relays around NAT (TURN)
https://tools.ietf.org/html/rfc5766

ICE: Interactive Connectivity Establishment (ICE)
https://tools.ietf.org/html/rfc5245

开源实现(client)

- libjingle  由google公司开发, 现在已经被合入了webrtc项目
- pjnath   http://www.pjsip.org/pjnath/docs/html/
- libnice  https://nice.freedesktop.org/wiki/ 被用于janus-gateway
- libre  http://www.creytiv.com/re.html

开源实现(server)

rfc5766-turn-server webrtc推荐使用的
https://github.com/coturn/rfc5766-turn-server

Coturn rfc5766-turn-server 的新版本
https://github.com/coturn/coturn

时间: 2024-10-11 23:02:37

P2P技术简介的相关文章

P2P技术简介(包括BT软件的分析)(转)

这是一篇别人发表的论文,里面很全面的解释了P2P技术的实现,以及BT网络中应用P2P技术所设计的原理,并列举BT软件的一些专业名词的定义.由于论文发表的比较早,2005年时还没有DHT技术. http://files.cnblogs.com/files/EasonJim/P2P%E6%8A%80%E6%9C%AF%E7%AE%80%E4%BB%8B.pdf 原文出处:上海交通大学-周中夏 2005年

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

[原创]IP摄像头技术纵览(七)-P2P技术-UDP打洞实现内网NAT穿透 本文属于<IP摄像头技术纵览>系列文章之一: Author: chad Mail: [email protected] 本文可以自由转载,但转载请务必注明出处以及本声明信息. NAT技术的实际需求在10几年前就已经出现,为了解决这个问题,10几年来全世界的牛人早已经研究好了完整的解决方案,网上有大量优秀的解决方案文章,笔者自知无法超越,所以秉承拿来主义,将优秀文章根据个人实验及理解整理汇录于此,用于解释IP摄像头整个技

直播P2P技术一窥

1. 直播协议 直播协议主要有RTMP,HLS,MPEG-DASH,RTSP,HTTP-FLV等.每种协议都各有长短,比如RTMP延迟低,但诞生于Adobe,依赖于Flash Player,在如今FLash Player面临被淘汰的时代,RTMP前途未卜:HLS是苹果基于HTTP开发并主导的流媒体协议,它充分利用了HTTP的通用性,并能根据带宽自适应码率,但单个TS文件duration过大(一般为10s),延迟较高:MPEG-DASH类似于HLS,也是基于HTTP的,不同点是DASH单个片段du

Docker原生网络技术简介

Docker原生网络技术简介 默认网络 在宿主机部署好Docker Engine后会默认创建三种网络:Bridge.Host和None,如下: docker network ls NETWORK ID NAME DRIVER SCOPE 93dab79cdb5a bridge bridge local c920c9c10e62 host host local d2a11ea1c70a none null local Bridge 默认的Bridge网络是我们比较熟悉的docker0,它在安装完E

Html5版本的全套股票行情图开源了,附带实现技术简介

Html5版本的全套股票行情图开源了,附带实现技术简介

数字签名与数字证书技术简介

数字签名.数字证书等技术,是现代信息安全的核心技术,可谓使用面十分广泛.其基本理论本身并不复杂,本文希望通过深入浅出的介绍,能够让大家有一些基本了解. 对称加密.非对称加密 让我们通过一个例子开始:我们的主角分别是Alice和Bob.现在假设Alice要给Bob发送一份文件,文件内容非常机密.Alice不希望文件在发送的过程中被人截取而泄密. 这个时候,自然想到的方法就是对文件进行加密.当然除了加密外,我们还需要让Bob能够解密.就像Alice对文件上了锁,为了让Bob能够解开,则Bob必须有钥

【CUDA并行程序设计系列(1)】GPU技术简介

http://www.cnblogs.com/5long/p/cuda-parallel-programming-1.html 本系列目录: [CUDA并行程序设计系列(1)]GPU技术简介 [CUDA并行程序设计系列(2)]CUDA简介及CUDA初步编程 [CUDA并行程序设计系列(3)]CUDA线程模型 [CUDA并行程序设计系列(4)]CUDA内存 [CUDA并行程序设计系列(5)]CUDA原子操作与同步 [CUDA并行程序设计系列(6)]CUDA流与多GPU 关于CUDA的一些学习资料

【Java】Java Servlet 技术简介

Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创建您能够想像到的任意复杂度的 Web 应用程序,以及作为一名专业编程人员,您如何才能最有效地使用 servlet. 5 评论: Roy W. Miller ([email protected]), 独立的软件开发辅导员.程序员和作者, RoleModel Software 2004 年 12 月 2

CSS border三角、圆角图形生成技术简介

http://www.zhangxinxu.com/wordpress/?p=794 一.前言 利用CSS的border属性可以生成一些图形,例如三角或是圆角.纯粹的CSS2的内容,没有兼容性的问题,我之前在纯CSS实现各类气球泡泡对话框效果一文中算是比较详细的讲述了CSS border属性生成三角的原理,以及实例.我觉得此技术相当实用的,故本文再次简单叙述一下,另外,本文还将展示可能并不为众人所知的CSS border圆角生成技术.好了,裹脚布的话就不说了,直接进入正题. 二.CSS bord