内网穿透,代理服务,NAT
1.NAT技术
NAT技术解决了IPv4协议中,IP地址缺少的问题,NAT能够将私有IP对外通信时转换成公网IP,私有IP可以重复在不同内网中,而公网IP是唯一的。
数据路由时,NAT将源IP地址进行替换,当替换到出入口路由器(一边内网一边公网)后,就不进行替换。
只有一个NAT技术不行,当内网两个IP同时访问公网的一个服务器,源ip替换时,就变成两个相同IP的报文,无法区分是谁发送的。
NAPT表
每个路由器上,除了有一张路由表外,还有一个NAPT表,记录了源ip,源端口和替换后的ip和端口之间的映射关系。就可以避免同一个子网访问同一个服务器替换后ip相等的问题。这里除了ip会被替换,端口号也被替换了。
图中,两个私有IP+port替换时,替换成了同一个公网IP,但是port不同,就可以唯一标识了。公网先内网应答时,到了出入口路由器,可以查看NAPT表知道映射关系,就可以替换成内网ip地址发送到指定的主机中。
2.代理服务
正向代理
正向代理是一种常见的网络代理方式,在客服端和服务器之间,为客服端代理发送请求,正向代理服务器接收到客服端的请求,然后请求转发给目标服务器,服务器应答发送给代理服务器,最后将目标服务器响应返回给客服端。正向代理可以实现高效访问速度,隐藏客服身份,访问控制等。
代理服务器还会对历史访问过的数据进行缓存,提高历史访问过的内容速度,比如舍友看了电影,需要从服务器中接收资源下载电影,在代理服务器中会缓存这个电影的数据,第二次观看电影时,就可以不同从目的服务器中获取资源下载了,直接从代理服务器中获取观看电影。代理服务器可以检测应答报文是否合理,遇到非法报文会进行过滤。负载均衡功能,代理服务器可以避免多个主机访问同一个服务器,可以合理分配请求数量,使每一个服务器都可以处理合适数量的请求,不会负载超标。
反向代理
反向代理服务器是一种网络架构模式,作为Web服务器的前置服务器,接收来自客服端请求,并将这些请求转发给后端服务器,后端服务器响应返回给客服端。这种模式可以提高效率。代理的对象使服务器集群。
基本原理
反向代理服务器处于客服端和服务器之间,客服端发起请求时,会先到反向代理服务器,反向代理服务器会转发给后端服务器,并将服务器的响应返回给客服端。反向代理服务器会把请求均匀,使每一个服务器都接收到合适的请求,不会使单个服务器超载。
现实中,访问qq用域名访问时,会把域名解析成IP地址,这个IP地址就是反向代理服务器的地址。反向代理服务器可以高效的处理请求转发工作,本身不需要进行复杂处理。对于获取超文本等静态资源,反向代理服务器可以直接从公共区域获取,公共区域一般存放常见的,不怎么变化的静态资源,反向代理服务器就可以快速将这些静态资源提供给客服端。
域名解析会随机解析成不同的IP地址(IPx),这里的x的值代表不同地区的反向代理服务器,这种设计是不同的地区部署反向代理服务器,是用户可以就近访问服务器,从而减少网络延迟(DNS策略)。
动态资源需要从后端获取,像注册登陆交互式存在,反向代理服务器会把后端处理返回的资源发送给客服端。
3.CDN
CDN是内容分发网络,可以将一些静态资源部署到一些CND结点上,用户获取资源时,不用访问服务器,直接访问距离自己最近的CDN服务器,用户访问这些资源CDN没有,CDN就会像服务器获取,并在CDN上面缓存内容。
使用场景
用户分布广,流量大,并发高如直播,静态资源高。
CDN工作简单理解
CDN(内容分发网络)简单的工作原理可以概括为以下几个步骤:
1.用户访问网站
当用户输入网址访问网站时,浏览器先向本地DNS服务器请求解析域名。2.DNS解析
本地DNS查询:本地DNS服务器会先在其缓存中查找是否有该域名对应的IP地址记录。如果有,就直接将IP地址返回给浏览器;如果没有,就向CDN的DNS服务器请求解析。
CDN DNS解析:CDN的DNS服务器根据用户的位置、网络状况等因素,选择一个最优的CDN节点IP地址返回给本地DNS服务器,本地DNS服务器再将这个IP地址返回给浏览器。3.用户与CDN节点交互
请求资源:浏览器根据得到的CDN节点IP地址,向该CDN节点请求网站的资源(如网页、图片、CSS、JavaScript等)。
CDN节点响应:
命中缓存:如果CDN节点上已经缓存了用户请求的资源,它会直接将资源返回给浏览器,这个过程称为“命中缓存”。
未命中缓存:
回源拉取:如果CDN节点上没有用户请求的资源,它会向源服务器(网站的实际服务器)请求该资源。
缓存资源:CDN节点在得到源服务器返回的资源后,会将资源缓存到本地,然后将资源返回给浏览器。这样,下次有用户请求相同资源时,就可以直接从CDN节点获取,而无需再次回源。4.后续访问
后续其他用户如果请求相同的资源,只要在CDN节点的缓存有效期内,CDN节点就可以直接将缓存的资源返回给用户,而不需要再次向源服务器请求,从而提高了访问速度,减轻了源服务器的压力。简单来说,CDN就像是一个分布式的“仓库网络”,它在用户和源服务器之间建立了一个中间层,将网站的资源“存储”在离用户更近的地方,让用户可以更快地获取资源。
4.科学上网原理
需要下载一个特殊软件(VPN客服端软件),VPN客服端与远程的VPN服务器建立连接,这个连接过程有身份验证,只有授权的用户可以连接VPN服务器。当用户通过本地设备访问外网资源时,所要发送的数据都会被VPN客服端劫持,如果是访问境内的服务器就不会劫持,访问外网就会劫持掉,VPN会对劫持的数据进行加密,加密的数据运营商无法识别,就会发送给代理服务器上,VPN服务器接收到加密数据后,会使用相对应的密钥进行解密,还原出原始的用户的请求,得到一个访问外网的链接,VPN根据用户请求,以自身的IP地址代替用户的IP地址,先外网的目标服务器发送请求获取相对应的资源,目标服务器接收到VPN服务器请求后,将请求的资源作为响应返回给VPN服务器。VPN会对应答数据进行加密,通过运营商返回给主机,主机设备上的VPN客服端接收到加密文件后会进行解密,得到访问的外网资源。
5.内网穿透
在公司中,有属于公司的内网,回到家中就无法访问公司网络,当遇到问题时,又在家里面就会出现问题,所有有了内网穿透,可以时内网与内网进行访问。
有两个不同局域网中的设别主机A和主机B,处于不同的子网中,两个主机无法通信,要想通信就需要主机B所在的局域网中,主动连接中转服务器,构建一个通信道路,私有IP+port和公网IP+port建立对应的映射关系。这时主机A再通过访问中转服务器中指定的公网IP+port,就可以把数据发送给主机B了。此时主机A和主机B路由器都缓存了映射关系,就可以不需要中转服务器,通过路由器进行通信。
例子:
有一台云服务器,并在内网中构建一个Linux机器,使用22端口部署一个SSH服务器,可以与云服务器进行连接。云服务器也部署一个服务,可以将机器上的8888端口获取的数据转发到内网Linux机器上,云服务器的8888端口就与内网服务器上的22端口建立了映射。其它内网的机器可以通过访问云服务器的8888端口直接访问内网的Linux服务器。frp是专门的内网穿透软件,frpc是frp客服端,frps是frp服务端。
frp软件介绍
frp是一个高性能的内网穿透软件,它能够帮助你通过一个处于内网的机器(客户端)将本地服务器的服务端口映射到一个处于外网的机器(服务端)上,从而可以让外网用户通过服务端访问到内网的服务器。frp由两个部分组成:
frpc
(客户端)和frps
(服务端)。具体实现过程
云服务器配置:
在云服务器上部署
frps
服务端。配置
frps
,指定监听的端口(如8888端口)以及其他相关参数(如认证信息等)。内网Linux机器配置:
在内网中的Linux机器上部署SSH服务器,监听22端口。
在该机器上安装
frpc
客户端,并配置frpc
的配置文件,指定连接到云服务器的frps
服务端,以及要映射的本地SSH服务的22端口到云服务器的8888端口。建立连接和映射:
当
frpc
启动后,它会主动连接到云服务器上的frps
服务端,并建立一条加密的通信通道。配置完成后,云服务器的8888端口就与内网Linux机器的22端口建立了映射关系。
frps
会将接收到的发往8888端口的数据转发到内网Linux机器的22端口上。访问内网Linux机器:
其他内网的机器或者其他外网用户可以通过访问云服务器的8888端口,实际上访问的是内网Linux机器上的SSH服务。因为
frps
会将数据转发到内网机器的22端口,内网机器上的frpc
会接收并处理这些数据。
6.内网打洞
观看直播时,主播将直播消息转发到服务器中,服务器将信息发送给各个客服端,但是人数多了起来就会有很大的负载,就可以让客服端主动连接服务器,服务器在内部,交换客服端的公网IP和端口号,就可以不用服务器工作,直接路由器对路由器了,第一次还是通过服务器来交换IP和端口号,第二次就不需要了,进行p2p模式。
P2P可以减少服务器负担,还是有客服端与服务器连接的,不过将压力分摊到客服端中。
内网打洞的工作原理
信息交换:
客户端和服务端通过云服务器交换彼此的 WAN口IP 和 端口号。
云服务器作为中介,将客户端的 IP+port 发送给服务端,同时将服务端的 IP+port 发送 给客服端。
建立直接连接:
客户端和服务端分别使用对方的 IP+port 尝试建立直接连接。
由于双方的 WAN口IP 和 端口号 已经交换,路由器会允许这种直接通信。
绕过云服务器:
一旦直接连接建立成功,客户端和服务端就可以绕过云服务器,直接进行数据传输。
这种方式不仅减少了云服务器的负载,还提高了数据传输的效率。
1.实现P2P通信
直接数据传输:通过共享客户端的IP和端口号,其他客户端可以直接与新连接的客户端建立通信连接。这样,数据(如视频流)就可以直接在客户端之间传输,而无需经过服务器中转。这大大减轻了服务器的负载,因为服务器不需要处理所有客户端之间的数据传输。
减少服务器带宽消耗:服务器只需要在初始连接阶段协助建立P2P连接,之后的数据传输主要由客户端之间完成。这可以显著减少服务器的带宽消耗,特别是在有大量用户同时观看直播时。
2.提高系统可扩展性
支持更多用户:随着观看人数的增加,P2P模式可以更高效地扩展。每个新客户端可以与其他多个客户端建立连接,形成一个分布式的网络。这样,系统的整体带宽和处理能力可以随着用户数量的增加而自然扩展,而不是依赖于服务器的性能。
动态负载均衡:客户端之间的数据传输可以动态地分担负载。如果某个客户端的网络条件较好,它可以承担更多的数据传输任务,从而实现负载均衡。
3.降低延迟
减少中转环节:数据直接在客户端之间传输,减少了经过服务器的中转环节。这可以降低数据传输的延迟,使直播更加流畅和实时。
优化网络路径:客户端之间可以根据网络条件选择最优的传输路径。例如,地理位置较近的客户端可以直接交换数据,而无需通过远距离的服务器中转,从而进一步降低延迟。
4.增强容错性
多路径传输:如果某个客户端与服务器的连接中断,客户端之间仍然可以通过其他P2P连接继续传输数据。这种多路径传输机制提高了系统的容错性和可靠性。
减少单点故障:服务器不再是数据传输的唯一瓶颈。即使服务器出现部分故障或网络问题,客户端之间的P2P连接仍然可以维持直播的进行。
5.提高用户体验
更流畅的观看体验:由于数据传输延迟的降低和带宽的有效利用,用户可以享受更流畅、更高质量的直播观看体验。
自适应网络条件:客户端可以根据自身的网络条件动态调整数据传输策略。例如,网络条件较差的客户端可以从多个其他客户端获取数据,以确保数据的完整性和连续性。
6.工作流程示例
客户端A连接到服务器:客户端A首次连接到直播服务器,服务器记录下客户端A的IP和端口号。
客户端B连接到服务器:客户端B也连接到服务器,服务器记录下客户端B的IP和端口号。
信息交换:服务器将客户端A的IP和端口号发送给客户端B,同时将客户端B的IP和端口号发送给客户端A。
建立P2P连接:客户端A和客户端B根据收到的IP和端口号信息,尝试建立直接的P2P连接。
数据传输:一旦P2P连接建立成功,客户端A和客户端B可以直接交换数据(如视频流),而无需通过服务器中转。
7.交换机
一个局域网内,一个主机给另一个主机发送消息,局域网所有的主机都能收到,会在mac帧进行检测,不会发送本主机就丢弃。在局域网内发送数据有几率出现数据碰撞,引入了交换机就可以降低碰撞概率,主机A给主机E发送数据,其它所有的主机都能收到,交换机就会记录主机A在交换机左侧,随着发送越来愈多,就会记录局域网内所有主机的相对位置,当主机C发送消息给主机E时,交换机就不会把数据发送到左侧,而是在右侧发送,因为记录了E的位置是在交换机的右侧。