图文并茂详解 NAT 协议!
什么是 NAT 协议
我们的计算机要想访问互联网上的信息,就需要一个地址,而且这个地址是大家(其他主机)所认可的,是公共的,这个地址也叫做公有 IP 地址。
与之相对的,除了公有 IP 地址外,还有私有 IP 地址,私有 IP 地址就是我们在私有网络中使用的地址,比如局域网或者公司内部的网络。不知道你没有观察过自己家路由器所分配的 IP 地址,当你登上路由器的网关 192.168.1.1 时,在分配的网络下面一般会看到一些 IP 地址,都是 192.168.1.x ,这种地址就是私有 IP 地址。
所以现在就会产生一个问题,比如 cxuan 的私有 IP 地址是 192.168.1.3 ,而隔壁 cuanxi 哥的 IP 地址也是 192.168.1.3 ,那么他俩同时在网上冲浪的时候,不会产生 IP 冲突吗?或者是把 cxuan 浏览的内容告诉给了 cxuanxi 哥?
这种问题远不用担心,因为我们有一个很靠谱的兄弟 --- NAT(Network Address Translator),当我们的计算机连接到 Internet 的同时,NAT 就会把我们的私有地址直接转换成互联网上的公有 IP 地址,那么下面我们就来了解一下这个协议和它的工作机制。
我们现在就可以给 NAT 协议下一个定义,即 NAT 协议是将在本地网络中使用的私有地址,在连接互联网的同时转换成为公共 IP 地址的技术。实际上,转换的不仅仅只有 IP 地址,还有 TCP 、UDP 端口号,不过这种协议叫做 NAPT 协议。通常情况下,我们所说的 NAT 其实指的就是 NAPT。
NAT 的工作机制
下面我们来聊一下 NAT 具体的工作机制,如下图所示。

私有网络中的客户端 A (IP 192.168.1.6)想向公共网络中的服务器(IP 122.122.122.122)发送数据包,当这个数据包经过 NAT 路由器的时候,就会把它的私有 IP 192.168.1.6 转换为公有的 IP 12.34.56.78,然后这个数据包的源地址就变为 12.34.56.78 ,它经由 Internet 发送给 IP 为 122.122.122.122 的目标服务器。
NAT 路由器其实就是相当于在路由器上安装的 NAT 软件,装有 NAT 软件的路由器就叫做 NAT 路由器。
NAT 路由器不仅可以把私有 IP 转换为公有 IP ,还可以把公有 IP 转换为私有 IP ,这种转换是双向的。

拿上图来说,意思就是服务器 122.122.122.122 发送一个数据包,这个数据包通过 Internet 发送给 NAT 路由器,NAT 路由器把它转换为目标地址是 192.168.1.6 的数据包,然后再发送给客户端 A。
这里有个问题,服务器是发送的数据包,是如何把目标地址的公有 IP 地址转换为私有 IP 地址的呢?
我们上面在引用中说到,NAT 路由器其实就是在路由器上装的 NAT 软件,所以 NAT 路由器它本身就是一台路由器设备,而路由器是有路由表的,路由表中记录一些源地址和目标地址项,数据包根据这些项来进行路由转发。
(我们可以使用 netstat -nr 来显示路由表的信息)

所以,NAT 路由器内部有一张用来记录转换地址的表,也就是一件可以解释的事情了,所以 NAT 路由器在进行地址转换时,会按照其内部的映射关系来进行处理。
上面只是一台客户端进行 NAT 转换的情形,但是现实生活中我们私有网络中不可能只有一台客户端进行通信,所以当私有网络中所有的客户端都需要上网,进行 NAT 转换的时候,是不是 NAT 路由器会为每一个客户端生成一个 IP 地址呢?如果全世界范围内的私有网络都这么转换的话,那么公有 IP 地址的数量势必会承受非常大的压力。
针对这种情况,提出了使用 IP 地址和端口号一起转换的方式(NAPT),如下图所示。

这个大致过程和上面 NAT 的转换模式相同,不一样的是,使用 NAPT 会把客户端 A 和客户端 B 的数据包源地址 192.168.1.6:80、192.168.1.7:80 转换为 12.34.56.78:80 和 12.34.56.78:90 ,然后再发送给目标服务器。在转换的过程中,NAT 路由器会生成转换表,通过转换表就可以正确地转换地址和端口的组合,使客户端 A 和客户端 B 与服务器之间进行通信。
转换表是在 NAT 路由器上自动生成的,当 TCP 开始建立连接的时候,就会生成对应的映射,断开连接时,会删除对应的映射。
什么是 NAT - PT
现在互联网情况是一部分 IPv4 的主机和 IPv6 的主机共存的情况,IPv6 作为 IPv4 的替代者,已经越来越多的主机选择升级到了 IPv6 协议,但是罗马不是一日建成的,也不可能全世界范围的计算机都在某几天停机进行升级,这是不现实的,而且很多服务是基于 IPv4 协议建立的,如果升级到 IPv6 不兼容的话,使用 IPv6 的优势也就无从谈起,所以为了解决这个问题,就产生了 NAT-PT 规范。
NAT-PT 是一种将 IPv6 首部转换为 IPv4 首部的一种技术,通过 NAT-PT ,IPv6 的主机能够和 IPv4 主机进行通信,同时某些 IPv4 的服务也能够让 IPv6 的主机使用。
注意这里的 IPv6 只能转换为 IPv4 ,不能反向转换,那么要实现双向通信,该如何做呢?
支持 NAT-PT 的路由器要 DNS-ALG 的支持来实现 IPv4 向 IPv6 的转换。
NAT-PT 机制定义了以下 3 种不同类型的操作:
静态 NAT - PT
静态 NAT - PT 模式主要是一对一映射的。IPv6 网络内的节点要访问的 IPv4 网络内都必须在 NAT-PT 设备中设置。每一个目的 IPv4 地址在 NAT-PT 设备中被映射为一个具有预定义 NAT-PT 前缀的 IPv6 地址。
动态 NAT - PT
动态模式也提供了一对一映射,只不过这种动态模式是有一个 IPv4 地址池的,池中的 IPv4 地址数量决定了并发IPv6 到 IPv4 转换的最大数目。
NAPT - PT
网络地址端口转换--协议转换模式提供多个有 NAT-PT 前缀的 IPv6 地址和一个源 IPv4 地址间的多对一动态映射。
NAT 的潜在问题
聊到现在,我们可以推断出,NAT(NAPT)其实最关键的也是路由器中的转换表,过度依赖转换表会造成下面这些问题
- NAT 无法从外部向内部服务器建立连接。
- 生成转换表存在一定的开销。
- NAT 路由一旦遇到异常情况需要重启,所有的 TCP 连接都会丢失。
- 即使做了灾备,TCP 连接还是会断开。
那么针对这些问题,该如何解决呢?
第一种是直接升级到 IPv6,因为在 IPv6 的环境中可用的 IP 地址的数量有了极大的扩展,现在看来,怎么造都没事儿。还有一种解决办法是一种叫做 NAT 穿越的技术。
NAT 的应用
NAT 主要可以实现以下几个功能:数据包伪装、负载均衡、端口转发和透明代理。
- 数据伪装:可以将内网数据包中的地址信息更改成统一的对外地址信息,不让内网主机直接暴露在因特网上,保证内网主机的安全。同时,该功能也常用来实现共享上网。例如,内网主机访问外网时,为了隐藏内网拓扑结构,使用全局地址替换私有地址。
- 负载均衡:目的地址转换 NAT 可以重定向一些服务器的连接到其他随机选定的服务器。
- 端口转发:当内网主机对外提供服务时,由于使用的是内部私有 IP 地址,外网无法直接访问。因此,需要在网关上进行端口转发,将特定服务的数据包转发给内网主机。
- 透明代理:例如自己架设的服务器空间不足,需要将某些链接指向存在另外一台服务器的空间;或者某台计算机上没有安装 IIS 服务,但是却想让网友访问该台计算机上的内容,这个时候利用 IIS 的 Web 站点重定向即可轻松的帮助我们搞定。
使用 NAT 的意义
NAT(NAPT)实际上是为了解决 IPv4 枯竭而开发的技术,不过,现在随着 IPv6 的开发,在 IPv6 中为了提高网络安全也在使用 NAT,在 IPv4 和 IPv6 的通信中经常使用 NAT-PT。然而在安全机制上 IPv4 也潜在着威胁,在配置和管理上也是一个挑战。如果要从根本上解决 IP 地址资源的问题,IPv6 才是最根本之路。
原文链接:NAT 协议???
如果对你有帮助,还希望读者朋友能够一键三连!
另外,我自己汇总了一本网络的 PDF ,现在分享给你

图文并茂详解 NAT 协议!的更多相关文章
- VMware虚拟网络连接模式详解(NAT,Bridged,Host-only)
序言 如果你使用VMware安装虚拟机,那么你必定会选择网络连接,那么vmware提供主要的3种网络连接方式,我们该如何抉择呢?他们有什么不同呢?这篇我们就做一个深入. 首先打开虚拟机设置里面的网络适 ...
- http协议报头详解HTTP协议结构
http协议 请求报文和响应报文都是由以下4部分组成 1.请求行 2.请求头 3.空行 4.消息主体 下图为http请求的报文结构 下图为http响应报文结构 请求行 格式为: Method Requ ...
- 虚拟机网络配置详解(NAT、桥接、Hostonly)
VirtualBox中有四种网络连接方式: NAT Bridged Adapter Internal Host-only Adapter VMWare中有三种,其实它跟VMWare的网络连接方式都是一 ...
- iOS 详解NSObject协议
协议就是一组接口的集合,遵守一个协议之后就拥有的该协议中所有方法的声明.NSObject这个类遵守了NSObject协议,并且实现了NSObject协议里的所有方法,所以NSObject类及其子类 ...
- 一:详解 HTTP 协议
本篇文章篇幅比较长,先来个思维导图预览一下. 一张图带你看完本篇文章 一.概述 1.计算机网络体系结构分层 计算机网络体系结构分层 2.TCP/IP 通信传输流 利用 TCP/IP 协议族进行网络通信 ...
- HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端
协议简介 协议,自然语言里面就是契约,也是双方或者多方经过协商达成的一致意见; 契约也即类似于合同,自然有甲方123...,乙方123...,哪些能做,哪些不能做; 通信协议,也即是双方通过网络通信必 ...
- 详解HTTP协议
一 什么是HTTP协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议.HTTP 是基于 TCP/ ...
- 虚拟机网络配置详解(NAT、桥接、Hostonly) z
http://www.cnblogs.com/beginmind/p/6379881.html VirtualBox中有四种网络连接方式: NAT Bridged Adapter Internal H ...
- rtp协议详解/rtcp协议详解
转自:http://www.cnblogs.com/li0803/archive/2010/11/20/1882792.html 1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应 ...
随机推荐
- Flowable实战(三)流程部署管理
一.流程定义的版本 当部署流程定义时,数据库中的流程定义会是这个样子: id key name version myProcess:1:676 myProcess My important pro ...
- 实习之bii--总体感受体验
在bii实习了一个暑假,感受收获都不少,记录一下. 首先当时面试时其实说的比较多的是sdn,结果来了以后主要在搞DNS,介绍一下所做的工作为何吧.bii名为北京下一代互联网工程中心,由于IPV6的逐渐 ...
- vue体验
1.创建工作区 2.点击添加文件 3.新建一个html文件,并输入!+tab 自动生成html结构 4.输入div#app,生成头部 <!DOCTYPE html> <html l ...
- 【Kafka】基于Windows环境的Kafka有关环境(scala+zookeeper+kafka+可视化工具)搭建、以及使用.NET环境开发的案例代码与演示
前言:基于Windows系统下的Kafka环境搭建:以及使用.NET 6环境进行开发简单的生产者与消费者的演示. 一.环境部署 Kafka是使用Java语言和Scala语言开发的,所以需要有对应的Ja ...
- 一种Django多租户解决方案
什么是多租户? 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性. 多租 ...
- golang中浮点型底层存储原理和decimal使用方法
var price float32 = 39.29 float64和float32类似,只是用于表示各部分的位数不同而已,其中:sign=1位,exponent=11位,fraction=52位,也就 ...
- AtCoder Beginner Contest 238 A - F 题解
AtCoder Beginner Contest 238 \(A - F\) 题解 A - Exponential or Quadratic 题意 判断 \(2^n > n^2\)是否成立? S ...
- 微信小程序之video组件与cover-view组件和cover-image组件灵活应用
前言:最近忙着赶项目,没时间更博:希望和大家一起学习一起进步. 本人遇到的坑,以及爬出坑的方法:在某个微信小程序项目中,有这样一个需求:在滑块swiper组件和swiper-item组件中嵌套vide ...
- NoSuchMethodError错误
发生原因: 一个项目中包含有相同名字,但内容不同的包 解决办法:删除其中暂时不用的包 后记:如果不知道哪一个包是多余的,直接用IDE查找:找到该类,然后将该包进行反编译,再次导入该项目,再找到该类,出 ...
- IIS部署.net core 的程序后,如何查看控制台的日志?
.net core 3.1 开发的web服务,本地开发的时候,双击运行 xxx.exe(.net core 3.1 发布后,文件夹里面有一个 .exe 文件,双击即可运行,会直接监听本地 xx端口测试 ...