1. 前言

最近在研究搭建Vmware虚拟机环境,所以不得不重新学习NAT虚拟机网络配置。在Vmware中虚拟机网络配置有三种:Host-Only(主机模式)、Bridge(桥接模式)、NAT(网络地址转换模式)。在使用网络地址转换的时候遇到了一些问题,所以这里我将重新复习一些计算机网络知识NAT模式。

2. 名称概念

公有IP地址:也叫全局地址,是指合法的IP地址,它是由NIC(网络信息中心)或者ISP(网络服务提供商)分配的地址,对外代表一个或多个内部局部地址,是全球统一的可寻 址的地址。

私有IP地址:也叫内部地址,属于非注册地址,专门为组织机构内部使用。因特网分配编号委员会(IANA)保留了3块IP地址做为私有IP地址:

10.0.0.0 ——— 10.255.255.255

172.16.0.0——— 172.16.255.255

192.168.0.0———192.168.255.255

地址池:地址池是有一些外部地址(全球唯一的IP地址)组合而成,我们称这样的一个地址集合为地址池。在内部网络的数据包通过地址转换到达外部网络时,将会在地址池中选择某个IP地址作为数据包的源IP地址,这样可以有效的利用用户的外部地址,提高访问外部网络的能力。

3. NAT简介

NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术

用大白话的语句来讲,NAT就是在局域网中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共 IP地址紧缺的问题。通过这种方法,可以只申请一个合法IP地址,就把整个局域网中的计算机接入Internet中。这时,NAT屏蔽了内部网络,所有内部网计算机对于公共网络来说是不可见的,而内部网计算机用户通常不会意识到NAT的存在。如下图所示。这里提到的内部地址,是指在内部网络中分配给节点的私有IP地址,这个地址只能在内部网络中使用,不能被路由转发。

#4 NAT分类
NAT可以分为三种类型:分别是静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)。

4.1 静态NAT

静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。

对于以上网络拓扑图,当内网主机 192.168.1.2如果要与外网的主机202.20.65.4通信时,主机(IP:192.168.1.2)的数据包经过路由器时,路由器通过查找NAT table 将IP数据包的源IP地址(192.168.1.2)改成与之对应的全局IP地址(202.20.65.4),而目标IP地址202.20.65.4保持不变,这样,数据包就能到达202.20.65.4。而当主机HostB(IP:202.20.65.4) 响应的数据包到达与内网相连接的路由器时,路由器同样查找NAT table,将IP数据包的目的IP 地址改成192.168.1.2,这样内网主机就能接收到外网主机发过来的数据包。在静态NAT方式中,内部的IP地址与公有IP地址是一种一一对应的映射关系,所以,采用这种方式的前提是,机构能够申请到足够多的全局IP地址。

4.2 动态NAT

动态转换(亦称NAT pool)是指不建立内部地址和全局地址的一对一的固定对应关系。而通过共享NAT地址池的IP地址动态建立NAT的映射关系。当内网主机需要进行NAT地址转换时,路由器会在NAT地址池中选择空闲的全局地址进行映射,每条映射记录是动态建立的,在连接终止时也被收回。

动态NAT方式适合于 当机构申请到的全局IP地址较少,而内部网络主机较多的情况。内网主机IP与全局IP地址是多对一的关系。当数据包进出内网时,具有NAT功能的设备对IP数据包的处理与静态NAT的一样,只是NAT table表中的记录是动态的,若内网主机在一定时间内没有和外部网络通信,有关它的IP地址映射关系将会被删除,并且会把该全局IP地址分配给新的IP数据包使用,形成新的NAT table映射记录。

4.3 网络地址端口转换NAPT

网络地址端口转换NAPT(Network Address Port Translation)则是把内部地址映射到外部网络的一个IP地址的不同端口上。它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与 动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的端口号。

NAPT是使用最普遍的一种转换方式,它又包含两种转换方式:SNAT和DNAT。

  • 源NAT(Source NAT,SNAT):修改数据包的源地址。源NAT改变第一个数据包的来源地址,它永远会在数据包发送到网络之前完成,数据包伪装就是一具SNAT的例子。
  • 修改数据包的目的地址。Destination NAT刚好与SNAT相反,它是改变第一个数据包的目的地地址,如平衡负载、端口转发和透明代理就是属于NAT。

5. NAT 基本原理

NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。

5.1 地址转换(静态NAT)

NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。

如下图所示,NAT网关有2个网络端口,其中公共网络端口的IP地址是统一分配的公共 IP,为202.20.65.5;私有网络端口的IP地址是保留地址为192.168.1.1。私有网中的主机192.168.1.2向公共网中的主机202.20.65.4发送了1个IP包(Dst=202.20.65.4,Src=192.168.1.2)。

当IP包经过NAT网关时,NAT Gateway会将IP包的源IP转换为NAT Gateway的公共IP并转发到公共网,此时IP包(Dst=202.20.65.4,Src=202.20.65.5)中已经不含任何私有网IP的信息。由于IP包的源IP已经被转换成NAT Gateway的公共IP,Web Server发出的响应IP包(Dst= 202.20.65.5,Src=202.20.65.4)将被发送到NAT Gateway。

这时,NAT Gateway会将IP包的目的IP转换成私有网中主机的IP,然后将IP包(Des=192.168.1.2,Src=202.20.65.4)转发到私有网。对于通信双方而言,这种地址的转换过程是完全透明的。转换示意图如下。

5.2 连接跟踪

在上述过程中,NAT Gateway在收到响应包后,就需要判断将数据包转发给谁。此时如果子网内仅有少量客户机,可以用静态NAT手工指定;但如果内网有多台客户机,并且各自访问不同网站,这时候就需要连接跟踪(connection track)。如下图所示:

5.3 端口转换(网络地址端口转换NAPT)

以上述客户机访问服务器为例,当仅有一台客户机访问服务器时,NAT Gateway只须更改数据包的源IP或目的IP即可正常通讯。但是如果Client A和Client B同时访问Web Server,那么当NAT Gateway收到响应包的时候,就无法判断将数据包转发给哪台客户机,如下图所示。

此时,NAT Gateway会在Connection Track中加入端口信息加以区分。如果两客户机访问同一服务器的源端口不同,那么在Track Table里加入端口信息即可区分,如果源端口正好相同,那么在实行SNAT和DNAT的同时对源端口也要做相应的转换,如下图所示。

6. 总结

NAT技术无可否认是在ipv4地址资源的短缺时候起到了缓解作用;在减少用户申请ISP服务的花费和提供比较完善的负载平衡功能等方面带来了不少好处。但是在ipv4地址在以后几年将会枯竭,NAT技术不能改变ip地址空间不足的本质。然而在安全机制上也潜在着威胁,在配置和管理上也是一个挑战。如果要从根本上解决ip地址资源的问题,ipv6才是最根本之路。在ipv4转换到ipv6的过程中,NAT技术确实是一个不错的选择,相对其他的方案优势也非常明显。

NAT模式包括三种类型:静态NAT(网关中含有多个外网IP地址)、动态NAT(共享网关中的地址池实现网络地址转换)、网络地址端口转换NPAT(连接跟踪,使用端口转换)

计算机网络:NAT基本原理相关推荐

  1. NAT基本原理与私有IP

    公有IP地址: 也叫全局地址,是指合法的IP地址,它是由NIC(⽹络信息中⼼)或者ISP(⽹络服务提供商)分配的地址,对外代表⼀个或多个内部局部地址,是全球统⼀的可寻 址的地址. 私有IP地址: 也叫 ...

  2. NAT基本原理及应用

    文章目录 NAT概述 NAT技术 静态NAT 动态NAT 网络地址端口转换NAPT NAT原理 地址转换 连接跟踪 端口转换 NAT应用 NAT的缺陷 NAT概述 NAT英文全称是"Netw ...

  3. 计算机网络——NAT协议

    NAT 协议 什么是 NAT 协议 我们的计算机要想访问互联网上的信息,就需要一个地址,而且这个地址是大家(其他主机)所认可的,是公共的,这个地址也叫做公有 IP 地址. 与之相对的,除了公有 IP ...

  4. 计算机网络 | NAT | 什么是NAT | 网络地址转换

    目录 一.网络地址转换NAT 1.什么是网络地址转换NAT 2.NAT路由器的工作原理 一.网络地址转换NAT 1.什么是网络地址转换NAT 下面讨论一种情况,就是在专用网内部的一些主机本来已经分配到 ...

  5. 计算机网络——NAT 地址转换

    一. 实验目的 1.理解NAT 地址转换的作用: 2.理解NAT 地址转换的工作方式和工作原理: 3.掌握NAT 共享IP 访问Internet 网络和映射私有网络服务器的配置方法. 二.实验仪器设备 ...

  6. 计算机网络考试目的是什么,计算机网络基本原理考试大纲 -、课程的性质及其设置的目的与要求.doc...

    计算机网络基本原理考试大纲 -.课程的性质及其设置的目的与要求 (-) 课程的性质.地位与任务 计算机网络基本原理是高等教育自学考试计算机网络专业(独立本科段)考试计划中的一门专业基础课.通过本课程的 ...

  7. 计算机网络基础知识自考,自考“计算机网络基本原理”考试大纲

    -.课程的性质及其设置的目的与要求 (-) 课程的性质.地位与任务 计算机网络基本原理是高等教育自学考试计算机网络专业(独立本科段)考试计划中的一门专业基础课.通过本课程的学习,使应考者能够在己有的计 ...

  8. 计算机网络——大厂面试问题集合

    摘和 本博文主要收集面试过程中涉及到计算机网络的面试题目与解答.以下博文的问题都来源互联网中收集的面试题目.其中有些的问题的解答可能存在错误.还请大家帮忙指正. 计算机网络知识脑图 计算机网络--计算 ...

  9. 关于计算机网络的一些基础实验以及实验心得

    文章目录 关于计算机网络学习目标 一.验证性实验 1.ipconfig 2.ping 3.tracert 4.ARP 5.DHCP 6.netstat 7.DNS 8.cache 二.Wireshar ...

最新文章

  1. java模拟器apk闪退_急,求帮助,eclipse生成apk安装以后闪退
  2. MacBook的mission control的功能
  3. comp313 formal methods lec1
  4. 漫话:如何给女朋友解释什么是BIO、NIO和AIO?
  5. SICP:Building Abstractions with Data
  6. ORACLE 索引的三种状态: VALID、 N/A 、UNUSABLE
  7. 非spring托管对象如何获取到spring托管对象
  8. Java文件的写入与读出
  9. android 问题汇总系列之三
  10. pkill -kill -t pts/1
  11. c语言自动插桩,01 - LLVM Pass 实现 C函数 插桩
  12. ubuntu报错:RuntimeError : unexcepted EOF, excepted 2599001 more bytes. The file might be corrupted.
  13. 49个excel常用技巧(三)
  14. td标签高度属性不起作用
  15. 基于Java+SSM+Vue农家乐管理系统(住宿-美食-活动)设计与实现
  16. js验证开始日期不能大于结束日期_js如何判断开始时间不能大于结束时间
  17. Qt学习笔记(二十七):QLabel 的常用方法
  18. 红米5双清_红米5刷recovery教程_红米5第三方中文recovery下载
  19. 求50以内的全部素数
  20. speex库音频降噪(含代码)

热门文章

  1. Docker导入、导出、删除容器
  2. [Golang] 从零開始写Socket Server(3): 对长、短连接的处理策略(模拟心跳)
  3. PostgreSQL学习手册(系统表)
  4. 外部类的静态成员不允许直接使用非静态内部类
  5. Fedora 33更新异常:Errors during downloading metadata for repository ‘updates‘
  6. 华为机器狗 VS 波士顿狗,谁更胜一筹?
  7. 计算机视觉与深度学习算法工程师面试题整理
  8. CAN总线基础(二)
  9. labview与下位机通信的格式问题处理
  10. centos7编译安装mysql5.7_在Centos7源码包编译安装MySQL5.7