目录

一、前言

二、网络地址转换(NAT)

2.1 NAT如何解决IP冲突

2.2 SNAT / DNAT

2.3 SNAT工作原理

2.3.1 案例1(NAT)

2.3.2 案例2(NAPT)

2.4 DNAT

三、总结


一、前言

本人在学习Bridge/Router的过程中,发现在计算机网络中,数据报如何发送是根据目标IP地址进行路由的。若同一个网路中出现相同的IP,则会造成IP冲突,从而导致ARP表出现混乱,数据报发送到哪台主机上就会变成不确定性行为。

但我们会发现,我们日常使用的主机的IP地址都是类似于192.168.1.10这样的IP地址,若按照文章说所说这些计算机都以家庭网络中的IP地址将数据报发送到互联网上,那么互联网上就会出现无数个相同的IP地址,这必然会造成混乱。本章节旨在向大家说明家庭网络和因特网之间的转换关系。

二、网络地址转换(NAT)

2.1 NAT如何解决IP冲突

想要解决上述问题,我们只需要让数据报从路由器发送出去的时候,变成不同的IP地址即可,但IPv4的公网地址(全球唯一)是有限的,给每台主机分配一个公网IP地址是不切实际的。

因此,提出了NAT转换技术,NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机。NAT技术将IP地址大致分为了私有IP和公有IP。其中,我们大部分人所接触到的都是私有IP地址,私有IP地址范围如下表所示。

A类范围 10.0.0.0 - 10.255.255.255
B类范围 172.16.0.0 - 172.31.255.255
C类范围 192.168.0.0 - 192.168.255.255

2.2 SNAT / DNAT

NAT技术本质是将IP数据报中的IP地址转换为另一个IP地址的过程,实际上就是建立一张NAT映射表。它有两种模式,分为SNAT和DNAT模式。

SNAT(Source Network Address Translation):源网络地址转换,内部地址要访问公网上的服务时,内部地址会主动发起连接,将内部地址转换为公网IP。

DNAT(Destination Network Address Translation):目标地址转换,内部对外提供服务时,外部主动发起连接,路由器或防火墙的网络收到这个连接后,将连接转换到内部,在内部有做地址转换,主要用于内部服务对外发布。

2.3 SNAT工作原理

2.3.1 案例1(NAT)

我们假设路由器的WAN口接入的IP地址为公网IP地址(221.8.14.91),内网计算机IP地址为192.168.1.10,网关地址为192.168.1.1,我们要访问的远端服务的IP地址为36.152.44.96。具体配置如下图所示。

若内网中的主机(192.168.1.10)给因特网中使用全球IP地址的服务器(36.152.44.96)发送数据报,其过程如下。

step1: 主机将数据报发送至路由器,数据报的的源地址为主机的私有IP地址,目的地址为因特网上服务器的全球地址,如下表所示。

源地址 192.168.1.10
目的地址 36.152.44.96

step2: 路由器收到数据报后,执行源地址转换,将WAN口的公网IP地址修改为源IP地址,并将源地址与私有地址的关系记录在NAT转换表中。

源地址 221.8.14.91
目的地址 36.152.44.96
NAT转换表
内网地址 外网地址
192.168.1.10 221.8.14.91
...... ......

step3: 因特网上的服务器收到IP数据报后,给主机返回相应数据报,将请求报文的源IP地址作为目标IP地址,自身的IP地址作为源IP地址,并将数据报发送出去,如下表所示。

源地址 36.152.44.96
目的地址 221.8.14.91

step4: 响应数据报发送到路由器后,路由器再次查询NAT转换表,寻找到对应的私有地址(192.168.1.10),再将数据报的目标IP地址修改为192.168.1.10,再将其发送给相应主机。

源地址 36.152.44.96
目的地址 192.168.1.10

此时,通信完成。

案例1小结:

案例中为一对一通信,若内网中两台及以上的主机都使用私有地址给因特网上同一台服务器发送数据报时,数据报在发送出去的时候不会出现问题,但响应数据报返回时却会出现问题。响应数据报的目标IP地址都是路由器WAN口的公网IP地址,无法区分该响应数据报属于哪一台主机,因此只关注IP地址是远远不够的,还需要添加其他的标记。

2.3.2 案例2(NAPT)

由于绝大多数网络应用都是使用TCP/UDP传输数据的,因此可以利用传输层的端口号和IP地址一起进行转换。这样,一个全球IP地址就可以使多个本地主机同时和因特网上的主机进行通信,这种方法称为网络地址与端口号转换(NAPT)。

我们假设路由器的WAN口接入的IP地址为公网IP地址(221.8.14.91),内网计算机A的IP地址为192.168.1.10,计算机B的IP地址为192.168.1.11,网关地址为192.168.1.1,我们要访问的远端服务的IP地址为36.152.44.96。具体配置如下图所示。

案例中,若计算机A和计算机B同时访问远程服务器,则采用NAPT技术进行转换,此时SNAT不仅仅修改IP地址,而是结合端口号一起修改。假设主机A和主机B访问远程服务器时端口号均为12345,则两台主机同时访问服务器的流程如下。

step1: 主机A和B将数据报发送至路由器,数据报的的源地址为主机的私有IP地址,目的地址为因特网上服务器的全球地址。数据报的源地址和目标地址如下所示。

主机A的数据报 主机B的数据报
源地址:端口号 192.168.1.10:12345 192.168.1.11:12345
目的地址:端口号 36.152.44.96:8080 36.152.44.96:8080

step2: 路由器收到数据报后,执行源地址转换,将WAN口的公网IP地址修改为源IP地址,源端口号根据NAPT路由器动态分配(此处为40001和40002),并将源地址与私有地址的关系记录在NAT转换表中。

主机A的数据报 主机B的数据报
源地址:端口号 221.8.14.91:40001 221.8.14.91:40002
目的地址:端口号 36.152.44.96:8080 36.152.44.96:8080

NAPT转换表

内网地址:端口号 外网地址:端口号
192.168.1.10:12345 221.8.14.91:40001
192.168.1.11:12345 221.8.14.91:40002
...... ......

step3: 因特网上的服务器收到IP数据报后,给主机返回相应数据报,将请求报文的源IP地址作为目标IP地址,自身的IP地址作为源IP地址,并将数据报发送出去。

主机A的数据报 主机B的数据报
源地址:端口号 36.152.44.96:8080 36.152.44.96:8080
目的地址:端口号 221.8.14.91:40001 221.8.14.91:40002

step4: 响应数据报发送到路由器后,路由器再次查询NAT转换表,寻找到对应的私有地址,再将数据报的目标IP地址修改为内网私有地址,再将其发送给相应主机。

主机A的数据报 主机B的数据报
源地址:端口号 221.8.14.91:40001 221.8.14.91:40002
目的地址:端口号 192.168.1.10:12345 192.168.1.11:12345

此时,通信完成。

2.4 DNAT

如果我们的内网计算机对外提供服务,公网上发过来的请求不能直接到达内网计算机,我们需要DNAT技术帮忙转发请求。其大致过程如下。

step1:路由器配置DNAT,若访问公网地址221.8.14.91的8080端口则自动转到计算机A。

221.8.14.91:8080  ->  192.168.1.10:80

step2: 访问数据报从WAN口进入路由器后,路由器执行DNAT转到相应主机A,修改目标地址为192.168.1.10,修改目标端口为80,从而把数据报转发给计算机A。

三、总结

NAT(NAPT)的存在使得IPv4虽然匮乏,但仍然能够使得计算机网络正常运行,同时NAT(NAPT)技术对外屏蔽了内网主机的网络地址,为内网的主机提供了一定的安全保护。

NAT / NAPT相关推荐

  1. 计算机网络 | IP协议相关技术与网络总结 :DNS、ICMP、DHCP、NAT/NAPT、通信流程

    IP协议相关技术与网络总结 DNS DNS与域名 域名服务器 域名的解析流程 ICMP ping NAT/NAPT NAT NAPT NAT的缺陷 代理服务 DHCP 通信流程 浏览器中输入url后, ...

  2. NAT/NAPT地址转换(内外网通信)技术详解【华为eNSP】

    一.前言 我们之前已经解决了,DHCP,VRRP,MSTP,OSPF的需求了,我们来解决一下内外网通信的需求: 11.思考当内网用户需要访问互联网时如何实现 先看一下我们现在的拓扑图: 现在的需求就是 ...

  3. IP协议与NAT/NAPT技术

    文章目录 IP协议 一.什么是IP协议 1.IPv4协议报文格式 关于分片 2.IP地址 3.子网划分与CIDR 4.特殊的IP地址 5.公网IP和私网IP 6.IP地址的分配(DHCP) 二.NAT ...

  4. linux nat源码分析,Linux下NAT/NAPT规则源码分析

    前面有一篇文章分析了为什么在PREROUTING做DNAT对本地连接不起作用?本文再紧接着上文,深入分析一下NAT/NAPT的规则. 事情的起因要从上的那篇的文章说起,因为我的本科生毕业设计也是做P2 ...

  5. 关于NAT/NAPT的原理,牢记这几点!

    各位朋友,大家晚上好,今天来给大家讲解一下NAT它解决了什么问题各位朋友,大家晚上好,今天来给大家讲解一下NAT它解决了什么问题还的呢,小老虎相信大家对这个工具应该是再也熟悉不过的了吧,因为咱们现在都 ...

  6. H3C的easy ip/basic nat/napt三种NAT转换的区别与配置实例

    文章目录 前言 一.NAT转换的三种方式 二.拓扑图及说明 三.NAT三种转换方式的配置示例 1.Easy ip配置 2.Basic nat配置,acl配置同easy ip. 3.Napt配置,acl ...

  7. NAT 网络地址转换技术(一)NAT原理介绍:静态NAT、动态NAT、NAPT、Easy IP、NAT ALG、NAT服务器、双向NAT技术

    文章目录 出现原因 基本概念 NAT技术基本原理 源NAT技术 静态NAT 动态NAT NAPT Easy IP NAT ALG NAT服务器 双向NAT技术 域间双向NAT(NAT Server+源 ...

  8. NAT和NAPT 技术

    一.什么是NAT NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术.除了转换IP地址,还出现了可以转换TCP\UD ...

  9. 解决网络通信中外网和内网之间的通信问题(NAT转换)

    本文原址 http://www.cnblogs.com/lidabo/p/3828846.html 在网络编码中会发现程序在局域网中是可以适用的,但是在外网与内网之间和内网与内网之间就不可行. 问题就 ...

最新文章

  1. 置顶带滚动效果_高端大气的滚动条图表,你学会了还怕老板们不喜欢,不升职吗?...
  2. 编写纳新网站后端的相关知识总结
  3. 枚举实现单例singleton
  4. [react-router] react的路由和普通路由有什么区别?
  5. DevExpress v15.1:CodeRush控件功能增强
  6. java正则表达 替换_java正则表达式替换
  7. excel求回归直线方程的公式_求回归直线方程的三种方法
  8. 分享一个超厉害的网站,几乎解决一切command not found问题
  9. 大唐移动骨干集体出走 TD人才考验大唐
  10. 大神之光照耀着我 - 我的成长之路 - 起点
  11. c语言程序设计年份,C语言程序设计 输出任意年份的日历
  12. Java将List对象导入Excel文件
  13. 有80%的疾病都是由于不良生活习惯所导致的,常见8大不良习惯,既伤身又伤神
  14. C语言文件输入输出函数总结
  15. python多态和鸭子类型
  16. 计算机应用基础第三版175页答案,计算机应用基础试题(附答案).doc
  17. IntelliJ IDEA 2018版本操作总结(长期更新)
  18. 服务器巡检都做什么工作,巡检的手段是什么?
  19. wordpress获取某个分类目录下文章数目的五种方法
  20. win98系统只能进安全模式的解决方法

热门文章

  1. python rgb2gray_python-rgb2gray不起作用,创建彩虹图像
  2. 【AI处理器】TDA4VE88TGAALZRQ1、TDA4VL21HGAALZRQ1 Automotive 智能视觉摄像头应用
  3. 全文检索:sphinx elasticsearch xunsearch 比较
  4. 健身健美增大肌肉块的14大秘诀
  5. 如何用常见电磁阀实现气泵抽排气切换回路
  6. IOS微信跳一跳调试
  7. 强烈批判某些无耻的人
  8. (一)Nacos注册中心集群环境搭建
  9. 这几天买火车票的感想
  10. PHY芯片lan8720调试笔记