zoukankan      html  css  js  c++  java
  • 网络层——NAT

    禁止码迷,布布扣,豌豆代理,码农教程,爱码网等第三方爬虫网站爬取!

    ISP 与子网

    现在考虑实际应用中可能出现的情景,当某一个 SOHO (小型办公室和家庭办公室)要安装一个 LAN 以互联多台机器时,因为每个使用 IP 协议的设备都需要一个 IP 地址,因此需要 ISP 分配一组地址提供 SOHO 所有 IP 设备来使用。当子网被扩大的时候,该 SOHO 就需要分配一块更大的地址,但是 SOHO 当前的地址范围已经是 ISP 分配过的连续地址该怎么办?
    基于这种情景,我们理想中的解决方案应该达到什么样的效果呢?当需要 IP 地址时,从 ISP 需要申请一个 IP 地址就可以工作;对于本地网络,本地网络的 IP 地址发生变化无需对外界进行通告;变更 ISP 时,不需要修改内部网络设备的 IP 地址。最后为了保证安全性,内部网络设备对于外界网络应该是不可见的,也就是无法直接寻址。
    就是这样 ISP 和子网之间说不清道不白的关系,提出了一种解决方案——网络地址转换,这种简单的方法在上述场合中运用日渐广泛。

    NAT 原理

    NAT 路由器

    家庭网络可以是都由私有地址而组成的专用网络,这种地址进对网络中的设备有意义的网络,可以称之为具有专用地址的地域。由于现在存在着数十万家庭网络,有很多的设备都在使用私有地址,而此时当全球因特网进行收发分组时,私有地址的编址问题应该如何解决?NAT 技术就可以化解这个难题,接下来我们来谈一下 NAT 技术原理。
    装有 NAT 软件的路由器叫做 NAT 路由器,NAT 路由器具有一个接口,连接一个具有相同网络前缀的网络。NAT 能够使得路由器对于外界而言不像是一个路由器,而是使得 NAT 路由器对外界的行为就像是一个具有单一 IP 地址的单一设备,从本质上讲 NAT 使得路由器对外界隐藏了家庭网络的细节。也就是说对于外界而言,发给一个家庭网络的所有数据报都会被 NAT 路由器接收进来。

    NAT 转换表

    接下来考虑,从广域网到达 NAT 路由器的所有数据报的目的 IP 地址,应该都是 NAT 路由器的 IP 地址,NAT 路由器要如何得知某个分组应该发送给那个内部主机呢?解决方案就是 NAT 转换表,在表中包含了端口号和对应的 IP 地址。
    NAT 转换表在一次工作中的变化为:内部主机 A 用本地地址 IPa 和互联网上主机 B 通信所发送的数据报必须经过 NAT 路由器。NAT 路由器将数据报的源地址 IPa 转换成全球地址 IPg,并把转换结果记录到 NAT 地址转换表中,目的地址 IPb 保持不变,然后发送到互联网。NAT 路由器收到主机 B 发回的数据报时,知道数据报中的源地址是 IPb 而目的地址是 IPg。根据 NAT 转换表,NAT 路由器将目的地址 IPG 转换为 IPA,转发给最终的内部主机 A。 也就是说在一次内部主机与外部主机通信时,在 NAT 路由器上发生了两次地址转换:离开专用网时,替换源地址,将内部地址替换为全球地址;进入专用网时,替换目的地址,将全球地址替换为内部地址

    由此可见,通过 NAT 路由器的通信必须由专用网络内的主机发起,否则 NAT 路由器无法完成转换工作。专用网络内部的主机也不能充当服务器,因为互联网上的客户无法请求专用网内的服务器提供服务。

    NAPT

    为了更加有效地利用 NAT 路由器上的全球 IP 地址,现在常用的 NAT 转换表把运输层的端口号也利用上。这样就可以使多个拥有本地地址的主机,共用一个 NAT 路由器上的全球 IP 地址,因而可以同时和互联网上的不同主机进行通信。使用端口号的 NAT 叫做网络地址与端口号转换 NAPT,不过这与 NAT 的原理是一样的,并没有本质上的区别。
    NAPT 把专用网内不同的源 IP 地址,都转换为同样的全球 IP 地址。但对源主机所采用的 TCP 端口号(不管相同或不同),则转换为不同的新的端口号。因此当 NAPT 路由器收到从互联网发来的应答时,就可以从 IP 数据报的数据部分找出运输层的端口号,然后根据不同的目的端口号,从 NAPT 转换表中找到正确的目的主机。

    NAT 引发的争议

    NAT 在得到广泛应用的同时,也存在着很多争议,主要包括以下 4 点:

    1. 路由器应该仅针对网络层,仅负责完成网络层的功能,转发网络层的分组;
    2. NAT 违背了端到端通信的原则,存在 NAT 路由器作为中继;
    3. 端口号应该是用于进程寻址,而不是应用于主机寻址;
    4. IPv4 地址不足的问题完全可以使用 IPv6 来解决。

    与 DHCP 协议的关系

    当我们讨论完 NAT 技术,现在我们回到一开头想一想,家庭网络计算机从哪儿得到地址?NAT 路由器是如何得到单一的全球地址呢?答案就是我们之前讨论过的 DHCP 协议,路由器将从 ISP 的 DHCP 服务器得到它的地址,并且路由器运行一个 DHCP 服务器,为位于 NAT-DHCP 路由器控制的家庭网络地址空间中的计算机提供地址。

    参考资料

    《计算机网络(第七版)》 谢希仁 著,电子工业出版社
    《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社

  • 相关阅读:
    python_控制台输出带颜色的文字方法
    Django 知识总结(一)
    C# 实现俄罗斯方块
    一起学SpringMVC之Request方式
    一起学SpringMVC之RequestMapping详解
    一起学SpringMVC之Json
    一起学SpringMVC之注解
    一起学SpringMVC之入门篇
    一起学Android之Xml与Json解析
    一起学Android之AsyncTask
  • 原文地址:https://www.cnblogs.com/linfangnan/p/13247043.html
Copyright © 2011-2022 走看看