p2p穿透nat的原理

author author     2023-04-15     373

关键词:

参考技术A

NAT 俗称网络地址转换,基本 NAT 都部署在路由器或者交换机上。

主要还是IP地址的不足,使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。用大白话:比如你有一个路由器(家用的那种就可以)这个路由器本身链接了公网(被分配到了一个公网的IP地址)。路由器后面有接了N多个设备,每个设备都分配到了一个私有的地址(内网地址),这些地址可以通过这个路由器和外网交互(并非是代理的中继方式)。

1. 基本NAT: 这种NAT下的私有IP只有少部分(并不是全部)可以和外网通讯。每次这些私有地址向外网发送数据的时候,NAT就会把这个数据报的 源地址IP 修改成NAT的 公网地址 (这样接收方以为这个数据报是从NAT发给我的,我后面数据报在会给这个NAT就好了),并在NAT内存下对应的 映射关系 (端口和内网私有IP的映射)。当NAT收外网的数据报的时候,根据数据报的端口号找到内网的私有IP地址,将这个数据报的目的IP地址修改成内网私有IP地址(整个过程NAT负责了IP地址来回替换,辅助完成了内网机器和外网设备通讯,这里的外网设备有可能也是一个NAT)。如果收到的数据报在映射表中找不到对应映射,这个数据报就会被丢弃。

存在问题: 基本的NAT由于不会改动端口信息,当内部2个不同机器(2个不同的私有IP)使用同样的端口会出现映射错误了。

2. NPAT: 这类的NAT是在基本NAT基础上演化而来,它不仅修改 IP地址 还有 端口号 。基本可以满足NAT内全部的网络访问要求。NAT内的私有IP地址第一次向外网发送数据,NAT会选一个 映射表 里面还没有被使用过的 端口号 ,然后修改 发送数据报 的 源IP地址 和 源端口号 并发送出去,并把 私有IP地址 和 源端口号 ,和修改后的 端口号 映射关系记录下来。之后这个私有IP地址发送数据会首先判别之前是不是已经有这个映射关系,如果有就继续按照映射关系修改数据报。当NAT收到外部的数据,会从映射表找到对应关系。修改数据报的 目的IP地址 和 目的端口号 ,如果映射表中没有记录这个数据报就会被丢弃了。

解决了基础NAT的端口问题: 通过修改端口的可以让NAT内的多个私有IP地址可以使用相同的端口进行通信。因为NPAT更加灵活所以现在基本的NAT技术就是指的NPAT技术。

如果2台机器在同一个NAT下,那么他们可以直接通信了。

情况 1: 如果2台机器有一台在NAT下另一个在外网,那么只能NAT内的私有机器主动链接外网机器,因为外网的机器主动链接内网的机器,NAT映射表并不存在这个数据转发项,这个数据报就被丢弃了。

情况 2: 如果2台机器都在不同的NAT下,那么不管哪一方发起链接请求数据报都不会到达对应的机器。这种情况非常常见。

那么最简单的方式解决上面2个问题:就是在公网部署一台 中继服务器 ,双方机器都链接这台服务器。然后 中继服务器 帮助这2台服务器转发数据。这种方式最简单也是效率最低的。

到这里P2P正式登场了: 比如有下面这样的网络拓扑结构(就是上面情况2)

如果 NAT-A, IP:40.32.5.125 和 NAT-B, IP:234.12.3.8 需要直接通信的话,基本不可能,所以需要做些手段。

假设需要 手机 (图中)建立TCP链接到 电脑 (图中)需要如下手续:

**1. **由被链接方发送数据报(可以是UDP甚至是TCP的SYNC握手包)

[图片上传失败...(image-4b61ae-1528199423593)]
绿色线表示了数据报流动的方向

图中 电脑 给 NAT-A IP:40.32.5.125 / 端口:4553 发出了一个数据报,这个数据报在经过 NAT-B 的时候 源IP地址 被修改成了 NAT-B的IP地址234.12.3.8 , 源端口 被修改成了 678 。这个数据报在到达 NAT-A 的时候,在映射表中找不到 678 端口对应的内部私有IP的映射。所以这个数据报一定会被 NAT-A 丢弃掉。但是经过这次数据报发送,在 NAT-B 的映射表里面就会标记 40.32.5.125:4553 我已经发送过数据过去了,那么后面只要从这个地址发送来的数据报,我就可以转发到内网正确的设备上面。

**2. **完成第一步后,链接方可以发起数据请求

p2p可以合理的利用互联网的资源,比如两个人视频聊天。完全可以通过p2p打穿NAT后互发数据(QQ就是这么办的)。但是有的时候设备之间的直连性能很差,比如:电信的用户和移动的用户视频。这个问题是ISP厂商之间的过渡带宽太窄,就算是设备直连但是依旧速度不快。所以这里情况下需要自己搭建服务器中继(中继也不是完全无作用)。这个服务器就是网关的作用,一般有多个网卡。不同的网卡对接不同的ISP厂商,然后互相转发。

p2p穿透nat的原理

参考技术ANAT俗称网络地址转换,基本NAT都部署在路由器或者交换机上。主要还是IP地址的不足,使用少量的公有IP地址代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。用大白话:比如你有一个路由器(家用... 查看详情

通俗易懂:快速理解p2p技术中的nat穿透原理

目录1、基础知识1.1、什么是NAT?1.2、为什么会有NAT?1.3、NAT有什么优缺点?2、NAT的实现方式2.1、静态NAT2.2、NAPT3、NAT的主要类型3.1、完全锥型NAT(FullConeNAT,后面简称FC)3.2、受限锥型NAT(RestrictedConeNAT... 查看详情

通俗易懂:快速理解p2p技术中的nat穿透原理

目录1、基础知识1.1、什么是NAT?1.2、为什么会有NAT?1.3、NAT有什么优缺点?2、NAT的实现方式2.1、静态NAT2.2、NAPT3、NAT的主要类型3.1、完全锥型NAT(FullConeNAT,后面简称FC)3.2、受限锥型NAT(RestrictedConeNAT... 查看详情

nat穿透技术穿透原理和方法详解

...NAT分类推荐视频P2P技术—NAT原理,NAT类型,网络穿透原理从50道腾讯面试题,分析腾讯c++后端工程的技能树学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂1.1基础型NAT仅... 查看详情

nat穿透原理浅浅说---转发

...把数据包发回导语最近介入测试P2P的相关逻辑,因此对NAT穿透原理做了一定程度的了解(当然也没有很深入)。本篇文章也是综合和参考了些网络上和文献里的一些资料(文中没有对引用处进行标记,请见谅)。写本文的目的就... 查看详情

p2p内网穿透技术

 打赏(0)     点赞(0)sailyang  2018-12-516:41  848  在公司如何访问家里的电脑?实现方法有很多,其它p2p传输文件最快,能否实现?udp打洞原理假设有两台分别处于各自的私有网络中的主机:A和B;N1和N... 查看详情

nat穿透的工作原理

一、引言1.1背景:IPv4地址短缺,引入NAT全球IPv4地址早已不够用,因此人们发明了NAT(网络地址转换)来缓解这个问题。简单来说,大部分机器都使用私有IP地址,如果它们需要访问公网服务,那么&... 查看详情

p2p技术详解:nat详解——详细原理p2p简介(代码片段)

目录1.IPv4协议和NAT的由来2.NAT的工作模型和特点2.1、NAT的概念模型2.2、一对一的NAT2.3、一对多的NAT2.4、按照NAT端口映射方式分类2.4.1全锥形NAT2.4.2限制锥形NAT2.4.3端口限制锥形NAT2.4.4对称型NAT3.NAT的限制与解决方案3.1、IP端到端服务... 查看详情

p2p技术详解:nat详解——详细原理p2p简介(代码片段)

目录1.IPv4协议和NAT的由来2.NAT的工作模型和特点2.1、NAT的概念模型2.2、一对一的NAT2.3、一对多的NAT2.4、按照NAT端口映射方式分类2.4.1全锥形NAT2.4.2限制锥形NAT2.4.3端口限制锥形NAT2.4.4对称型NAT3.NAT的限制与解决方案3.1、IP端到端服务... 查看详情

p2p技术详解:nat详解——详细原理p2p简介(代码片段)

目录1.IPv4协议和NAT的由来2.NAT的工作模型和特点2.1、NAT的概念模型2.2、一对一的NAT2.3、一对多的NAT2.4、按照NAT端口映射方式分类2.4.1全锥形NAT2.4.2限制锥形NAT2.4.3端口限制锥形NAT2.4.4对称型NAT3.NAT的限制与解决方案3.1、IP端到端服务... 查看详情

p2p技术详解:p2p中的nat穿越(打洞)方案详解(进阶分析篇)(代码片段)

...越NAT的技术、方法4、NAT穿越技术1:应用层网关4.1、原理4.2、限制5、NAT穿越技术2:中间件技术5.1、原理5.2、限制6、NAT穿越技术3:打洞技术(HolePunching)6.1、原理6.2、方法6.2.1NAT行为类型与侦测方法6.2.2NAT打洞过程7、NAT... 查看详情

简单的 PHP NAT 穿透服务器脚本

】简单的PHPNAT穿透服务器脚本【英文标题】:SimplePHPNATPunchThroughServerScript【发布时间】:2012-07-1313:08:24【问题描述】:我正在尝试编写一个PHP脚本,它可以充当“主服务器”并促进两个Java游戏客户端之间的P2P连接。我正在使用... 查看详情

nat穿透原理

...录,这样的包都会被丢弃。如果在这面墙上打洞呢?即NAT穿透。比如在两个不同内网中的机器A和机器B,首先可以先让A发送一个UDP的消息给B机器,那么A机器的内网NAT墙上就有了一个洞。当然这个消息到达B的NAT的时候会被丢弃 查看详情

使用docker搭建stun/turn服务器

...言  STUN,首先在RFC3489中定义,作为一个完整的NAT穿透解决方案,英文全称是SimpleTraversalofUDPThroughNATs,即简单的用UDP穿透NAT。    TURN,首先在RFC5766中定义,英文全称是TraversalUsingRelaysaroundNAT:RelayExtensionstoSessi... 查看详情

p2p技术详解:p2p技术之stunturnice详解(代码片段)

...之间能否进行P2P通信以及如何通信。这种技术通常称为NAT穿透(NATTraversal)。最常见的NAT穿透是基于UDP的技术,如RFC3 查看详情

p2p技术详解:p2p技术之stunturnice详解(代码片段)

...之间能否进行P2P通信以及如何通信。这种技术通常称为NAT穿透(NATTraversal)。最常见的NAT穿透是基于UDP的技术,如RFC3 查看详情

p2p技术详解:p2p中的nat穿越(打洞)方案详解(进阶分析篇)(代码片段)

...越NAT的技术、方法4、NAT穿越技术1:应用层网关4.1、原理4.2、限制5、NAT穿越技术2:中间件技术5.1、原理5.2、限制6、NAT穿越技术3:打洞技术(HolePunching)6.1、原理6.2、方法6.2.1NAT行为类型与侦测方法6.2.2NAT打洞过程7、NAT... 查看详情

p2p技术详解:p2p中的nat穿越(打洞)方案详解(进阶分析篇)(代码片段)

...越NAT的技术、方法4、NAT穿越技术1:应用层网关4.1、原理4.2、限制5、NAT穿越技术2:中间件技术5.1、原理5.2、限制6、NAT穿越技术3:打洞技术(HolePunching)6.1、原理6.2、方法6.2.1NAT行为类型与侦测方法6.2.2NAT打洞过程7、NAT... 查看详情