0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文读懂p2p实现原理和NAT的类型

C语言专家集中营 来源:feiyan 2018-12-09 10:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

p2p实现原理

什么是打洞,为什么要打洞

由于Internet的快速发展 IPV4地址不够用,不能每个主机分到一个公网IP 所以使用NAT地址转换。

下面是我在网上找到的一副图

一文读懂p2p实现原理和NAT的类型

一般来说都是由私网内主机(例如上图中“电脑A-01”)主动发起连接,数据包经过NAT地址转换后送给公网上的服务器(例如上图中的“Server”),连接建立以后可双向传送数据,NAT设备允许私网内主机主动向公网内主机发送数据,但却禁止反方向的主动传递,但在一些特殊的场合需要不同私网内的主机进行互联(例如P2P软件、网络会议、视频传输等),TCP穿越NAT的问题必须解决。

下面是NAT的几种类型

NAT设备的类型对于TCP穿越NAT,有着十分重要的影响,根据端口映射方式,NAT可分为如下4类,前3种NAT类型可统称为cone类型。(1)全克隆( Full Clone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。任何一个外部主机均可通过该映射发送IP包到该内部主机。(2)限制性克隆(Restricted Clone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。但是,只有当内部主机先给IP地址为X的外部主机发送IP包,该外部主机才能向该内部主机发送IP包。(3)端口限制性克隆( Port Restricted Clone) :端口限制性克隆与限制性克隆类似,只是多了端口号的限制,即只有内部主机先向IP地址为X,端口号为P的外部主机发送1个IP包,该外部主机才能够把源端口号为P的IP包发送给该内部主机。(4)对称式NAT ( Symmetric NAT) :这种类型的NAT与上述3种类型的不同,在于当同一内部主机使用相同的端口与不同地址的外部主机进行通信时, NAT对该内部主机的映射会有所不同。对称式NAT不保证所有会话中的私有地址和公开IP之间绑定的一致性。相反,它为每个新的会话分配一个新的端口号。

先假设:有一个服务器S在公网上有一个IP,两个私网分别由NAT-A和NAT-B连接到公网,NAT-A后面有一台客户端A,NAT-B后面有一台客户端B,现在,我们需要借助S将A和B建立直接的TCP连接,即由B向A打一个洞,让A可以沿这个洞直接连接到B主机,就好像NAT-B不存在一样。

实现过程如下:1、 S启动两个网络侦听,一个叫【主连接】侦听,一个叫【协助打洞】的侦听。2、 A和B分别与S的【主连接】保持联系。3、 当A需要和B建立直接的TCP连接时,首先连接S的【协助打洞】端口,并发送协助连接申请。同时在该端口号上启动侦听。注意由于要在相同的网络终端上绑定到不同的套接字上,所以必须为这些套接字设置 SO_REUSEADDR 属性(即允许重用),否则侦听会失败。4、 S的【协助打洞】连接收到A的申请后通过【主连接】通知B,并将A经过NAT-A转换后的公网IP地址和端口等信息告诉B。5、 B收到S的连接通知后首先与S的【协助打洞】端口连接,随便发送一些数据后立即断开,这样做的目的是让S能知道B经过NAT-B转换后的公网IP和端口号。6、 B尝试与A的经过NAT-A转换后的公网IP地址和端口进行connect,根据不同的路由器会有不同的结果,有些路由器在这个操作就能建立连接,大多数路由器对于不请自到的SYN请求包直接丢弃而导致connect失败,但NAT-A会纪录此次连接的源地址和端口号,为接下来真正的连接做好了准备,这就是所谓的打洞,即B向A打了一个洞,下次A就能直接连接到B刚才使用的端口号了。7、 客户端B打洞的同时在相同的端口上启动侦听。B在一切准备就绪以后通过与S的【主连接】回复消息“我已经准备好”,S在收到以后将B经过NAT-B转换后的公网IP和端口号告诉给A。8、 A收到S回复的B的公网IP和端口号等信息以后,开始连接到B公网IP和端口号,由于在步骤6中B曾经尝试连接过A的公网IP地址和端口,NAT-A纪录了此次连接的信息,所以当A主动连接B时,NAT-B会认为是合法的SYN数据,并允许通过,从而直接的TCP连接建立起来了。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • P2P
    P2P
    +关注

    关注

    0

    文章

    152

    浏览量

    28071
  • NAT
    NAT
    +关注

    关注

    0

    文章

    166

    浏览量

    17092

原文标题:p2p实现原理及打洞技术介绍

文章出处:【微信号:C_Expert,微信公众号:C语言专家集中营】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    risc-v P扩展() P指令集简介

    P扩展简介: 数字信号处理(DSP)已成为现代电子系统的重要技术。广泛的现代应用都采用DSP算法来解决其特定领域的问题,包括传感器融合、伺服电机控制、音频解码/编码、语音合成和编码、MPEG4
    发表于 10-23 07:40

    如何使用ipv4_nat模块实现SNAT转发?

    ;, 0}; cmd_ifconfig(5,argument_list1); 问题:在自己的PC机器上设置了个路由 route ADD -p 172.16.100.59mask
    发表于 09-29 06:08

    P2P技术——数据采集系统高效存储的关键

    P2P技术凭借其直连高效、低延迟的特点,已成为数据采集系统实现高效数据存储的关键技术。作为专业的数据采集与存储方案提供商,度纬科技的ASMC-PXIe-8016存储卡,不仅完美融合了P2P技术优势
    的头像 发表于 07-24 17:24 537次阅读
    <b class='flag-5'>P2P</b>技术——数据采集系统高效存储的关键

    LC-DC01P2 LC-DC01P2

    电子发烧友网为你提供AIPULNION(AIPULNION)LC-DC01P2相关产品参数、数据手册,更有LC-DC01P2的引脚图、接线图、封装手册、中文资料、英文资料,LC-DC01P2真值表,LC-DC01
    发表于 03-25 18:40
    LC-DC01<b class='flag-5'>P2</b> LC-DC01<b class='flag-5'>P2</b>

    FA20-220S48P2D4 FA20-220S48P2D4

    电子发烧友网为你提供AIPULNION(AIPULNION)FA20-220S48P2D4相关产品参数、数据手册,更有FA20-220S48P2D4的引脚图、接线图、封装手册、中文资料、英文资料,FA20-220S48P2D4真
    发表于 03-24 18:55
    FA20-220S48<b class='flag-5'>P2</b>D4 FA20-220S48<b class='flag-5'>P2</b>D4

    UA10-220S05V3P2D UA10-220S05V3P2D

    电子发烧友网为你提供AIPULNION(AIPULNION)UA10-220S05V3P2D相关产品参数、数据手册,更有UA10-220S05V3P2D的引脚图、接线图、封装手册、中文资料、英文资料,UA10-220S05V3P2
    发表于 03-24 18:51
    UA10-220S05V3<b class='flag-5'>P2</b>D UA10-220S05V3<b class='flag-5'>P2</b>D

    LC-AC01P2 LC-AC01P2

    电子发烧友网为你提供AIPULNION(AIPULNION)LC-AC01P2相关产品参数、数据手册,更有LC-AC01P2的引脚图、接线图、封装手册、中文资料、英文资料,LC-AC01P2真值表,LC-AC01
    发表于 03-24 18:50
    LC-AC01<b class='flag-5'>P2</b> LC-AC01<b class='flag-5'>P2</b>

    UA10-220S5V3P2D UA10-220S5V3P2D

    电子发烧友网为你提供AIPULNION(AIPULNION)UA10-220S5V3P2D相关产品参数、数据手册,更有UA10-220S5V3P2D的引脚图、接线图、封装手册、中文资料、英文资料,UA10-220S5V3P2D真
    发表于 03-18 18:49
    UA10-220S5V3<b class='flag-5'>P2</b>D UA10-220S5V3<b class='flag-5'>P2</b>D

    DA10-220S3V3P2D4 DA10-220S3V3P2D4

    电子发烧友网为你提供AIPULNION(AIPULNION)DA10-220S3V3P2D4相关产品参数、数据手册,更有DA10-220S3V3P2D4的引脚图、接线图、封装手册、中文资料、英文资料,DA10-220S3V3P2
    发表于 03-18 18:46
    DA10-220S3V3<b class='flag-5'>P2</b>D4 DA10-220S3V3<b class='flag-5'>P2</b>D4

    FA20-300S24H2D4P2 FA20-300S24H2D4P2

    电子发烧友网为你提供AIPULNION(AIPULNION)FA20-300S24H2D4P2相关产品参数、数据手册,更有FA20-300S24H2D4P2的引脚图、接线图、封装手册、中文资料、英文
    发表于 03-18 18:29
    FA20-300S24H<b class='flag-5'>2D4P2</b> FA20-300S24H<b class='flag-5'>2D4P2</b>

    读懂:LED 驱动电路二极管挑选要点

    读懂:LED 驱动电路二极管挑选要点
    的头像 发表于 02-06 14:47 1088次阅读

    读懂什么是「雷电4」

    Thunderbolt读懂什么是「雷电4」目前大部分PC接口配备了USB接口、音频接口、HDMI接口等,这些接口的功能基本覆盖了用户的日常使用需求。为了提供更高速、更便捷的数据传输和设备连接体
    的头像 发表于 02-05 17:52 6185次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>读懂</b>什么是「雷电4」

    ptp技术的最新发展趋势

    随着互联网技术的飞速发展,P2P技术已经成为信息共享和网络通信的重要组成部分。从最初的文件共享平台如Napster,到后来的BitTorrent协议,再到现代的区块链技术,P2P技术直在不断地演进
    的头像 发表于 12-29 10:02 952次阅读

    ptp对实时数据传输的影响

    在现代通信技术中,点对点(P2P)网络已经成为数据传输的种重要方式。P2P网络允许网络中的每个节点既可以作为客户端也可以作为服务器,直接进行数据交换。这种去中心化的网络结构对于实时数据传输有着深远
    的头像 发表于 12-29 09:53 1043次阅读

    ptp在智能制造中的作用

    随着工业4.0和智能制造的兴起,传统的制造模式正经历着场革命性的变革。点对点(P2P)技术,作为种去中心化的通信方式,为智能制造提供了新的解决方案。 P2P技术概述
    的头像 发表于 12-29 09:51 923次阅读