NAT 代理服务器

news2025/1/12 4:12:36

文章目录

  • 1. NAT
  • 2. 内网穿透
  • 3. 内网打洞
  • 4. 代理服务器
    • 正向代理服务器
    • 反向代理服务器
  • 5. DNS
  • 6. ICMP
  • 7.测试内网穿透

1. NAT

ip协议章节,我们说报文转发给路由器时,由于私有IP地址不能出现在公网中,路由器会将报文源IP地址替换为路由器的WAN口IP地址,这个过程我们称为NAT转换

NAT技术是路由器的一个重要功能,缓解了IP地址不足的问题,因为它允许不同私网主机的IP地址可以相同;公网IP地址要求唯一,但私有IP地址不要求

既然源IP地址被替换了,应答该如何返回到源主机呢?

路由器在对源IP地址替换时,还会保存源IP地址与路由器WAN口IP地址的映射关系,形成NAPT,我们简称为NAT转换表

在这里插入图片描述

私网内的主机第一次向公网发送报文时,映射关系就会保存在NAPT

如果同一局域网内有多台主机向同一服务器发送报文,由于它们的上层路由器都是同一个,应答返回时怎么知道对于哪台主机呢?因此,映射关系采用IP地址 + 端口号的方式

这种映射关系由路由器自主维护,使用tcp,建立连接时,会生成NAPT,断开连接,销毁NAPT

NAT技术的缺陷:

  1. 外网不能直接访问私网IP地址,因为路由器没有映射关系,报文到达路由器时不知道往哪走
  2. NAPT的生成和销毁都需要额外的开销
  3. 一旦NAT设备(路由器)异常,所有连接都断开

现在,我们了解了NAT技术,就能解释平时上网时的出现的现象:

  1. 为什么使用QQ等聊天软件与朋友聊天,必须先登上QQ?
  2. 为什么不同局域网内的两台主机不能直接通信?

所谓登上QQ,就是连接上了公网中的QQ服务器,双方都连上QQ,私网到公网的映射关系建立,消息发给服务器,服务器也就能将消息从公网发送到私网中

在这里插入图片描述

不同局域网内的两台主机不能直接通信,因为路由器没有相应的映射关系

在这里插入图片描述

2. 内网穿透

以Windows作为client,连接云服务器上的服务,发送消息,将源主机的IP地址打印出来,会发现打印出来的IP地址与Windows主机的IP地址不同

在这里插入图片描述

根据学过的内容,最终将报文转发给云服务器的是运营商的路由器,因此,云服务器中打印的实际上是运营商路由器的IP地址

借此,我们可以引出新的技术:内网穿透、内网打洞

在这里插入图片描述

首先,B连接云服务器,路由器建立了对应的映射关系;其次,在云服务器上部署一种服务,该服务将所有发送到云服务器指定端口的报文全部转交给B,由B处理报文并将应答返回给云服务器,再由云服务器将应答返回,这样就完成了两个私网之间的通信,我们把这种技术叫做内网穿透

这种技术有何作用呢?

一般配置好的云服务很贵,这样做就能使用一台便宜的云服务器,让另一台主机完成复杂的工作

有时,我们也需要远程办公,比如B是你家中的主机,A是你在出差地的主机,这样就能在远方访问到家中的主机,完成工作

3. 内网打洞

与内网穿透相对应的技术还有内网打洞

在这里插入图片描述

由于云服务器能得知主机运营商路由器的IP地址,如果两台主机连接同一云服务器,云服务器就得知双方运营商路由器的IP地址;此时,如果云服务器将B运营商路由器IP地址发给A,将A的发给B;之后,A要与B通信,发送报文都往B的运营商路由器发,由于B已经连接过云服务器,路由器中NAPT就有对应的映射关系,报文也就能正确到达B,同理,B向A的运营商路由器发送报文也能正确到达A

同样,我们也能完成不同私网的主机之间的通信

内网打洞有何用呢?

例如直播,数据直接发给对方运营商路由器,一样能发送给对方,而不再需要由服务器进行发送了,大大减少了服务器的压力

有些视频软件,会发现下载视频非常快,如果B要下载某个视频,服务器会先查找距离B主机最接近且有相应资源的主机,如果找到了,B直接从对方主机下载该视频

4. 代理服务器

正向代理服务器

在这里插入图片描述

工作原理:

client要访问公网,先将请求发送给自身子网中的代理服务器,由代理服务器请求,应答也是发送给代理服务器,由代理服务器再返回应答给client

功能:

  1. 缓存:代理服务器能够缓存部分静态资源,下次client如果访问相同的数据,代理服务器直接应答即可
  2. 内容过滤:外网想要访问私网中的主机,必须经过代理服务器,代理服务器就能对公网的不良信息过滤
  3. 访问控制:如果client想要访问非法网址,代理服务器可以直接拦截
  4. 隐藏客户端身份:由于请求是由代理服务器请求的,一定程度上隐藏了client的身份,保护client隐私

**应用场景:**学校的校园网

反向代理服务器

在这里插入图片描述

工作原理:

client发送给服务器的请求,最先到达反向代理服务器,由反向代理服务器选择分配给哪台服务器进行处理请求,并将应答返回给client

功能:

  1. 负载均衡:由反向代理服务器合理规划每台服务器的使用,让每台主机都"有事可做"
  2. 安全保护:私网服务器一般不暴露在公网上,隐藏服务器的IP地址,我们平时使用的云服务器上的公网IP地址可能就是反向代理服务器的IP地址,对client的请求进行过滤
  3. 缓存:反向代理服务器可以缓存服务器的响应内容,对于client重复的请求,可以从缓存中获取

NAT与代理服务器的区别:

  1. 应用上:NAT技术解决的是IP地址不足的问题,代理服务器则是一种具体应用
  2. 底层上:NAT工作在网络层,代理服务器工作在应用层
  3. 部署位置上:NAT一般部署在防火墙、路由器上,代理服务器则是一个软件程序,一般部署在服务器上
  4. 使用范围上:NAT一般在局域网的出口处,代理服务器可以在局域网、广域网等地方

代理服务器还有一个应用:翻墙

在这里插入图片描述

5. DNS

DNS是一套解析域名到IP地址的系统

我们说过,访问任何服务器都要以IP地址 + 端口号的方式,但IP地址对于普通用户来说非常不友好,于是就产生域名,它能增加用户的体验

最开始,由hosts文件维护主机名与IP地址的映射关系,这样做,非常的不方便:

  1. 一旦由新主机连接到互联网,或主机IP地址变化,就要到信息中心更改hosts文件
  2. 计算机需要定期更新hosts文件才能正常上网

于是,就有了DNS系统,域名解析过程:

在这里插入图片描述

域名www.baidu.com,其中com是一级域名,表示盈利组织,还有net(网络提供商)、org(非盈利组织),baidu则是二级域名

使用dig指令,能查看DNS的过程

在这里插入图片描述

如果访问过某个网址,本地DNS服务器也会缓存IP地址

在这里插入图片描述

6. ICMP

ICMP是网络层协议,不是用来传输数据的,而是用来网络问题定位,网络问题诊断的

在这里插入图片描述

由于IP协议不保证可靠性,如果IP报文丢包,IP协议不能通知传输层以及丢包的原因

ICMP的功能:

  1. 确认IP报文成功到达目标主机
  2. 通知报文丢弃的原因

在这里插入图片描述

需要注意的是:ping命令是基于ICMP的,不经过传输层,由OS直接调用网络层接口发送,因此,该命令也就没有端口号

在这里插入图片描述

traceroute命令基于ICMP,打印主机到目标经历过的路由器

在这里插入图片描述

7.测试内网穿透

使用frp软件测试内网穿透,将虚拟机作为frpc,将云服务器作为frps

在这里插入图片描述

在这个过程中,Windows主机会被当成路由器,构建子网,虚拟机是该子网中的一台主机

在这里插入图片描述

下载frp并拷贝到云服务器和虚拟机上

在这里插入图片描述

注意:由于公网不能访问私有IP地址,只能从虚拟机向云服务器拷贝

在这里插入图片描述

在这里插入图片描述

启动服务端和客户端

在这里插入图片描述

在这里插入图片描述

可以看到,frps进程会有两个端口号,8888是虚拟机的连接,8081是未来client向该端口发送的报文都会转交给虚拟机上的服务的连接

确保虚拟机上有sshd服务,也就是远程登录服务,使用client向云服务器的8081端口发送ssh连接,输入用户名密码后,会发现登录的是虚拟机

如果想在虚拟机上部署多个服务,可以继续添加配置文件

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2275290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android - NDK :JNI实现异步回调

在android代码中,通过JNI调用c层子线程执行耗时任务,在c层子线程中把结果回调到android层, C语言小白,请批评指正! android层代码: import androidx.appcompat.app.AppCompatActivity;import android.os.…

【Altium】AD使用智能粘贴功能把多个网络标签改成端口

1、 文档目标 使用智能粘贴功能把多个网络标签(net lable)改成端口(port) 2、 问题场景 客户有一份原理图,网络用的是net label,没用Port,然后创建一个sheet symbol,但是sheet sy…

软件系统安全逆向分析-混淆对抗

1. 概述 在一般的软件中,我们逆向分析时候通常都不能直接看到软件的明文源代码,或多或少存在着混淆对抗的操作。下面,我会实践操作一个例子从无从下手到攻破目标。 花指令对抗虚函数表RC4 2. 实战-donntyousee 题目载体为具有漏洞的小型软…

01 springboot集成mybatis后密码正确但数据库连接失败

01 springboot集成mybatis后密码正确但数据库连接失败 问题描述: 1.datasource配置: //application.yaml spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&serverTime…

Python基于jieba和wordcloud绘制词云图

【Cesium】自定义材质,添加带有方向的滚动路线 🍖 前言🎶一、实现过程✨二、代码展示🏀三、运行结果🏆四、知识点提示 🍖 前言 Python基于jieba和wordcloud绘制词云图 🎶一、实现过程 读取文本…

保证Mysql数据库到ES的数据一致性的解决方案

文章目录 1.业务场景介绍1.1 需求分析1.2 技术实现方案 2.业界常用数据一致性方案分析2.1 同步双写方案2.2 MQ异步双写方案2.3 扫表定期同步方案2.4 监听binlog同步方案 1.业务场景介绍 1.1 需求分析 某知名的在线旅游平台,在即将到来的春季促销活动之前&#xff…

文件搜索工具Everything

软件介绍 Everything 是一款运行于 Windows 系统的轻量级、高效的文件搜索工具 软件功能 1、基本搜索 在搜索框输入关键词,即可快速找到包含该关键词的文件和文件夹。 2、高级搜索 支持多种高级搜索语法,如.exe:可只返回特定扩展名的结果…

【面试题】技术场景 6、Java 生产环境 bug 排查

生产环境 bug 排查思路 分析日志:首先通过分析日志查看是否存在错误信息,利用之前讲过的 elk 及查看日志的命令缩小查找错误范围,方便定位问题。远程 debug 适用环境:一般公司正式生产环境不允许远程 debug,多在测试环…

【UE5 C++课程系列笔记】25——多线程基础——FGraphEventRef的简单使用

目录 概念 使用示例1 使用示例2 概念 FGraphEventRef 本质上是对一个异步任务或者一组相关异步任务在虚幻引擎任务图系统中的一种引用(reference)。虚幻引擎的任务图系统用于高效地调度和管理各种异步任务,协调它们的执行顺序以及处理任务…

DeepSeek:性能强劲的开源模型

deepseek 全新系列模型 DeepSeek-V3 首个版本上线并同步开源。登录官网 chat.deepseek.com 即可与最新版 V3 模型对话。 性能对齐海外领军闭源模型​ DeepSeek-V3 为自研 MoE 模型,671B 参数,激活 37B,在 14.8T token 上进行了预训练。 论…

使用 SQL 和表格数据进行问答和 RAG(1)—数据库准备

一. 从 .sql/csv/xlsx 文件创建 sqlite 数据库。 要从.sql文件准备 SQL DB,这里会将创建数据库的代码放到了,将文件复制到data/sql目录中,然后在终端中的项目文件夹中执行: pip install sqlite3现在创建一个名为sqldb的数据库&a…

用否定法去跳脱圈层

在这个充满竞争和诱惑的时代,许多人发现自己被困在了一个看似舒适却实则束缚重重的圈层之中。这个圈层,可能是由底层人的思维惯性、不良习惯、无谓消费、攀比心理等构成的。要真正实现自我提升,跳出这个圈层,就需要我们运用否定法…

C++类的引入

C中类的前身 1> 面向对象三大特征:封装、继承、多态 2> 封装:将能够实现某一事物的所有万事万物都封装到一起,包括成员属性(成员变量),行为(功能函数)都封装在一起&#xff…

Postman配置环境变量

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Postman是一套比较方便的接口测试工具,但我们在使用过程中,可能会出现创建了API请求,但API的URL会随着服务器IP地址的变化而改…

新能源网站提升用户体验的关键

新能源网站的用户体验对于吸引和留住访问者至关重要。一个优秀的用户体验可以增加用户的满意度,提高他们对网站的忠诚度。在设计新能源网站时,关键在于简洁明了的界面和易于导航的布局。用户应该能够轻松找到他们需要的信息,而不会感到困惑或…

【Unity3D日常开发】Unity3D中适用WEBGL打开Window文件对话框打开/上传文件

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 Unity3D发布的WEBGL程序是不支持直接的I/O操…

ElasticSearch内存占用率过高怎么办?

文章目录 1,先用top看看各个进程的内存占用情况2,不能简单的杀死进程,然后再重启。3,查看一下ElasticSearch进程的具体启动情况4,修改Elasticsearch 的Java堆内存 1,先用top看看各个进程的内存占用情况 先…

DC/AC并网逆变器模型与仿真MATLAB

DC/AC并网逆变器是一种将直流电(DC)转化为交流电(AC),并将其与电网并联的设备。它的核心功能是实现直流电源(如光伏电池板或储能电池)与电网的有效连接,同时保证输出电能质量满足电网…

Flink三种集群部署模型

这里写自定义目录标题 Flink 集群剖析Flink 应用程序执行Flink Session 集群(Session Mode)Flink Job 集群(以前称为per-job)Flink Application 集群(Application Mode) 参考 Flink 集群剖析 Flink 运行时…

JVM实战—12.OOM的定位和解决

大纲 1.如何对系统的OOM异常进行监控和报警 2.如何在JVM内存溢出时自动dump内存快照 3.Metaspace区域内存溢出时应如何解决(OutOfMemoryError: Metaspace) 4.JVM栈内存溢出时应如何解决(StackOverflowError) 5.JVM堆内存溢出时应该如何解决(OutOfMemoryError: Java heap s…