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

    浏览量

    26734
  • NAT
    NAT
    +关注

    关注

    0

    文章

    145

    浏览量

    16245

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

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

收藏 人收藏

    评论

    相关推荐

    请问TSC2014IYZGT和TSC2017IYZGR是否可以P2P替换?

    您好,请问TSC2014IYZGT和TSC2017IYZGR是否可以P2P替换?
    发表于 11-21 08:00

    P2link内网穿透两大亮点—不限速使用—多设备集中管理

    引言 P2link是款采用了P2P技术和穿透协议,面向高性能需求的内网穿透工具,各节点(用户或设备)可以直接进行数据传输和通信,而不需要通过中心服务器,能够实现局域网内部设备与外网的
    的头像 发表于 11-11 14:28 239次阅读

    读懂单灯控制器工作原理

    读懂单灯控制器工作原理
    的头像 发表于 11-11 13:13 242次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>读懂</b>单灯控制器工作原理

    款高性能内网穿透工具——P2link

    P2link是款面向高性能需求的内网穿透工具,采用了P2P技术和穿透协议,各节点(用户或设备)可以直接进行数据传输和通信,而不需要通过中心服务器,能够实现局域网内部设备与外网的快速、
    的头像 发表于 11-08 10:59 614次阅读
    <b class='flag-5'>一</b>款高性能内网穿透工具——<b class='flag-5'>P2</b>link

    读懂MSA(测量系统分析)

    读懂MSA(测量系统分析)
    的头像 发表于 11-01 11:08 916次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>读懂</b>MSA(测量系统分析)

    打破网络边界:P2Link助力实现高效远程访问与内网穿透

    ,解决内网穿透难题,让用户轻松实现远程访问和管理。以下是些典型的应用场景: 远程办公与文件访问: 在远程办公场景中,员工常常需要从外部网络访问公司内网中的文件服务器、数据库或办公系统。通过P2
    发表于 10-31 11:54

    台电新品P50 AI平板电脑即将上市

    本次P50AI平板电脑诞生过程得益于台电与全志科技再次深度联袂合作,并在台电新品P50AI上首发搭载全志A733处理器。赋能AI,提高消费者使用体验!功能性前瞻,
    的头像 发表于 10-24 10:23 590次阅读

    读懂新能源汽车的功能安全

    电子发烧友网站提供《读懂新能源汽车的功能安全.pdf》资料免费下载
    发表于 09-04 09:22 3次下载

    光伏互感器p1p2正确接线法

    光伏互感器是种用于测量和保护光伏系统中电流的设备。正确接线对于确保光伏系统安全、稳定和高效运行至关重要。 、光伏互感器P1P2接线原理 光伏互感器P1P2的作用 光伏互感器
    的头像 发表于 08-22 09:12 1742次阅读

    互感器p2朝上会影响计量吗

    互感器P2朝上确实可能会对计量产生影响。通常情况下,互感器的P1P2朝向是固定的,即次侧的电压引脚P1朝上,二次侧的电压引脚P2朝下。这种
    的头像 发表于 08-21 18:17 2043次阅读

    互感器p1p2穿反了有什么影响

    互感器是种用于测量高电压或大电流的仪器,它通过将高电压或大电流转换为低电压或小电流来实现测量。在互感器的使用过程中,P1和P2是两个重要的端子,它们分别代表互感器的输入端和输出端。如
    的头像 发表于 08-21 18:13 4642次阅读

    Cyw55572 FMAC如何支持STA+AP+P2P的模式?

    客户现在使用CYW55572,FMAC驱动,想知道如何实现STA+AP+P2P的模式,即同时可以使用STA模式,AP模式,P2P模式,麻烦帮忙指导,谢谢
    发表于 05-29 06:15

    求助,在STM30WB55中如何让P2P_Client同时连接P2P_Sever1和P2PSever2等多个设备?

    分别为Sever1和Sever2。目前只能实现Client与其中任意块链接,但不能实现多机的链接。 app_conf.h中配置如下, define CFG_MAX_CONNECTIO
    发表于 04-01 06:04

    是否可以将Laird LWB+ CYW43439和WHD用于WiFi Direct/P2P模式?

    我目前正在AP和STA模式下成功使用带有WHD的Laird LWB+ CYW43439。 但是现在我想在 WiFi Direct/P2P 模式下使用它。 是否可以将Laird LWB+ CYW43439和WHD用于WiFi Direct/P2P模式? 如果是这样,我需要什
    发表于 03-01 07:47

    什么是NATNAT类型有哪些?NAT是如何工作的?NAT解决了什么问题?

    的方式来连接多个设备,而不需要为每个设备都分配个公共IP地址。通过将源IP地址和端口号映射到公共IP地址和端口号,NAT充当了个中间人,使得设备可以通过个公共IP地址与外部网络进
    的头像 发表于 02-04 11:03 5119次阅读