【计算机网络】NAT技术

文章目录

  • 1. NAT技术简介
  • 2. 使用NAT技术转换IP的过程
  • 3. NAPT
  • 4. NAT技术的缺陷
  • 5. NAT和代理服务器

1. NAT技术简介

NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效避免外部网络的攻击,隐藏并保护网络内部的计算机。

在IPv4协议中,IP地址数量不足是一个大问题,而NAT技术就是当前解决IP地址不足的重要手段,是路由器的一个重要功能。

  • 在对外进行通信时,NAT能够将私有IP经过一系列替换操作最终转换为全局IP,也就是说,NAT是一种将私有IP和全局IP相互转化的技术方法。
  • 装有NAT软件的路由器叫做NAT路由器,所有使用私有IP的主机在和外界进行通信时,都要在NAT路由器上将其私有IP转换为全局IP。
  • 很多学校、家庭、公司内部每个终端设置的IP都是私有IP,而只在路由器或必要的服务器上设置全局IP。
  • 全局IP要求唯一,但是私有IP不需要,在不同的局域网中出现相同的私有IP是允许的。

2. 使用NAT技术转换IP的过程

假设某个局域网当中有A、B、C三台主机,在公网当中有一台服务器,以主机A访问公网中的这台服务器为例,我们来看数据包在传输过程中IP地址的转换过程。

数据包从局域网到公网的过程

在这里插入图片描述
主机A向服务器发起数据请求的过程中,数据包中IP地址的转换如下:

  • 刚开始,该数据包当中的源IP地址就是主机A的私有地址,目的IP地址就是服务器的公网IP地址。
  • 当数据包经过NAT服务器时,路由器会将该数据包的源IP地址替换成自己的WAN口IP地址,此时该数据包的源IP地址和目的IP地址都是公网IP了。
  • 该数据包在网络中经过各种转发,最终到达服务器主机。

服务器收到主机A的数据请求并处理之后,就会对主机A发来的请求进行响应。

数据包从公网到局域网的过程

在这里插入图片描述
服务器对主机A进行响应的过程中,数据包中IP地址的转换如下:

  • 刚开始,该数据包当中的各种源IP地址就是服务器的公网IP地址,目的IP地址就是路由器的WAN口IP地址。
  • 数据包在互联网中经过各种路由转发,到达主机A所在局域网的NAT路由器,此时路由器会将数据包的目的IP地址转换为主机A的私有IP地址。
  • 最终路由器就会将该数据包转发给局域网当中的主机A。

需要注意的是,因为主机A向服务器发起数据请求时,该数据包当中的源IP地址被替换成了NAT路由器的WAN口IP地址,相当于是该路由器代替主机A向服务器发起了数据请求,因此服务器发出的响应数据包的目的IP地址应该是NAT路由器的WAN口IP地址。

3. NAPT

  • 当局域网当中的主机要访问外网时,NAT路由器会将这些数据包的源IP地址替换成自己的WAN口IP地址。
  • 当外网发来响应数据时,NAT路由器又会将响应数据包的目的IP地址替换为局域网中对应主机的IP地址。

那NAT路由器是如何判断,应该将从外网收到的响应数据包发给局域网中哪一台主机呢?

  • 实际在NAT路由器内部,有一张自动生成的、用于地址转换的表。
  • 该转换表中维护的就是局域网中主机的私有IP,与其对应访问的外网当中的某个公网IP之间的映射关系。
  • 局域网中的主机第一次向外网发起数据请求时,就会生成表中的映射关系。
  • 比如在TCP连接建立时,会建议对应的映射关系,在TCP连接断开后,就会删除对应的映射关系。

在刚才的例子中,主机A第一次向服务器发起数据请求时,路由器中就会建立以下映射关系:
在这里插入图片描述
当NAT路由器收到服务器向主机A发来的响应数据时,就可以通过查表得知该响应数据是发送给局域网当中的主机A的。

但如果转换表中维护的只是局域网当中主机的私有IP,与其对应访问的外网当中的某个公网IP之间的映射关系,那么就会出现某些问题。

比如,如果局域网中的主机A和主机B同时都在访问该服务器,那么此时转换表中就会建立以下两队映射关系:
在这里插入图片描述
这时这张表就只能保证从左到右的唯一性,而不能保证从右到左的唯一性,当服务区发来数据时,该数据包中的IP地址都是服务器的WAN口IP,此时NAT路由器就无法判断该数据包应该转发给主机A还是主机B,此时NAT路由器就无法判断数据包应该转发给主机A还是主机B,那么就需要用到NAPT技术。

NAPT

NAPT(Network Address Port Tranlation,网络地址端口转换),可以将多个内部地址映射为一个合法公网地址。

  • NAPT在建立转换表的映射关系时,除了建立局域网中私有IP与其对应访问的公网IP的映射关系之外,还会加上一个由NAT路由器选定的端口号。
  • 此时局域网中的多台主机同时访问同一个外网服务时,虽然外网发来的响应数据的目的IP地址都是路由器的WAN口IP,但发给局域网中不同主机的响应数据对应的目的端口号是不同的,此时路由器就能通过IP+port的方式来区分发给不同主机的数据包。

比如局域网中的主机A和主机B都在访问同一个服务器,并且它们访问服务器时采用的端口号都是1025。

  • 假设主机A发送的数据包先到达路由器,此时路由器将数据包的源IP地址替换成自己的WAN口IP地址,由于路由器用于访问该服务器的1025号端口没有被使用,因此该数据包的源端口号可以不变。
  • 当主机B发来的数据包到达路由器时,路由器同样将数据包的源IP地址替换为自己的WAN口IP地址,但此时路由器用于访问该服务器的1025号端口已经被主机A使用了,因此路由器会重新选定一个端口号对数据包的源端口号进行替换。

此时转换表就有两对映射关系:
在这里插入图片描述
此时这张转换表既能保证从左到右的唯一性,也能保证从右到左的唯一性。

  • 当服务器发来的响应数据到达路由器时,虽然服务器发给主机A和主机B的数据包对应的目的IP地址是一样的。
  • 但路由器用1025端口号代替主机A进行数据请求,用1026端口号代替主机B进行数据请求。
  • 因此现在路由器可以根据数据包中的端口号,判断将数据包转发给主机A还是主机B,进行对数据包中的目的IP地址和目的端口号之间的转换,然后转发给局域网中对应的主机。

谈谈路由器

路由器是工作在网络层的一个设备,负责将数据包从一个网络转发到另一个网络,但不能狭义地认为路由器只能工作在网络层。

  • NAT路由器再进行数据转发时,不仅有能力替换数据包的源IP地址和目的IP地址,而且在必要的情况下还可能会替换数据包的源端口号和目的端口号,而端口号其实是传输层的概念。
  • 为了对IP地址进行动态管理,大部分路由器都带有DHCP功能,而DHCP实际是应用层的一个协议。

4. NAT技术的缺陷

NAT技术进行私有IP和公网IP之间的替换,主要就是依赖NAT路由器当中维护的网络地址转换表,但这张转换表也体现出来NAT的一些缺陷:

  • 无法从NAT外部向内部服务器建立连接,因为外部无法知道内部的私网IP,也就无法主动与内部服务器建立建立。
  • 转换表的生成和销毁都需要额外开销。
  • 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。

5. NAT和代理服务器

代理服务器(Proxy Server)的功能就是代理网络用户是获取网络信息,代理服务器又分为正向代理和反向代理。

  • 正向代理

正向代理,是一个位于客户端和目标服务器之间的服务器,客户端并不直接访问目标服务器,而是先访问代理服务器,由代理服务器代替客户端去访问对应的目标服务器,并将目标服务器的响应结果返回给客户端。
在这里插入图片描述
比如公司内部一般都会有自己的服务器,当我们使用公司内网上网时。

  • 我们对外网发起的数据请求,首先会转发到公司的这台服务器上,然后由公司的这台服务器代替你对外网进行访问。
  • 当公司的服务器收到对应外网的响应数据后,再由公司的这台服务器将数据转发给你。

正向代理的好处:

  • 正向代理的一个最大好处就是可以加速资源访问。
  • 比如公司中大量员工都要访问外网的同一个资源,那么正向代理服务器就可以将对应的资源缓存到本地,此时当其他人要访问资源时,直接在正向代理服务器就可以获取,而不需要再次进行外网访问。

反向代理

反向代理,也是一个位于客户端和目标服务器之间的服务器,对于客户端而言,反向代理服务器就相当于目标服务器,用户不需要知道目标服务器的地址,用户只需要访问反向代理服务器就可以获得目标服务器提供的服务。

反向代理,也是一个位于客户端和目标服务器之间的服务器,客户端直接向反向代理服务器发起数据请求,然后再由反向代理服务器将客户端的数据请求转发给真正的目标服务器进行处理,数据处理完毕之后反向代理服务器再将数据结构返回给客户端。在这里插入图片描述
比如域名www.baidu.com对应的服务器实际就是一个反向代理服务器。

  • 百度内部其实并不是只有一台服务器,但不同地区的人们都可以通过访问www.baidu.com享受到百度提供的服务,实际上我们访问的就是百度的反向代理服务器。
  • 当这台反向代理服务器收到客户端的数据请求后,就会将我们的数据请求转发给百度内部的某台服务器进行数据代理,然后再将数据处理的结果返回给客户端。

反向代理的好处

  • 反向代理可以起到负载均衡的作用。比如不设置反向代理服务器,用户在访问百度的时候,就会大量随机访问百度内部的服务器,此时就可能导致某些服务器压力太大,而某些服务器却处于闲置状态。而设置了反向代理服务器之后,我们就能够通过某些方法让用户的数据请求较为平均地落到每台服务器上。
  • 反向代理还能起到安全防护的作用。有了反向代理服务器之后,我们不需要将提供服务的服务器对应的信息暴露出去,此外,当由非法请求发送到反向代理服务器时,反向代理服务就相当于一层软件屏障,可以在反向代理服务器当中部署一些防护措施,让这些非法请求在反向代理服务器这里就被过滤掉,而不会影响内部实际提供服务的服务器。

正向代理和反向代理的异同

正向代理和反向代理的相同点:

  • 正向代理服务器和反向代理服务器都是位于客户端和服务器之间的。
  • 正向代理服务器和反向代理服务器的主要工作,都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端。

正向代理和反向代理的不同点:

  • 正向代理是客户端的代理,帮助客户端访问其无法访问的服务器资源的,而反向代理则是服务端的代理,帮助服务器做负载均衡、安全防护等工作的。
  • 正向代理一般是客户端架设的,比如公司的正向代理服务器是公司作为客户端架设的,而反向代理服务一般是服务端架设的,比如百度的反向代理服务器是百度作为服务端架设的。
  • 正向代理中,服务器不知道真正的客户端到底是谁,服务器认为正向代理服务器就算真实的客户端,而反向代理中,客户端不知道真正的服务器是谁,客户端认为反向代理服务器就是真实的服务器。

NAT和代理服务器的区别

NAT和代理服务器都是代替我们向服务器发起数据请求的,但它们有以下区别:

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

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

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

相关文章

【测试学习三】软件测试的生命周期 BUG的相关知识

目录 一、软件测试的生命周期(重要) 🍑1、软件的生命周期? 🍑2、软件测试的生命周期? 二、关于BUG 🍑1、如何描述与定义一个BUG?(了解) 🍑2…

滑动奇异频谱分析:数据驱动的非平稳信号分解工具(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

分治法、回溯法与动态规划

算法思想比较 回溯法:有“通用解题法”之称,用它可以系统地搜索问题的所有解。回溯法是按照深度优先搜索(DFS)的策略,从根结点出发深度探索解空间树分治法:将一个难以直接解决的大问题,分割成一些规模较小的相同问题&…

如何建立含有逻辑删除字段的唯一索引

业务场景 在实际工作当中,遇到一个场景,就是在用户注册时,名字要全局唯一,当然,我们是可以对用户进行删除的,你会怎么去做? 分析 一般来说,我们可以在用户注册请求时&#xff0c…

Typescript+React入门

初识Typescript 出现背景 Typescript(以下简称TS)实际上就是JavaScriptType,用数据类型的方式来约束了JS的变量定义 在JS的基础上增加了类型支持 在JS中大多数错误都是因为数据类型造成的,所以TS为了规避这个问题加入了类型限制…

iPhone 6透明屏是什么?原理、特点、优势

iPhone 6透明屏是一种特殊的屏幕技术,它能够使手机屏幕变得透明,让用户能够透过屏幕看到手机背后的物体。 这种技术在科幻电影中经常出现,给人一种未来科技的感觉。下面将介绍iPhone 6透明屏的原理、特点以及可能的应用。 iPhone 6透明屏的原…

尚品汇总结三:商城首页(面试专用)

目录 首页商品分类实现 1、封装数据接口 2、页面静态化: 什么是页面静态化 为什么要使用静态化 首页商品分类实现 前面做了商品详情,我们现在来做首页分类,我先看看京东的首页分类效果,我们如何实现类似效果: 思路…

shell 脚本

一、使用PID过滤该进程的所有信息 #! /bin/bash # Function: 根据用户输入的PID,过滤出该PID所有的信息 read -p "请输入要查询的PID: " P nps -aux| awk $2~/^$P$/{print $11}|wc -l if [ $n -eq 0 ];thenecho "该PID不存在!&#xff0…

【深度学习】MAT: Mask-Aware Transformer for Large Hole Image Inpainting

论文:https://arxiv.org/abs/2203.15270 代码:https://github.com/fenglinglwb/MAT 文章目录 PSAbstractIntroductionRelated WorkMethod总体架构卷积头Transformer主体Adjusted Transformer Block Multi-Head Contextual Attention Style Manipulation …

原型链污染例题复现

一、什么是原型链 下面我们通过这个小例子来看看。 可以看到b在实例化为test对象以后,就可以输出test类中的属性a了。这是因为在于js中的一个重要的概念:继承。而继承的整个过程就称为该类的原型链。 在javascript中,每个对象的都有一个指向他的原型(p…

【Unity3D应用案例系列】Unity3D中实现文字转语音的工具开发

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在开发中,会遇到将文字转语音输出的需求&#xff0…

问题解决方案

前端开发 1、npm安装的时候老是卡住 reify:rxjs: timing reifyNode:node_modules/vue/cli/node_modules 查看当前使用的那个镜像 nrm lsnpm ---------- https://registry.npmjs.org/yarn --------- https://registry.yarnpkg.com/cnpm --------- https://r.cnpmjs.org/taobao …

【导出Word】如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档(只含文本内容的模板)

这篇文章,主要介绍如何使用JavaFreemarker模板引擎,根据XML模板文件生成Word文档。 目录 一、导出Word文档 1.1、基础知识 1.2、制作模板文件 1.3、代码实现 (1)引入依赖 (2)创建Freemarker工具类 &…

【安全测试】Web应用安全之XSS跨站脚本攻击漏洞

目录 前言 XSS概念及分类 反射型XSS(非持久性XSS) 存储型XSS(持久型XSS) 如何测试XSS漏洞 方法一: 方法二: XSS漏洞修复 原则:不相信客户输入的数据 处理建议 资料获取方法 前言 以前都只是在各类文档中见到过XSS,也进…

可缝合神经网络

文章目录 Stitchable Neural Networks摘要本文方法实验结果 Stitchable Neural Networks 摘要 包含大量强大的预训练模型族(如ResNet/DeiT)的model zoo已经达到了前所未有的范围,这对深度学习的成功有重要贡献。由于每个模型族都由具有不同尺度的预训练模型(例如&…

SpringMVC基于SpringBoot的最基础框架搭建——包含数据库连接

SpringMVC基于SpringBoot的最基础框架搭建——包含数据库连接 背景目标依赖配置文件如下项目结构如下相关配置如下启动代码如下Controller如下启动成功接口调用成功 背景 工作做了一段时间,回忆起之前有个公司有线下笔试,要求考生做一个什么功能&#x…

Palo Alto Networks® PA-220R 下一代防火墙 确保恶劣工况下的网络安全

一、主要安全功能 1、每时每刻在各端口对全部应用进行分类 • 将 App-ID 用于工业协议和应用,例如 Modbus、 DNP3、IEC 60870-5-104、Siemens S7、OSIsoft PI 等。 • 不论采用何种端口、SSL/SSH 加密或者其他规避技术,都会识别应用。 • 使用…

设计模式--策略模式(由简单工厂到策略模式到两者结合图文详解+总结提升)

目录 概述概念组成应用场景注意事项类图 衍化过程需求简单工厂实现图代码 策略模式图代码 策略模式简单工厂图代码 总结升华版本迭代的优化点及意义什么样的思路进行衍化的扩展思考--如何理解策略与算法 概述 概念 策略模式是一种行为型设计模式,它定义了算法家族&…

flask中的flask-login

flask中的flask-login 在 Flask 中,用户认证通常是通过使用扩展库(例如 Flask-Login、Flask-HTTPAuth 或 Flask-Security)来实现的。 本文详细地解释下 Flask 中的用户认证。这里是用 Flask-Login 插件为例,这是一个处理用户会话…

21.Netty源码之编码器

highlight: arduino-light Netty如何实现自定义通信协议 在学习完如何设计协议之后,我们又该如何在 Netty 中实现自定义的通信协议呢?其实 Netty 作为一个非常优秀的网络通信框架,已经为我们提供了非常丰富的编解码抽象基类,帮助我…