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:40325125 和 NAT-B, IP:2341238 需要直接通信的话,基本不可能,所以需要做些手段。
假设需要 手机 (图中)建立TCP链接到 电脑 (图中)需要如下手续:
1 由被链接方发送数据报(可以是UDP甚至是TCP的SYNC握手包)
[上传失败(image-4b61ae-1528199423593)]
绿色线表示了数据报流动的方向
图中 电脑 给 NAT-A IP:40325125 / 端口:4553 发出了一个数据报,这个数据报在经过 NAT-B 的时候 源IP地址 被修改成了 NAT-B的IP地址2341238 , 源端口 被修改成了 678 。这个数据报在到达 NAT-A 的时候,在映射表中找不到 678 端口对应的内部私有IP的映射。所以这个数据报一定会被 NAT-A 丢弃掉。但是经过这次数据报发送,在 NAT-B 的映射表里面就会标记 40325125:4553 我已经发送过数据过去了,那么后面只要从这个地址发送来的数据报,我就可以转发到内网正确的设备上面。
2 完成第一步后,链接方可以发起数据请求
p2p可以合理的利用互联网的资源,比如两个人视频聊天。完全可以通过p2p打穿NAT后互发数据(QQ就是这么办的)。但是有的时候设备之间的直连性能很差,比如:电信的用户和移动的用户视频。这个问题是ISP厂商之间的过渡带宽太窄,就算是设备直连但是依旧速度不快。所以这里情况下需要自己搭建服务器中继(中继也不是完全无作用)。这个服务器就是网关的作用,一般有多个网卡。不同的网卡对接不同的ISP厂商,然后互相转发。
在本地端口的场景中,可以从Server-B建立到Server-A的SSH连接,但是如果Server-B到Server-A之间无法连接,只有Server-A到Server-B的连接呢? (比如开发机可以访问服务器,但是服务器一般是不可以访问本地开发机的)
假设Server-A的IP为 19216858101 ,Server-B的IP是 19216858103
在Server-A上执行如下命令:
上面的命令,就建立了远程端口转发,把远程服务器Server-B的9906端口的所有数据都会被转发到Server-A 19216858101 的3306端口
在Server-B上执行命令
就可以连接到Server-A上的MySQL Server了
本地端口转发 与 远程端口转发 结合起来使用,可以进行链式转发。假设A主机在公司,B主机在家,C主机为远程云主机。A主机上运行了前文的Nodejs服务,需要在B主机上访问该服务。由于A和B不在同一个网络,且A主机没有独立公共IP地址,所以无法直接访问服务。
通过本地端口转发,将发送到B主机4000端口的请求,转发到远程云主机C的3000端口。
通过远程端口转发,将发送到远程云主机C端口3000的请求,转发到A主机的2000端口。
这样,在主机B可以通过访问 http://localhost:4000 来访问主机A上的服务。
首先我说明一点 DNS 是使用的TCP 或者UDP 的 53 端口。 大部分都是使用UDP传输的所以你看不到三次握手时正常的。
再就是如果你的PC没有网关的MAC地址缓存。因为要发送DNS请求。所以要查看路由表看网关是谁,然后发送请求网关的MAC地址,然后一个DNS请求数据包被封装上网关的MAC发出去。
到了路由器上做NAT出去。你哪再不是很清楚再单独问吧,要细细的写,累点,你要总结的话网上应该不少。。你可以看看。搜搜DNS工作过程啥的。
QQ:290304230
如果您基于更高的性能、更灵活的扩展或供应商替换要求,您可能需要迁移现有的在线项目。因此,您需要解决的因素包括现有的数据、结构、配置等。借助必要的技术、适当的规划和特定软件,您只需将所需的数据传送到新服务器。数据迁移过程的复杂性与项目的复杂性和规模密切相关。作为一个值得信赖的香港服务器租用托管服务提供商,基于Web的互联迷你系列将为您简要介绍在服务器数据迁移期间要注意的事项。
将数据迁移到新的服务器之前 - 合理规划
选择正确的目标服务器是第一步。例如,如果计划更改网站/应用程序,则需要执行其他任务,以便在重新定位期间不必处理这些任务。无论是将数据从一个服务器(例如香港服务器)迁移到另一个服务器,还是新的服务器结构是基于集群的或涉及多个不同的系统,它也是不同的。
更改服务器体系结构时,必须更改配置,不管是不同的操作系统、不同的软件版本还是不同的控制面板。即使只是切换到功能更强大的同类型服务器,仍然需要相应地配置应用程序和服务,以便能够利用额外内存、改进的cpu性能或增加内存容量。
请注意,无论是选择简单的性能升级还是完全更改服务器体系结构,都应提前为移动设备创建最佳条件。这些因素包括足够的存储空间和计算能力、30%到40%的缓冲区或详细的扩展计划以及快速的网络连接。
当数据迁移到另一台服务器?
如果您租用服务器资源,您可能没有充分考虑托管服务的成本。供应商提供的各种软件包在内容提供方面有所不同,即可用性、数据安全性和支持。因此,有必要在选择之前比较不同的软件包。迁移数据的另一个原因可能是您希望减轻it部门的压力。在这种情况下,it托管服务解决方案将是一个不错的选择。它不仅承载服务器,还由提供者维护和更新。例如,使用稳定的网络互连香港服务器租赁服务,您可以选择不同级别的技术服务包来简化您的IT管理工作。
为即将进行的迁移组织当前服务器
为了使新服务器的配置和引入尽可能简单,有必要整理当前使用的服务器。因此,数据迁移是删除任何冗余或过期页面、备份、电子邮件和用户帐户的最佳时间。这意味着您可以最小化传输的数据量,另一方面,您可以从目标系统上所需的资源中获得更多的价值。
此外,还应该制定关闭活动服务器进程随后因数据损失而不会出现并发症,精确的计划。指定时间应停止对文件,脚本和配置做任何改动,并尽可能暂时阻止对数据库的访问。您也可以稍后更新数据库。在大多数情况下,数据传输通过一个完整的服务器备份进行。
服务器的数据迁移是如何工作的?
迁移数据最简单的方法是使用实际状态的一对一备份副本。在进行必要的配置和调整之前,将其转移到新的服务器硬件,然后可以测试其是否有效。最后,您可以调整dns或ip设置,这将允许您在新系统上实时启动Web项目。虽然这种方法通常需要系统管理员的支持,但是很容易计划和执行。但是,这意味着当前服务器将完全暂停,在数据迁移期间,您将无法访问或使用您的网站。
如果提供需要连续数据库访问的服务,则需要一个混合迁移解决方案来保持当前服务器处于活动状态。在这种情况下,应将服务器上的当前数据库声明为“master”,然后在配置完成后将新数据库从属为“slave”。这使得两个应用程序能够实时同步。如果两个数据库处于相同状态,请反转角色,以便新数据库成为主数据库。这意味着您的项目可以在数据迁移期间继续可用。
什么样的资源可以用来将数据迁移到新的服务器?
有几种工具和服务可以简化服务器迁移。例如,如果只想移动数据而不调整操作系统或其他软件,则不应放弃控制面板。这些服务器管理器可以帮助您创建数据备份,然后将它们迁移到新服务器。所需的配置工作负载是最小的。像wordpress这样的内容管理系统也可以使用简单的ftp和备份应用程序进行传输,并且通常提供自己的插件来迁移链接的数据库。这些过程大多是自动化的。
对于更复杂的项目,root权限总是会带来好处:使用ssh,您可以通过相应的命令行将完整的数据库(包括所有权限和用户数据)转移到新服务器。例如,可以使用mysql转储向目标系统发送mysql数据库的副本。作为微软的sql服务器用户,您甚至可以使用内置功能来实现这一点。
但是,您也可以外包服务器数据的迁移:许多托管服务提供商不仅为客户提供用于手动服务器数据传输的特定软件,而且还为数据迁移提供了积极的支持。此外,还有一些服务专门用于Web项目的迁移和全天候服务的可用性-无论是从一个共享服务器转移到另一个共享服务器,还是要替换提供者,还是计划切换到服务器集群。
服务器迁移期间可能会出现什么问题?
需要连续稳定的网络连接才能根据需要传输服务器数据。因此,在服务器迁移期间,连接问题是最常见的错误源。如果连接断开,它可以完全终止传输,这意味着它从一开始就重新启动。然而,短期连接问题通常不会被注意到,也不会导致进程终止。但是,在某些情况下,并非所有数据都可以到达目标服务器,这反过来会影响迁移应用程序的功能。
但是,如果有些文件不能成功地转移到新服务器上,可能有几个原因。尤其是在改变操作系统而不再支持某些文件格式、编程语言等时,会出现兼容性问题。此外,在源计算机和目标计算机上不同的访问权限或密码保护会导致并发症。此外,如果目标系统没有所需的磁盘空间或dns条目没有正确更改,数据迁移可能导致错误。
需要检查服务器数据迁移。
移动到新的服务器的项目可能是一个复杂和繁琐的过程,这取决于项目规模和新目标的体系结构。这就是为什么它应该精心策划和执行良好。下表总结了有关服务器迁移的最重要的问题。
1、确定好映射端口号。可以通过百度查询,或者咨询软件提供商确定映射端口号。
2、固定电脑IP地址。手动给电脑设置静态IP地址上网。
3、固定电脑IP地址手动给电脑设置静态IP地址上网。
4、远程访问在互联网上的用户,通过访问这台新版tplink路由器WAN口IP地址即可。
0条评论