NAT技术和代理服务器

NAT IP原理

之前我们讨论了, IPv4协议中, IP地址数量不充足的问题

  • NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;
  • NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:
  • 很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;
  • 全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的;

NAT IP转换过程

主机A向主机R发起请求,发送过去了,主机R发送响应回来,但是这个目的IP是私有IP,不具有唯一性,会导致很多局域网的主机收到这个响应,怎么办呢?NAT技术 

  • NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
  • NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10;
  • 在NAT路由器内部, 有一张自动生成的, 用于地址转换的表;
  • 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系; 

NAPT

那么问题来了, 如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同的. 那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系

这种关联关系也是由NAT路由器自动维护的. 例如在TCP的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就会删除这个表项 

NAT技术的缺陷

由于NAT依赖这个转换表, 所以有诸多限制:

  • 阻碍内网互通:无法从NAT外部向内部服务器建立连接,NAT技术通常只实现了一个方向的地址转换,即内部网络到外部网络的转换。因此,外部网络设备无法主动发起连接到内部私网中的设备,除非内部设备已经建立了到外部网络的连接。这限制了内部网络之间的直接互通能力
  • 装换表的生成和销毁都需要额外开销
  • 通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开

内网穿透

由于IPv4的公网地址数量有限,无法为每一台接入互联网的设备分配一个公网IP,因此大量设备只能分配到私有IP地址。在一个公司或家庭内部,可以借助私有IP搭建内网用于相互通讯。然而,当内网中的设备需要被外网访问时,就需要借助NAT技术将私有IP转换为公有IP。但NAT技术的一个问题是,它自动屏蔽了非内网主机主动发起的连接,即从外网发往内网的数据包将被NAT设备丢弃,这使得位于不同NAT设备之后的主机之间无法直接交换信息。这就需要内网穿透技术来解决这个问题

内网穿透的实现原理

内网穿透的实质是利用路由器上的NAT系统,使具有特定源IP地址和源端口号的数据包不被NAT设备屏蔽而正确路由到内网主机。具体来说,内网穿透技术通过以下步骤实现:

  1. 中间服务器转发:内网穿透技术利用中间服务器作为桥梁,将来自公共网络的连接请求转发到私有网络中的目标设备。这个中间服务器可以是任何具有公网IP地址的服务器,它负责接收外部网络的连接请求,并将其转发到内网中的目标设备。
  2. 端口映射:端口映射是将本地计算机的端口映射到公网上,从而实现外网访问本地计算机的技术。通过端口映射,可以将内网计算机的服务暴露在公网上,使得外网用户可以通过公网的地址和端口访问内网的服务。
  3. 协议转换与数据传输:在内网穿透过程中,可能需要对协议进行转换,以确保数据在传输过程中的兼容性和安全性。例如,可以使用TCP/IP协议的三次握手机制,在内网和外网之间建立一条虚拟通道,将内网计算机和外网访问者之间的TCP连接进行转发。同时,也可以使用UDP协议进行数据传输,但UDP不需要建立连接,而是直接将内网计算机发送的UDP数据包通过中间服务器转发到外网。

代理服务器

定义与功能

代理服务器(Proxy Server)是一种位于客户端和服务器之间的网络实体。它可以接收客户端的请求,并代表客户端向服务器发起请求,然后将服务器返回的数据转发给客户端。通过这种方式,代理服务器充当了客户端和服务器之间的中介,为客户端提供了访问服务器的间接途径。

工作原理

代理服务器的工作原理主要基于网络协议(如HTTP、HTTPS、FTP等)的转发机制。具体过程如下:

  1. 请求转发:当客户端发起请求时,请求首先被发送到代理服务器。代理服务器接收请求后,会对请求进行解析和处理,识别出目标服务器的地址和端口。
  2. 地址替换:代理服务器会将客户端请求中的源IP地址替换为自己的IP地址,并向目标服务器发出请求。这样,目标服务器在接收到请求时,会认为请求来自代理服务器,而不是客户端。
  3. 响应接收:目标服务器在接收到请求后,会将数据返回给代理服务器。代理服务器接收响应后,会对响应进行解析和处理。
  4. 响应转发:代理服务器将响应中的目标IP地址替换为自己的IP地址,并将响应发送给客户端。这样,客户端就能收到来自目标服务器的数据。

应用场景与功能扩展

  1. 隐私保护:代理服务器可以隐藏客户端的真实IP地址,使得客户端在访问网络时不易被追踪和识别。这有助于保护客户端的隐私。
  2. 访问控制:代理服务器可以对客户端的请求进行过滤和控制,从而限制对特定资源的访问。这有助于维护网络的安全性和稳定性。
  3. 缓存加速:代理服务器通常具有缓存功能,可以存储经常访问的数据,实现负载均衡。当客户端再次请求这些数据时,代理服务器可以直接从缓存中提供数据,从而提高访问速度和效率。
  4. 突破访问限制:代理服务器可以帮助客户端突破某些网络访问限制,如访问被屏蔽的网站或服务。例如翻墙。

代理服务器分类

代理服务器又分为正向代理和反向代理

  1. 正向代理:正向代理位于客户端和目标服务器之间。客户端将请求发送给代理服务器,代理服务器再将请求转发给目标服务器,并将目标服务器的响应返回给客户端。
  2. 反向代理:反向代理位于目标服务器(通常是内部服务器或服务器集群)和客户端之间。客户端直接与反向代理服务器通信,而反向代理服务器再将请求转发给内部服务器,并将内部服务器的响应返回给客户端。

应用场景

  1. 正向代理:主要应用于需要访问外部资源且存在访问限制的场景,如公司网络访问外网资源、突破地域限制访问特定服务等。
  2. 反向代理:主要应用于需要保护内部服务器、实现负载均衡、提高安全性和性能的场景,如Web服务器集群、CDN(内容分发网络)等。

NAT和代理服务器的区别

  1. 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器.
  2. 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层.
  3. 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网.
  4. 从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM+小程序的购物管理系统1

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序的购物管理系统1,可以实现首页、个人中心、商品分类管理、商品信息管理、特价商品管理、用户管理、留言板管理、系统管理、订单管理等功能。方便用户对首页、商品…

Java审计对比工具JaVers使用

最近有个需求,需要将页面的内容生成excel或者word文档,而且每次的修改都需要生成新的版本,同时需要记录每次修改变化的内容。我们会把每次的修改的内容提交赋值给一个java对象,同时存储到数据库一条新数据,对应数据表一…

stm32入门教程--DMA 超详细!!!

目录 简介 工作模式 1、数据转运DMA 2、ADC扫描模式DMA 简介 工作模式 1、数据转运DMA 这个例子的任务是将SRAM的数组DataA,转运到另一个数组DataB中,这个基本结构里的各个参数应该如何配置呢? 首先是外设站点和存储器站点的起始地址、…

Python 爬虫的寻宝大冒险:如何捕获 API 数据的宝藏

在这个信息爆炸的数字时代,数据就像是隐藏在网络深处的宝藏,等待着勇敢的探险家去发现。今天,我们要讲述的是如何成为一名 Python 爬虫探险家,装备你的代码工具,深入 API 的迷宫,捕获那些珍贵的数据宝藏。 …

时间序列预测(十五)——有关Python项目框架的实例分析

#1024程序员节|征文# 在之前的学习中,已经对时间序列预测的相关内容有了大致的了解。为了进一步加深理解,并能够将所学知识应用于实际中,我决定找一个完整的Python框架来进行深入学习。经过寻找,我终于找到了一篇非常具…

【338】基于springboot的IT职业生涯规划系统

毕 业 设 计(论 文) 题目:it职业生涯规划系统的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以…

基于SSM+小程序的童装商城管理系统(商城3)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序的童装商城管理系统实现了管理员及用户。 1、管理员实现了 首页、个人中心、用户管理、分类列表管理、童装商城管理、系统管理、订单管理。 2、用户实现了 注册、登录、首…

Spring Boot框架中小企业设备监控系统开发

3系统分析 3.1可行性分析 通过对本中小企业设备管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本中小企业设备管理系统采用Spring Boot框架&#xff0…

QT实时显示日志内容

性能有待提高; 能够读取指定目录下的日志文件,显示在下拉框中。 选择某一个日志之后,点击获取数据按钮,能够实时刷新日志内容。 但是每次刷新都会对整个文件进行读取,文本框重新加载文本。效率很低,影响性能…

Qt/C++ 调用迅雷开放下载引擎(ThunderOpenSDK)下载数据资源

目录导读 前言ThunderOpenSDK 简介参考 xiaomi_Thunder_Cloud 示例ThunderOpenSDK 下载问题 前言 在对以前老版本的exe执行程序进行研究学习的时候,发现以前的软件是使用的ThunderOpenSDK这个迅雷开放下载引擎进行的项目数据下载,于是在网上搜索一番找到…

八,Linux基础环境搭建(CentOS7)- 安装Mysql和Hive

Linux基础环境搭建(CentOS7)- 安装Mysql和Hive 大家注意以下的环境搭建版本号,如果版本不匹配有可能出现问题! 一、Mysql下载及安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Orac…

等保测评:塑造信息时代的新常态

随着信息技术的飞速发展,信息安全已经成为一个全球性的问题。在信息时代,数据的安全性、完整性和可用性对于个人、企业乃至国家都至关重要。等保测评(等级保护测评),作为信息安全领域的一项重要工作,其目的…

C++ 整型大数运算(大整数运算)项目

C 整型大数运算项目 一、项目介绍二、项目变量成员三、项目实现构造函数加法减法乘法先计算再进位边计算边进位 除法与取模判断输入输出 四、项目源代码展示在 Big_integer.h 中:在 Big_integer.cpp 中: 五、测试准确性六、优化方向 一、项目介绍 整型大…

C++,STL 051(24.10.28)

内容 1.map容器的构造函数。 2.map容器的赋值操作。 运行代码 #include <iostream> #include <map>using namespace std;void printMap(map<int, int> &m) {for (map<int, int>::iterator it m.begin(); it ! m.end(); it){cout << &quo…

JavaSE笔记2】面向对象

目录 一、深刻认识面向对象 二、对象在计算机中的执行原理 三、this 四、构造器 五、封装 六、实体Javabean(实体类) 1. 是什么&#xff1f; 2. 实体类用来干什么&#xff1f; 七、成员变量和局部变量的区别 一、深刻认识面向对象 二、对象在计算机中的执行原理 三、this Java中…

通俗直观介绍ChatGPT背后的大语言模型理论知识

“AI 的 iPhone 时刻到来了”。非算法岗位的研发同学’被迫’学习 AI&#xff0c;产品岗位的同学希望了解 AI。但是&#xff0c;很多自媒体文章要么太严谨、科学&#xff0c;让非科班出身的同学读不懂&#xff1b;要么&#xff0c;写成了科幻文章&#xff0c;很多结论都没有充分…

基于SpringBoot的“时间管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“时间管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 管理员功能界面图 系统管理界面图…

云计算平台上的DevOps实践

文章目录 什么是DevOps云计算平台上的DevOps优势自动化部署弹性伸缩地理分布 实施DevOps的关键组件版本控制系统持续集成/持续交付工具配置管理工具监控和日志管理 实践案例使用AWS CodePipeline进行持续集成/持续交付利用AWS Auto Scaling实现弹性使用AWS CloudFormation进行基…

嵌入式学习-网络-Day03

嵌入式学习-网络-Day03 1.linux下IO模型及特点 1.1阻塞式IO 1.2非阻塞式IO 设置非阻塞&#xff1a; 1&#xff09;通过函数参数设置 2&#xff09;通过fcntl函数设置文件描述符属性 1.3信号驱动IO&#xff08;异步IO&#xff09; 1.4IO多路复用&#xff08;重点&#xff09; IO…

【HarmonyOS】判断应用是否已安装

【HarmonyOS】判断应用是否已安装 前言 在鸿蒙中判断应用是否已安全&#xff0c;只是通过包名是无法判断应用安装与否。在鸿蒙里新增了一种判断应用安装的工具方法&#xff0c;即&#xff1a;canOpenLink。 使用该工具函数的前提是&#xff0c;本应用配置了查询标签querySch…