协议森林14 逆袭 (CIDR与NAT)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。

 

IPv4由于最初的设计原因,长度只有32位,所以只提供了大约40亿个地址。这造成了IPv4地址的耗尽危机。随后,IPv6被设计出来,并可以提供足够多的IP地址。但是IPv4与IPv6并不兼容,IPv4向IPv6的迁移并不容易。一些技术,比如说这里要说的CIDR和NAT,相继推广。这些技术可以缓解IPv4的稀缺状态,成就了IPv4一时的逆袭。

 

CIDR

CIDR(Classless Inter Domain Routing)改进了传统的IPv4地址分类。传统的IP分类将IP地址直接对应为默认的分类,从而将Internet分割为网络。CIDR在路由表中增加了子网掩码(subnet masking),从而可以更细分网络。利用CIDR,我们可以灵活的将某个范围的IP地址分配给某个网络。

1) IP地址分类

在IP接力赛中,我提到,IP地址可以分为如下几类:

IP class    From          To                 Subnet Mask

A           1.0.0.0       126.255.255.255    255.0.0.0

B           128.0.0.0     191.255.255.255    255.255.0.0

C           192.0.0.0     223.255.255.255    255.255.255.0

这是最初的IPv4地址分类设计。一个IPv4地址总共有32位,可以分为网络(network)主机(host)两部分。子网掩码(subnet mask)是用于表示哪些位代表了网络部分。比如如下subnet mask 255.0.0.0的二进制表示为:

11111111 00000000 00000000 00000000

它的前八位为1,所以表示IP地址的前八位为网络部分。而后面的24位代指该网络的各个主机。一个A类网络可以有224台主机,也就是16777216。由于IPv4地址已经分好了类,所以当我们拿到一个IP地址,我们就可以通过上面查到它的子网掩码。(B类,216; C类,28)

 

2) 传统路由表

IP分类的方便了IP包的接力。IP包到达某个路由器后,会根据该路由器的路由表(routing table),来决定接力的下一站。一个传统的路由表看起来是这样的:

Destination        Gateway             Iface

199.165.145.0      0.0.0.0             eth0

199.165.146.0      0.0.0.0             eth1

0.0.0.0            199.165.146.8       eth1

该路由表代表的网络拓扑如下:

 

由于IP分类,我们不需要记录subnet mask。当我们要前往199.165.146.17时,我们已经知道这台主机位于一个C类地址,所以它的子网掩码是255.255.255.0,也就是说199.165.146代表了网络,17代表了主机。

 

3) CIDR路由表

然而,由于默认分类,造成了网络只能按照A、B、C的方式存在。假设一个网络(比如MIT的网络)分配了一个A类地址,那么该网络将容许16777216个主机。如果该网络无法用完这些IP地址,这些IP地址将无法被其他网络使用。再比如上面的网络,199.165.145必须作为一个整个的网络存在。如果我们只有10台主机,那么将会有200多个IP地址被浪费。CIDR的本质是在路由表中加入子网掩码,并根据该列信息对网络进行分割,而不是根据默认的A,B,C进行分割。比如:

Destination        Gateway             Genmask             Iface

199.165.145.254    0.0.0.0             255.255.255.254     eth2

199.165.145.0      0.0.0.0             255.255.255.0       eth0

199.165.146.0      0.0.0.0             255.255.255.0       eth1

0.0.0.0            199.165.146.8       0.0.0.0             eth1

 

根据路由表的第一条记录,

199.165.145.254 (IP address) : 11000111 10100101 10010001 11111110

255.255.255.254 (subnet mask): 11111111 11111111 11111111 11111110 (31个1,1个0)

 

通过子网掩码可以知道,前31位表示网络,最后一位表示主机。子网掩码总是有连续多个1组成,比如上面的31个1。所以也可记为199.165.145.254/31,来同时表示IP地址和子网掩码。

路由器将原来的199.165.145网络中的一部分分割出来。这一网络可以容纳两台电脑,也就是199.165.145.254199.165.145.255。这个网络对应网卡是eth2。当有IP包通向这两个IP地址时,会前往eth2,而不是eth0。

 

网络拓扑如下:

 

利用CIDR,我们可以将IP地址根据需要进行分割,从而不浪费IP地址。

 

NAT

CIDR虽然可以更加节约IP地址,但它并不能创造新的IP地址。IP地址的耗尽危机并不能因此得到解决。我们来看IPv4的第二袭,NAT(Network Address Translation)。

 

理论上,每个IP地址代表了Internet上的一个设备。但有一些IP地址被保留,用于一些特殊用途。下面三段IP地址被保留用作私有IP地址:

From          To            

10.0.0.0      10.255.255.255

172.16.0.0    172.31.255.255

192.168.0.0   192.168.255.255

私有IP地址只用于局域网内部。理论上,我们不应该在互联网上看到来自或者发往私有IP地址的IP包。与私有IP地址对应的是全球IP地址(global IP address)。

 

NAT是为私有网络(private network)服务的。该网络中的主机使用私有IP地址。当私有网络内部主机和外部Internet通信时,网关(gateway)路由器负责将私有IP地址转换为全球IP地址,这个地址转换过程就是Network Address Translation。网关路由器的NAT功能。最极端情况下,我们可以只分配一个全球IP地址给网关路由器,而私有网络中的设备都使用私有IP地址。由于私有IP地址可以在不同私有网络中重复使用,所以就大大减小了设备对IP地址的需求。

 

1) 基础NAT

NAT的一种为基础NAT,也成为一对一(one-to-one)NAT。在基础NAT下,网关路由器一一转换一个外部IP地址和一个私有IP地址。网关路由器保存有IP的NAT对应关系,比如:

上面网络中,当有IP包要前往199.165.145.1时,网关路由器会将目的地改写为10.0.0.1,并接力给私有网络中的10.0.0.1的电脑。同样,当10.0.0.1的电脑向Internet发送IP包时,它的发送地为10.0.0.1。在到达网关路由器时,会将发送地更改为199.165.145.1。此外,IP头部的checksum,以及更高层协议(比如UDP和TCP)中的校验IP的checksum也会更改。

基础NAT尽管是一对一转换IP地址,它还是可以减小内部网络对IP地址的需求。通常来说,一个局域网中只有少数的设备处于开机状态,并不需要给每个设备对应一个全球IP地址。NAT可以动态的管理全球IP地址,并将全球IP地址对应到开机设备,从而减小内部网络对IP地址的需求。

 

2) NAPT

NAT还有一种,被成为NAPT (Network Address and Port Translation)。在基础NAT中,高层协议的端口号并不会改动。NAPT下,IP地址和端口号可能同时改动。

我们在UDP和TCP中提到端口(port)的概念。在建立UDP或者TCP通信时,我们实际上是用IP:Port来代表通信的一端(正如打电话时主机:分机号一样)。NAPT就是在网关路由器处建立两个通信通道,一个通往内部网络,一个通往外部网络,然后将网关处的通道端口连接,从而让内部和外部通信。比如:

我们看到,通往IP 199.165.145.1建立了三个端口的连接:8888, 8889和8080。它们分别在NAPT处改为通往10.0.0.1:80, 10.0.0.1:8080和10.0.0.3:6000。NAPT记录有外部IP:端口和内部IP:端口的一一对应关系。在IP包经过时,网关路由器会更改IP地址,端口号以及相关的checksum。

利用NAPT我们可以使用一个(或者多个但少量的)外部IP和大量的端口号,来对应多个内部IP以及相应的端口号,从而大大减小了对全球IP地址的需求。

NAPT:多重影分身术

 

无论是基础NAT还是NAPT,它们的设置都比较复杂,并且从本质上违背了互联网最初的设计理念。但由于IPv4的使用惯性,NAT还是被广泛推广。由于NAT所处的网关服务器是理想的设置防火墙的位置,NAT还往往和防火墙共同建设,以提高私有网络的安全性。

 

总结

即使是CIDR和NAT广泛使用,IPv4还是在不可避免的耗尽。IPv6正在加紧部署。但上述的两种技术,CIDR和NAT在IPv6中同样被采用,所以了解它们依然是有意义的。

 

欢迎继续阅读“协议森林”系列

 

转载于:https://www.cnblogs.com/vamei/archive/2013/01/24/2798226.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

认知神经科学:美陆军高度关注的人工智能与生物科技的交叉学科领域

来源:天大神经工程近年来,随着“第三次抵消战略”的深入推进,美军重点部署人工智能、生物科技等前沿技术领域发展,寻求获取新的领先优势。作为人工智能与生物科技的交叉学科领域,认知神经科学具有颠覆未来作战样式的巨…

Android之自定义属性

安卓自定义属性主要有3个步骤 在values文件夹新建attrs.xml文件中声明属性&#xff0c;包括属性名和格式&#xff0c;format常用属性有string ,integer,reference等 <?xml version"1.0" encoding"utf-8"?> <resources><!-- 声明属性集…

log4j的配置方法

一、 介绍 Log4j是Apache的一个开放源代码项目&#xff0c;通过使用Log4j&#xff0c;我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等&#xff1b;我们也可以控制每一条日志的输出格式&#xff1b;通…

中国智能制造发展趋势!

来源&#xff1a;中国电子信息产业发展研究院赛迪顾问认为&#xff0c;我国智能制造发展有三个趋势&#xff0c;即企业向系统方案解决供应商转型&#xff0c;生产更加柔性化、定制化&#xff0c;“互联网”促进价值链向价值网转变。一、智能制造装备企业逐步向系统方案解决供应…

Android开发中目前流行控件和知识点总结

1、SlidingMenu 滑动菜单 应用案例&#xff1a;Facebook 、 Path 2.0 、人人、网易新闻 下载地址&#xff1a; https://github.com/jfeinstein10/SlidingMenu 2、PullToRefresh 下拉刷新 应用案例&#xff1a;新浪微博 等等 &#xff0c;这个很长用哦&#xff01; 下载地址&…

李德毅:“反用驾驶脑”测认知能力,谁说酒驾一定违规?

来源&#xff1a;德先生摘要&#xff1a;从2016年阿尔法狗成功挑战人类智慧的这场世纪大战开始&#xff0c;“人工智能”便引发了全世界的关注。从2016年阿尔法狗成功挑战人类智慧的这场世纪大战开始&#xff0c;“人工智能”便引发了全世界的关注。为了让中国在人工智能这场“…

谷歌无人车十年记:理想背后的骨感现实 | 厚势汽车

来源&#xff1a;The Information编译&#xff1a;厚势摘要&#xff1a;即使是近 10 年后&#xff0c;Waymo 仍远没有实现真正的 L4&#xff0c;即使是在相对简单的郊区环境下。「全自动驾驶的汽车来了&#xff01;」去年 11 月&#xff0c;Waymo 搞了一个大新闻。公司宣布自己…

自定义控件之瀑布流与水波纹实现

本文主要讲述了利用android自定义控件实现瀑布流与水波纹效果 首先为实现效果&#xff0c;应了解touch事件在android中的传递机制 在执行touch事件时 首先执行dispatchTouchEvent方法&#xff0c;执行事件分发。 再执行onInterceptTouchEvent方法&#xff0c;判断是否中断事件…

医学信息学相关术语、缩语及专业名词

医学信息学相关术语、缩语及专业名词 很棒哦&#xff0c;分享了&#xff0c;需要的可以去瞅瞅http://www.med-informatics.cn/MedInfo_gloss/medinfo_gloss_p1.htm如果你到它的完整上再逛逛&#xff0c;发觉还有很多好资源&#xff0c;譬如&#xff1a;http://www.med-informat…

神经网络并不是尚方宝剑,我们需要正视深度 NLP 模型的泛化问题

来源&#xff1a;AI 科技评论前段时间的文章《顶会见闻系列&#xff1a;ACL 2018&#xff0c;在更具挑战的环境下理解数据表征及方法评价》中&#xff0c;我们介绍了 ACL 大会上展现出的 NLP 领域的最新研究风向和值得关注的新进展。从这些新动向上我们似乎应该对深度学习 NLP …

信息技术智库丨月度大考试

【未来的你&#xff0c;会感谢今天努力的你】每日两题&#xff0c;一难一易&#xff0c;每天进步一点点&#xff0c;可能会直接导致一场面试的成功&#xff0c;或工作的轻松搞定&#xff0c;从而升职加薪迎娶白富美&#xff0c;加油小伙伴&#xff01; &#x1f345;举办场地&a…

智能交通大数据及云应用平台解决方案

来源&#xff1a;网络大数据摘要&#xff1a;随着日益增长的交通“大数据”&#xff0c;给交通管理创新带来的新挑战&#xff0c;以及对交通管理工作提出的新要求&#xff0c;交通信息化建设必然步入云计算智慧应用阶段&#xff0c;利用云计算破解当前诸多交通瓶颈问题。什么是…

106项人工智能创新项目名单公布,唱响“智能化”主旋律

来源&#xff1a;专知摘要&#xff1a;9月5日&#xff0c;工信部官网公示了2018年人工智能与实体经济深度融合创新项目名单。9月5日&#xff0c;工信部官网公示了2018年人工智能与实体经济深度融合创新项目名单。据了解&#xff0c;2018年人工智能与实体经济深度融合创新项目名…

利用TabWidget实现底部菜单

TabWidget类似于通话记录的界面&#xff0c;通过切换多个标签从而显示出多个不同内容&#xff0c;能够展示内容丰富的页面信息&#xff0c;而且彼此之间不会干扰&#xff0c;有利于展示。下面&#xff0c;通过一个例子来学习用法 首先用一个类来继承TabActivity 在开发之前&a…

信通院2018人工智能发展白皮书技术篇重磅发布

来源&#xff1a;网路大数据9月6日&#xff0c;2018中国人工智能峰会(CAIS2018)在南京国际博览会议中心召开。斯坦福客座教授吴恩达以Landng.ai创始人、CEO的身份出席了峰会&#xff0c;并在主论坛上做了题为《人工智能赋能新时代》的主题演讲。除了各路大咖的精彩演讲之外&…

量子计算赛道上的巨头拉锯战

来源&#xff1a;网易智能据国外媒体报道&#xff0c;长期以来量子计算机一直被吹捧为功能强大得令人难以置信的机器。相比于世界上现有的计算机&#xff0c;量子计算机能够以更快的速度解决极其复杂的计算问题。但目前还没有就开发量子计算机的最佳方式达成一致。最终谁将赢得…

信通院AI白皮书:硬核干货一文打尽,从技术流派到应用趋势【附下载】

来源&#xff1a;智东西摘要&#xff1a;从产业发展的角度&#xff0c;分析AI技术现状、问题以及趋势&#xff0c;盘点智能语音、语义理解、计算机视觉等相关应用。自2016年AlphaGo击败李世石之后&#xff0c;人工智能&#xff08;AI&#xff09;这个再度翻红的科技热词已经在争…

正则学习笔记

用途 字符匹配 语法 常用元字符 []    区间范围框 枚举值  [a-z0-9A-Z_] |    分枝条件或 \    特殊转义符&#xff08;取消转义&#xff09; \W [^A-Za-z0-9_] [\r\n] 换行符匹配 [\u4e00-\u9fa5] 汉字 [\s\S] 任意字符 限定符 贪婪匹配&…

Android之UI控件

本文主要包括以下内容 Spinner的使用 Gallery的使用 Spinner的使用 Spinner的实现过程是 1. 在xml文件中定义Spinner的控件 2. 在activity中获取Spinner控件 3. 定义Spinner下拉列表项数组并将下拉项的内容添加到这个数组中&#xff0c;通过这个数组建立一个下拉列表的适…

大脑如何判断该睡觉了?可能是这80种蛋白说了算

来源&#xff1a;科研圈撰文&#xff1a;Veronique Greenwood翻译&#xff1a;石云雷编辑&#xff1a;戚译引睡眠对于正常的学习和身体健康至关重要&#xff0c;但科学家们仍未完全了解睡眠在恢复大脑功能方面的作用和我们会感到困倦的原因。而通过对基因突变小鼠不寻常睡眠需求…