目录
一、NAT技术
之前我们讨论了, IPv4 协议中, IP 地址数量不充足的问题。NAT 技术当前解决 IP 地址不够用的主要手段, 是路由器的一个重要功能。
(1)NAT IP 转换过程
(2)NAPT
那么问题来了, 如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的 IP 都是相同的. 那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候 NAPT 来解决这个问题了. 使用 IP+port 来建立这个关联关系。
可以看到,每一次网络请求都要记录IP地址和对应的端口号的,即使一台主机上的不同程序进行网络通信,都是要记录不同端口号的。而每一层NAT路由器都要记录从下面传来的转换表,这导致运营商的NAT路由器需要记录大量的转换表,这需要极其强大的物理支撑。同时这也是NAT技术的缺点。
为了减少转换表带来的内存消耗,NAT路由器除了在硬件上下功夫之外,还会采取遗忘策略,比如在TCP通信协议下,NAT路由器只会在建立连接的时候生成这个表项,在连接断开之后就会删除该表项。在UDP协议下,由于没有连接的存在,可能采取的是定时策略,超过一定时间,只要双方没有进行通信,就会删除该表项,下次通信的时候再建立即可。
如何理解QQ通信需要先登录?
两个QQ账号想要发送消息的时候,是不是都要先登录,这个登录的本质就是建立NAT转换表项的过程,在登录的时候,相当于我向QQ的公网服务器发送了一条消息,此时沿路的NAT设备就会记录下来映射表。而对方在登录的时候也会建立一个NAT映射表项。
当发送消息给对方的时候,其实是先把消息发送给QQ服务器,再由服务器转发给对方。此时由于NAT表项都建立好了,所有可以进行不同子网的通信。
(3)NAT技术的缺陷
如何理解无法从外部向内部服务器建立连接?
只有一个子网内的私有ip先访问公网(外网)的时候,经过NAT,NAT才会维持一个表项,供外部服务器的信息传递回来。当表项被遗忘后,外部服务器无法直接向内网设备进行通信,因为没有私网公网映射表。
二、内网穿透
正是由于NAT设备的限制,使得外部服务器无法直接访问内网的主机设备。而内网穿透(NAT穿透)是一种网络技术,它允许外部网络(如互联网)上的设备访问位于内部网络(例如公司或家庭局域网LAN)中没有直接公网IP地址的设备。
简单来说他其实就是对端和一个云服务器(有一个公网ip的服务器)建立一个NAT表项。
- 原理:内网穿透通过让内网设备首先向一个公共服务器(穿透服务器)发起请求,创建一个通信通道,使得外网设备可以通过这个通道与内网设备进行数据交换。这种机制依赖于NAT穿越技术,但不仅限于NAT环境,还可以绕过一些防火墙限制。
思考他和单纯的NAT技术有什么不同?
单纯的NAT是指内网中的某个主机访问公网的路上,会有许多个NAT设备记录映射表项,然后由该服务器应答。这个过程中只存在两台主机,一台内网主机,一台服务器主机。是一个一对一的通信关系。所以我们说NAT只能由内向外建立单独网络连接。
而内网穿透呢?他是先由某个内网的主机和具有公网IP的服务器(一般是云服务器)建立NAT表项,此后别人想要访问该主机,只需要向云服务器发送信息,即可由云服务器转发给内网主机。注意这里不局限于一台主机哦!外面所有的主机由于知道云服务器的公网ip都能向该云服务器发送数据,即都能访问内网设备。
内网穿透的原理图:
三、内网打洞
上面我们说内网穿透技术是用来解决两个内网的主机无法直接进行通信而产生的。其实内网打洞技术也是如此。,只不过在操作上略有不同。
内网穿透是利用一台在公网的服务器,连接两端主机,进行消息转发从而实现不同内网的主机通信的。
而内网打洞通常有以下步骤:
- 注册与登录:内网中的设备(如计算机、手机等)通过安装的内网穿透软件自动向中间服务器注册并登录。在注册过程中,设备会提供其内网IP地址和端口号等信息。(这个过程是在建立内网和服务器的NAT表项)
- 信息交换:当两台内网中的设备希望建立连接时,它们会向中间服务器请求对方的信息。中间服务器在收到请求后,会将对方的公网+内网IP地址和端口号等信息发送给请求方。(交换双方出入口路由器的IP,这个路由器是供应商维护的)
- 打洞尝试:在获取到对方的信息后,一台设备会尝试向另一台设备的公网IP地址和端口发送数据包。这个过程可能会因为NAT设备的不同而有所差异。在某些情况下,NAT设备会记录这次尝试连接的信息,并为后续的连接做好准备。(不再通过服务器来转发数据,而直接通过运营商的出入口路由器进行通信,同时降低了服务器的压力)
- 直接通信:一旦打洞成功,两台设备就可以像两个正常的公网IP一样直接建立P2P连接,并进行数据传输。
内网穿透的优势:
四、代理服务器
(1)正向代理服务器
正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。
(2)反向代理服务器
反向代理服务器是一种网络架构模式,其作为 Web 服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等
正向代理用于请求的转发(例如借助代理绕过反爬虫).
反向代理往往作为一个缓存.
举个例子:我们平常所说的翻墙是什么意思呢?
因为你的消息都是通过运营商搭建的一个个子网中转发出去的,运营商既然可以因为你没有交话费而拦截或者丢弃你的报文,也可以因为你访问了非法地址(比如其他国家的网站)而拦截或者丢弃。
那么翻墙的本质就是骗过运营商。通过一个国内的合法服务器A,把自己的主机和国外非法服务器搭建连接。首先我把数据发送给服务器A,由于A是国内的,运营商没有道理拦截或者丢弃你的报文,数据到了A后,再转发给国外服务器,当收到应答时,再封装一次,装作是自己返回给国内主机的报文,运营商也不会拦截。
但是国内运营商为了安全也会监测服务器A的合法性。如果同一时段有大量来自不同地区的主机都访问了服务器A,他就会重点标记,一旦发现有非法行为立刻加入黑名单,对发往服务器A的报文全部丢弃。