当前位置: 首页 > ops >正文

内网穿透,代理服务,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.工作流程示例

  1. 客户端A连接到服务器:客户端A首次连接到直播服务器,服务器记录下客户端A的IP和端口号。

  2. 客户端B连接到服务器:客户端B也连接到服务器,服务器记录下客户端B的IP和端口号。

  3. 信息交换:服务器将客户端A的IP和端口号发送给客户端B,同时将客户端B的IP和端口号发送给客户端A。

  4. 建立P2P连接:客户端A和客户端B根据收到的IP和端口号信息,尝试建立直接的P2P连接。

  5. 数据传输:一旦P2P连接建立成功,客户端A和客户端B可以直接交换数据(如视频流),而无需通过服务器中转。

 

7.交换机

一个局域网内,一个主机给另一个主机发送消息,局域网所有的主机都能收到,会在mac帧进行检测,不会发送本主机就丢弃。在局域网内发送数据有几率出现数据碰撞,引入了交换机就可以降低碰撞概率,主机A给主机E发送数据,其它所有的主机都能收到,交换机就会记录主机A在交换机左侧,随着发送越来愈多,就会记录局域网内所有主机的相对位置,当主机C发送消息给主机E时,交换机就不会把数据发送到左侧,而是在右侧发送,因为记录了E的位置是在交换机的右侧。

http://www.xdnf.cn/news/9450.html

相关文章:

  • HTTP Accept简介
  • 鸿蒙---使用真机模拟器的时候,图片不加载问题
  • NV295NV306美光固态闪存NV313NW830
  • 决胜2025:企业级BI产品深度评测与选型指南
  • vue+elementUi+axios实现分页(MyBatis、Servlet)
  • Linux进程调度的理解
  • Web攻防-SQL注入增删改查HTTP头UAXFFRefererCookie无回显报错
  • Redis集群热点Key问题解决方案
  • 通过mailto:实现web/html邮件模板唤起新建邮件并填写内容
  • LabVIEW双光子荧光成像软件开发
  • 关于余数的定理
  • 【计算机网络】第1章:概述—分组延时、丢失和吞吐量
  • 大模型-高通性能测试工具介绍-1
  • 基于ESP-IDF的ESP32开发记录——如何建立一个队列
  • 使用Spring AI集成Perplexity AI实现智能对话(详细配置指南)
  • 【PhysUnits】13 改进减法(sub.rs)
  • Vue开发系列——Vue 生命周期钩子 及常见知识点
  • STP(生成树协议)原理与配置
  • XCTF-web-easyphp
  • BugKu Web渗透之source
  • 虚幻GamePlay框架
  • 《函数栈帧的创建和销毁》
  • AI--知识库RAG实战
  • @Transactional高级用法之传播机制
  • 基于对比学习的推荐系统开发方案,使用Python在PyCharm中实现
  • CSS3实现的账号密码输入框提示效果
  • 【25-cv-05894】Keith律所代理Jennifer Le Feuvre版权画
  • 大数据-273 Spark MLib - 基础介绍 机器学习算法 决策树 分类原则 分类原理 基尼系数 熵
  • pikachu靶场通关笔记06 XSS关卡02-反射型POST
  • 私有化部署DeepSeek后行业数据模型的训练步骤