文章目录

  • 前言
  • 一、NAT出现的背景
  • 二、NAT原理
  • 三、什么是NAPT (PAT)

前言

NAT(Network Address Translation,网络地址转换)

一、NAT出现的背景

首先,我们先了解一下地址转换功能出现的背景。所谓地址,就是用来识别每一台设备的标志,因此每台设备都应该有一个唯一不重复的地址,就好像网上买东西填的地址一样,有了这个地址快递员知道该把包裹送给谁了。网络也是一样,本来互联网中所有的设备都应该有自己的固定地址,而且最早也确实是这样做的。比如,公司内网需要接入互联网的时候,应该向地址管理机构申请 IP 地址,并将它们分配给公司里的每台设备。换句话说,那个时候没有内网和外网的区别,所有客户端都是直接连接接到互联网的。
       随着互联网的普及,可分配的地址用光了,导致后来的设备无法接入互联网。这将严重影响互联网的继续发展。解决问题的关键在于固定地址的分配方式。,假如有 A、B 两家公司,它们的内网是完全独立的。这种情况下,两家公司的内网之间不会有网络包流动,即使 A 公司的某台服务器和 B 公司的某台客户端具有相同的 IP 地址也没关系,因为它们之间不会进行通信。只要在每家公司自己的范围内,能够明确判断网络包的目的地就可以了,是否和其他公司的内网地址重复无关紧要,只要每个公司的网络是相互独立的,就不会出现问题。从而大幅节省了 IP 地址。当然,就算是内网,也不是随便分配地址的,因此需要设置一定的规则,规定某些地址是用于内网的,这些地址叫作私有地址,而原来的固定地址则叫作公有地址 。从而大幅节省了 IP 地址。
       但是当内网和互联网之间需要传输包的时候,问题就出现了,因为如果很多地方都出现相同的地址,包就无法正确传输了。于是,内网和互联网连接的时候,需要采用这样的结构,一部分是对互联网开放的设备(公网ip),另一部分是内部设备(私有ip)。内网中的设备不能和互联网直接收发网络包,而是通过一种特别的机制进行连接,这个机制就叫地址转换。该机制将内网设备的私有ip地址映射为公网ip地址,再将包发出去。


二、NAT原理

地址转换的基本原理是在转发网络包时对 IP 头部中的 IP 地址和端口号 进行改写。具体的过程我们来看一个实际的例子,假设现在要访问Web 服务器,看看包是如何传输的。首先,TCP 连接操作的第一个包被转发到互联网时,将发送方 IP 地址从私有地址改写成公有地址。这里使用的公有地址是地址转换设备 (一般为路由器) 的互联网接入端口的地址。与此同时,端口号也需要进行改写,地址转换设备会随机选择一个空闲的端口。然后,改写前的私有地址和端口号,以及改写后的公有地址和端口号,会作为一组相对应的记录保存在地址转换设备内部的一张表中。如下图:

公有ip和端口 私有ip和端口
100.0.0.1:1000 192.168.31.11:8888
100.0.0.1:1001 192.168.31.11:7000
100.0.0.1:1002 192.168.31.12:7000

改写发送方 IP 地址和端口号之后,包就被发往互联网,最终到达服务器,然后服务器会返回一个包。服务器返回的包的接收包是原始包的发送方,因此返回的包的接收方就是改写后的公有地址和端口号。这个公有地址其实是地址转换设备的地址,因此这个返回包就会到达地址转换设备。接下来,地址转换设备会从地址对应表中通过公有地址和端口号找到相对应的私有地址和端口号,并改写接收方信息,然后将包发给公司内网,这样包就能够到达原始的发送方了。在后面的包收发过程中,地址转换设备需要根据对应表查找私有地址和公有地址的对应关系,再改写地址和端口号之后进行转发。当数据收发结束,进入断开阶段,访问互联网的操作全部完成后,对应表中的记录就会被删除。通过这样的的机制,具有私有地址的设备就也可以访问互联网了。从互联网一端来看,实际的通信对象是地址转换设备(这里指的是路由器)。


三、什么是NAPT (PAT)

上面提到的NAT原理,从严格意义上来讲是NAPT(Network Address Port Translation),即网络地址端口转换。也有叫成PAT。早期的地址转换机制是只改写地址不改写端口号的。(即真正的NAT),用这种方法也可以让内网和互联网进行通信,而且这种方法更简单。但是,使用这种方法的前提是私有地址和公有地址必须一一对应,也就是说,有多少台设备要上互联网,就需要多少个公有地址。当然,访问动作结束后可以删除对应表中的记录,这时同一个公有地址可以分配给其他设备使用,因此只要让公有地址的数量等于同时访问互联网的设备数量就可以了。但是局域网内人数过千的话还是需要上百个公网ip。
        改写端口号可以解决这个问题。端口号有16 比特,总共可以分配出几万个端口 ,因此如果用公有地址加上端口的组合对应一个私有地址,一个公有地址就可以对应几万个私有地址,这种方法提高了公有地址的利用率。


网络地址转换——NAT、NAPT详解相关推荐

  1. NAT技术详解(网络地址转换)

    组织对不起,90年的事我瞒不住了--NAT(网络地址转换) NAT(Network Addresss Translation),网络地址转换,本质上是一种允许在互联网的不同地方重复使用相同的IP地址集 ...

  2. NAT、Napt(地址转换技术)详解

    NAT的由来 IPv4即网际网协议第4版--Internet Protocol Version 4的缩写.IPv4定义一个跨越异种网络互连的超级网,它为每个网际网的节点分配全球唯一IP地址.如果我们把 ...

  3. 思科路由器NAT配置详解(转)

    思科路由器NAT配置详解(转) 网络技术 2010-07-11 17:48:14 阅读104 评论0   字号:大中小 订阅 思科路由器NAT配置详解 一.NAT简介: NAT(Network Add ...

  4. 第四章.网络层:4.8虚拟专用网和网络地址转换NAT

    文章目录 4.8.1 虚拟专用网VPN 1. 本地地址与全球地址 2. RFC 1981指明的专用IP地址 3. 专用网 4. 虚拟专用网VPN 5. 虚拟专用网VPN的构建 6. 用隧道技术实现虚拟 ...

  5. 【计算机网络】湖科大微课堂笔记 p54-56 IPv4数据报的首部格式、网际控制报文协议ICMP、虚拟专用网VPN与网络地址转换NAT

    文章目录 IPv4数据报的首部格式 小结 一些例题 网际控制报文协议ICMP 小结 一些例题 虚拟专用网VPN与网络地址转换NAT 小结 IPv4数据报的首部格式 版本 首部长度.可选字段.填充字段 ...

  6. 网络层:虚拟专用网VPN和网络地址转换NAT

    1.网络层:虚拟专用网VPN和网络地址转换NAT 笔记来源: 湖科大教书匠:虚拟专用网VPN和网络地址转换NAT 声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考 1.1 虚拟专用网VPN 专用网和 ...

  7. 思科模拟器 --- 网络地址转换NAT配置

    学习目标:理解NAT网络地址转换的原理及功能.掌握静态NAT配置,实现局域网访问互联网 1.定义 ①网络地址转换NAT(Network Address Translation),被广泛应用于各种类型I ...

  8. 4.3.4 网络地址转换NAT

    4.3.4 网络地址转换NAT

  9. 如何配置网络地址转换(NAT)—Vecloud微云

    什么是 NAT? 网络地址转换(NAT)为IP地址保存设计. 这使得采用未注册IP地址的专用IP网络可以连接到Internet. NAT在路由器上运行,通常将两个网络连接在一起,并在数据包转发到另一个 ...

  10. 计算机网络之网络层:5、DHCP协议、ICMP协议、网络地址转换NAT

    网络层:5.DHCP协议.ICMP协议.网络地址转换NAT TCP/IP协议栈: IP获取方式: NAT网络地址转换: DHCP工作流程: ICMP协议: ICMP报文格式: ICMP报文类型: IC ...

最新文章

  1. 机器学习:多分类的logistic回归
  2. 华科与浙大计算机学院,计算机最强14所高校排名,清华第2,浙大第4,南大第6,华科第10...
  3. 2006世界杯赛程表,不能错过:)
  4. linux 系统迁移到固态硬盘,把Debian GNU/Linux迁移到SSD上
  5. ActiveReports 报表控件官方中文新手教程 (1)-安装、激活以及产品资源
  6. linux 系统让服务后台运行
  7. 消息队列(MQ):ZeroMQ 中间件设计【译文】
  8. Java多线程 ReentrantLock、Condition 实现生产者、消费者协作模式
  9. R语言绘制流程图(二)
  10. Scala学习02——Scala类和对象
  11. 理解OpenShift(6):集中式日志处理
  12. 91卫图助手-使用及下载
  13. Android 一款十分简洁、优雅的日记APP
  14. 机器学习——决策树算法之代码+数学实例解析
  15. iOS基础:【屏幕成像与卡顿】屏幕撕裂 Screen Tearing、 掉帧 Jank、三缓冲 Triple Buffering
  16. 《高级语言程序设计》习题集
  17. 天津地铁行业建设现状与运营状况分析报告2022版
  18. 45岁,拿到华为20级架构师offer要去吗
  19. Deeplink跳转提示应用下架
  20. win32 c语言创建线程,【原创】win32线程及线程内核对象

热门文章

  1. 还记得面试时被算法支配的恐惧吗?
  2. CoSTA:用于空间转录组分析的无监督卷积神经网络学习方法
  3. 程序亦非猿 公众号开启投稿
  4. xcode江湖录-第04章 风水宝地--界面生成器
  5. 怎样设计一个好的数据库
  6. 认识对于java生活和工作的应该是怎么样的
  7. 闪耀暖暖服务器维护时间,闪耀暖暖4月22日版本维护更新有什么内容_4月22日版本维护更新内容介绍_3DM手游...
  8. div onload事件
  9. 华为mate40和mate40pro的区别?哪个好?
  10. XML代码读取,插入数据