您的位置:首页 > 其它

CIDR与NAT

2015-09-03 20:33 381 查看

CIDR与NAT

前言

今天看到有人说我以前写的博客的案例太黄了,好吧,我曾经纯洁过.



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







CIDR

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



(1) IP地址分类

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

IP类别

起始

终止

子网掩码

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类网络可以有2^24台主机,也就是16777216.由于IPV4地址已经分好了类,所以当我们看到一个IP地址后,就可以通过上面查到它的子网掩码.(B类,2^16;C类,2^8)







(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.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

erh1

根据路由表的第一条记录

199.165.145.254(IP address):11000111 10100101 10010001 11111110

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



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



路由器将原来的199.165.145网络中的一部分分割出来.这一网络可以容纳两台电脑,也就是199.165.145.254和199.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.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地址的需求.



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







总结

即使是CINR和NAT的广泛使用,IPV4还是不可避免存在耗尽的危机.IPV6正在加紧部署.但是,上述的两种技术,CIDR和NAT在IPV6中同样被采用,所以了解他们依然是有一定意义的,没有人能预见未来,但是咱们可以大胆的推测一下嘛,到底是IPV4将彻底淘汰啊,还是两种协议共存,还是出现能改善IPV4缺点的牛B算法,彻底淘汰IPV6呢?不好说啊.

末尾备注

两个局域网内的主机是无法直接通信的,因为他们之间不可见,如果需要通信必须要有一个公网服务器中转.中转可以中转每次通话,即全程参与,也可以只牵个线两人接头后服务器退出,两台局域网内主机直接对话.QQ就是这种技术,p2p也是.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: