P2P穿透NAT的原理

2024-05-18 09:32

1. P2P穿透NAT的原理

  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的原理

2. 穿透技术的NAT术语

在NAT中,有4个地址术语是必须正确理解的,它们是Inside Local、Inside Global、OutsideLocal和Outside Globalo在这些术语中,Inside(内部)是指那些由机构或企业所拥有的内部网络,这些网络上的主机通常分配了私有地址。这些地址不能直接在Internet上进行路由,从而也就不能直接用于对Internet的访问,必须通过网络地址的转换,以合法IP的身份来访问Internet。前者即Inside Local地址。后者则为Inside Global动地址。Local(本地)的地址是不能在Internet上通信的IP地址;Global(全局)的地址是能在Internet上通信的地址。Outside(外部)是指除了我们考察的内部网络之外的所有网络。主要指Internets有了对Inside、Outsider Local和Global4个词的解释,让我们来看一看4个地址的定义。●Inside Local Address(内部本地地址)指一个网络内部分配给网上主机的IP地址,此地址通常不是Internet上的合法地址,即不是网络信息中心 (NIC)或Internet服务提供商(ISP)所分配的IP地址。●Inside Global Address(内部全局地址)用来代替一个或者多个内部本地IP地址的、对外的、Internet上合法的IP地址。●Outside Local Address(外部本地地址)一个外部主机相对于内部网所用的IP地址。此地址需要是Internet上合法的地址,但是从内部网可以进行路由的地址空间中进行分配的。●Outside Global Address(外部全局地址)由主机拥有者分配给在外部网上主机的IP地址。此地址是从一个从全局可路由的地址或网络空间中分配的。

3. 什么是NAT穿透技术?

分类:  电脑/网络 >> 互联网 
   解析: 
  
 NAT,即Neor Address Translation,可译为网络地址转换或网络地址翻译。
 
  当前的Inter面临两大问题,即可用IP地址的短缺和路由表的不断增大,这使得众多用户的接入出现困难。
 
  使用NAT技术可以使一个机构内的所有用户通过有限的数个(或1个)合法IP地址访问Inter,从而节省了Inter上的合法IP地址;另一方面,通过地址转换,可以隐藏内网上主机的真实IP地址,从而提高网络的安全性。
 
  在CCNA阶段,主要考察NAT的基本技术,应试者应掌握下述的NAT术语和几个典型的地址转换类型。
 
  
 
  1.NAT术语
 
  在NAT中,有4个地址术语是必须正确理解的,它们是Inside Local、Inside Global、OutsideLocal和Outside Globalo
 
  在这些术语中,Inside(内部)是指那些由机构或企业所拥有的内部网络,这些网络上的主机通常分配了私有地址。这些地址不能直接在Inter上进行路由,从而也就不能直接用于对Inter的访问,必须通过网络地址的转换,以合法IP的身份来访问Inter。前者即InsideLocal地址。后者则为Inside Glob动地址。
 
  Local(本地)的地址是不能在Inter上通信的IP地址;Global(全局)的地址是能在Inter上通信的地址。
 
  Outside(外部)是指除了我们考察的内部网络之外的所有网络。主要指Inters
 
  有了对Inside、Outsider Local和Global4个词的解释,让我们来看一看4个地址的定义。
 
  ●Inside Local Address(内部本地地址)
 
  指一个网络内部分配给网上主机的IP地址,此地址通常不是Inter上的合法地址,即不是网络信息中心 (NIC)或Inter服务提供商(ISP)所分配的IP地址。
 
  ●Inside Global Address(内部全局地址)
 
  用来代替一个或者多个内部本地IP地址的、对外的、Inter上合法的IP地址。
 
  ●Outside Local Address(外部本地地址)
 
  一个外部主机相对于内部网所用的IP地址。此地址需要是Inter上合法的地址,但是从内部网可以进行路由的地址空间中进行分配的。
 
  ●Outside Global Address(外部全局地址)
 
  由主机拥有者分配给在外部网上主机的IP地址。此地址是从一个从全局可路由的地址或网络空间中分配的。
 
  2.静态内部源地址转换
 
  所谓静态内部源地址转换是指将一个内部本地的IP地址转换成为惟一的内部全局地址,即私有地址和合法地址之间的静态一一映射。这种转换通常用在内部网上的主机需要对外提供服务(如Web、E-mail服务等)的情况下。
 
  3.动态内部源地址转换
 
  在动态内部源地址转换的方式下,一组内部本地地址与一个内部全局地址池之间建立起一种动态的一一映射关系。这种地址转换形式下,内部主机可以访问外部网络,外部主机也能对内部网络进行访问,但必须是在内网IP地址与内部全局地址之间存在映射关系时才能成功,并且这种映射关系是动态的。
 
  4.复用内部全局地址
 
  Cisco路由器可以把内部全局地址进行复用性的转换,从而实现内部本地地址对内部全局地址的多对一的映射。地址复用被启用时,路由器在高层协议(如TCP或UDP端口号)维持有关的信息,将全局地址转换为本地地址。当多个内部本地地址映射到同一个全局地址时,端口号将用来区别不同的本地地址。复用内部全局地址的技术也被称为PAT(Port AddressTranslation。端口地址转换)。

什么是NAT穿透技术?

4. NAT与内网穿透

 如上,三台设备都使用 120.131.92.21 这一公网IP. 而对于这三台设备分别从各自端口发出的TCP/UDP请求,则映射至NAT设备不同的端口上,记录在NAT表上.这样就区分了某个请求试试来自哪个设备的哪个端口上.
   1,NAT表的淘汰
   2,NAT墙
   3,端对端通信模型的破坏
   1,  Full Cone NAT(完全雏形NAT) 
   2,  Restricted Cone NAT (限制雏形NAT) 
   3,  Port Restricted Cone NAT(端口限制雏形NAT) 
   4,  Symmetric NAT (对称NAT) 
    注意: 
   事实上,这些术语的引入是很多混淆的起源。现实中的很多NAT设备是将这些转换方式 混合 在一起工作的,而不单单使用一种,所以这些术语只适合描述一种 工作方式 ,而不是一个设备。比如,很多NAT设备对内部发出的连接使用对称型NAT方式,而同时支持静态的端口映射,后者可以被看作是全锥型NAT方式。而有些情况下,NAT设备的一个公网地址和端口可以同时映射到内部几个服务器上以实现负载分担,比如一个对外提供WEB服务器的站点可能是有成百上千个服务器在提供HTTP服务,但是对外却表现为一个或少数几个IP地址。
   例如,FTP应用就由数据连接和控制连接共同完成,而且数据连接的建立动态地由控制连接中的载荷字段信息决定,这就需要ALG来完成载荷字段信息的转换,以保证后续数据连接的正确建立。
                                           图中私网侧的主机要访问公网的FTP服务器。NAT设备上配置了私网地址192.168.1.2到公网地址8.8.8.11的映射,实现地址的NAT转换,以支持私网主机对公网的访问。组网中,若没有ALG对报文载荷的处理,私网主机发送的PORT报文到达服务器端后,服务器无法根据私网地址进行寻址,也就无法建立正确的数据连接。整个通信过程包括如下四个阶段:
   (1)    私网主机和公网FTP服务器之间通过TCP三次握手成功建立控制连接。
   (2)    控制连接建立后,私网主机向FTP服务器发送PORT报文,报文中携带私网主机指定的数据连接的目的地址和端口,用于通知服务器使用该地址和端口和自己进行数据连接。
   (3)    PORT报文在经过支持ALG特性的NAT设备时, 报文载荷中的私网地址和端口会被转换成对应的公网地址和端口 。即设备将收到的PORT报文载荷中的私网地址192.168.1.2转换成公网地址8.8.8.11,端口1084转换成12487。
   (4)    公网的FTP服务器收到PORT报文后,解析其内容,并向私网主机发起数据连接,该数据连接的目的地址为8.8.8.11,目的端口为12487(注意:一般情况下,该报文源端口为20,但由于FTP协议没有严格规定,有的服务器发出的数据连接源端口为大于1024的随机端口,如本例采用的是wftpd服务器,采用的源端口为3004)。由于该目的地址是一个公网地址,因此后续的数据连接就能够成功建立,从而实现私网主机对公网服务器的访问。
   总而言之,在ALG中配置的支持的协议,可以实现逆向访问

5. 网络中的nat 是什么概念 能否简单明白的讲解下。。编写网络程序时候nat穿透什么概念?

NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。
    简单的说,NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关(可以理解为出口,打个比方就像院子的门一样)处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共IP地址紧缺的问题。通过这种方法,您可以只申请一个合法IP地址,就把整个局域网中的计算机接入Internet中。这时,NAT屏蔽了内部网络,所有内部网计算机对于公共网络来说是不可见的,而内部网计算机用户通常不会意识到NAT的存在。
 

nat穿透:在处于使用了NAT设备的私有TCP/IP网络中的主机之间建立连接

网络中的nat 是什么概念 能否简单明白的讲解下。。编写网络程序时候nat穿透什么概念?