IPv4协议及VLSM可变长子 划分和CIDR无类域间路由

互联 世界一切通信都将IP化。IT行业无论你用哪种语音(C++,Java,PHP等),无论你偏软件或偏硬件,最大公约数之一可能就有IP。国家在搞三 融合,即Internet,电话 ,有线电视 将全用IP数据包传输数据。可以说IP是 络的基石。本篇是我对IP协议包括VLSM和CIDR的理解。

IP的责任简单地说就是将数据从源传送到目的地。IP协议被封装在TCPIP 5层协议中的 络层上,具体格式如下:(以下是我个人对IP包头的理解,权威的请查阅wikipedia或RFC791,另文中出现的IP均指IPv4)

4.总长度(16位):

IP包的长度,总长度 – 首部长度 = 数据长度

5.标识符(16位),标志(3位),段偏移量(13位):

三个结合在一起使用,用于数据分包。比如A->B->C,A的MTU是1500,B的MTU是1000,那B收到A的包转发给C时就要分包:第一个包1000,第二个包500。

标识符(16位):分包后,每个包上标记相同的值,以便区分哪些包原本是同一个包拆开来的。

标志(3位):第一位固定是0。第二位DF(Don’t Fragment)为1时不切片,这样B收到MTU1500的包就不能分包,无法转发给C只能直接丢弃。第三位MF(More Fragments)为1时表示后面还有切片。

段偏移量(13位)用于分包后合并时确定依次顺序。

6.TTL(8位):

TTL本是想用做统计时间的,后来变为跳数,最大255,一般为64,每过一个路由器减1,到达目的IP前如果减到0,路由器就将该包丢弃,再通过ICMP回传time exceeded信息,这样可以避免无限环路。

7.协议 (8位):

用于区分上层(传输层)数据。例如ICMP是1,TCP是6,UDP是17,EIGRP是88,OSPF是89

8.首部校验和(16位):

校验一下除数据部分外的包头信息以防被篡改。因为TTL值每经过一个路由器都会减1发生变化,因此每经过一个路由器都要重新校验,这很讨厌,所以IPv6里就没有校验和了。

9.源地址(32位),目标地址(32位):

(顾名思义)

10.可选项:

有4个选项:松散源路由选择,严格源路由选择,记录路由,时间戳

松散/严格源路由选择:用于控制沿途路径。比如A->B1->C也可以A->B2->C,具体走哪条你可以将B1或B2的地址写到这里。区别是:严格里必须规定沿途每个路由器,而松散可以只给出沿途必须经过的一些“要点”

记录路由:记录沿途的IP地址

时间戳:没啥用,路由器转发时可以打个时间,但除非所有路由器的时间精确同步,否则没什么用

11.数据:

(顾名思义,里面包含了上一层传输层的TCP/UDP头部)

上面IP协议里,源地址和目标地址就是家喻户晓的IP地址。

IP地址格式是由 络 和主机 (D类E类除外)合并而成,用点分10进制表示,共32位。分为ABCDE 5类IP地址:

IPv4协议及VLSM可变长子 划分和CIDR无类域间路由

A类地址:

前8位为 络 (首位固定0,后7位是 络地址),后24位是主机 。

A类地址范围:1.0.0.0 ~127.255.255.255 掩码:255.0.0.0(掩码的作用是区分 络 和主机 )

段中主机位全0的是该 段地址,主机位全1的是该 段的广播地址。因此平时可用于单播的A类IP地址范围:1.0.0.1 ~127.255.255.254

B类地址:

前16位为 络 (前2位固定10,后6位是 络地址),后16位是主机 。

B类地址范围:128.0.0.0 ~191.255.255.255 掩码:255.255.0.0

段中主机位全0的是该 段地址,主机位全1的是该 段的广播地址。因此平时可用于单播的B类IP地址范围:128.0.0.1 ~191.255.255.254

C类地址:

前24位为 络 (前3位固定110,后5位是 络地址),后8位是主机 。

B类地址范围:192.0.0.0 ~223.255.255.255 掩码:255.255.255.0

段中主机位全0的是该 段地址,主机位全1的是该 段的广播地址。因此平时可用于单播的B类IP地址范围:192.0.0.1 ~223.255.255.254

D类地址:
用于多播,已经没有 络 和主机 了,前4位固定1110,后28位用于多播地址
D类地址范围:224.0.0.0 ~ 239.255.255.255

E类地址:

用于科研。。。太高端一般接触不到。同样已经没有 络 和主机 了

D类地址范围:240.0.0.0~ 255.255.255.255

有一些用于特殊用途的IP地址:

0.0.0.0:未指定IP

127.0.0.1:本地loopback测试地址

255.255.255.255:本地广播地址

还有一些私有IP地址:

A类地址中:10.0.0.0~ 10.255.255.255(即10 段)

B类地址中:172.16.0.0~172.31.255.255(即172的后半 段)

C类地址中:192.168.0.0~192.168.255.255(即192.168 段)

私有IP地址无法在公 上被使用,但可以在本地被使用。可以用NAT将本地使用的私有IP地址转换成公有IP地址来访问公 ,以达到节约IP地址的目的。如企业内部不必每台主机都配一个公 IP,大家尽可使用私有IP地址,并共用多个公 IP来上 。

平时常用ABC 3类IP地址,以A类IP地址为例,只有126个 络,但每个 络都有巨量的主机2^24=16777216。如果一个公司只需要100台主机,那分配给该公司一个A类IP 段的话,将造成大量的IP地址浪费。因此通常只分配一个C类地址,C类地址的主机 是8位,可供2^8-2=254台主机用(-2的原因上面说过了,主机 全0是该 段地址,全1是该 段广播地址),虽然够用,但该公司只需求100台主机,仍旧造成IP地址浪费。所以需要VLSM(可变长子 掩码)子 划分来更合理地分配IP地址。

VLSM子 划分的规则:

子 数= 2^子 位数(子 位数 = 掩码 – 主类 络 ,例如某B类IP的掩码是27,则子 位数为27-16=11,因此子 数为2^11=2048)

主机数= 2^主机 -2(-2的原因上面说过了,主机位全0为 络地址,全1为广播地址)

块大小=2^八位组内主机 (例如192.168.10.0 掩码:255.255.255.192。C类IP主机 是第四个8位组,现在掩码是192=11000000,意思是问第四个8位组借了前2位作为 络 ,因此第四个8位组内主机 是8-2=6位,块大小为2^6=64)。得出块大小后,用块大小数字累加就能得到 络 。

一个C类IP地址子 划分的例子:

例如192.168.10.0 掩码:255.255.255.192 (这种写法很麻烦,192=11000000,即第四个8位组前2位是 络 ,总共 络 是26位,可简写为192.168.10.0/26)

子 数为2^2=4,主机数为2^6-2=62,块大小为2^6=64(每个8位组来计算,发生在第三个8位组)。4个子 分别为:
192.168.10.0/26 (单播IP范围:192.168.10.1 ~ 192.168.10.62)
192.168.10.64/26 (单播IP范围:192.168.10.65 ~ 192.168.10.126)
192.168.10.128/26 (单播IP范围:192.168.10.129 ~ 192.168.10.190)
192.168.10.192/26 (单播IP范围:192.168.10.193 ~ 192.168.10.254)

一个B类IP地址子 划分的例子:

172.16.0.0/18

子 数为2^2=4,主机数为2^14-2=16382,块大小为2^6=64(每个8位组来计算,发生在第三个8位组)。4个子 分别为:
172.16.0.0/18 (单播IP范围:172.16.0.1 ~ 172.16.63.254)
172.16.64.0/18 (单播IP范围:172.16.64.1 ~ 172.16.127.254)
172.16.128.0/18 (单播IP范围:172.16.128.1 ~ 172.16.191.254)
172.16.192.0/18 (单播IP范围:172.16.192.1 ~ 172.16.255.254)

一个B类IP地址子 划分的例子2:

172.16.0.0/27

子 数为2^11=2048,主机数为2^5-2=30,块大小为2^5=32(每个8位组来计算,发生在第四个8位组)。2048个子 分别为:
172.16.X.0/27
172.16.X.32/27
172.16.X.64/27
172.16.X.96/27
172.16.X.128/27
172.16.X.160/27
172.16.X.192/27
172.16.X.224/27 (第三位可以从0变化到255)

上面这样子 划分,比ABC主类地址能更合理分配IP。下面再介绍一种更能节省IP地址的子 划分方法:

例如172.16.0.0/16,要划分成2个200台主机,3个2台主机,3个24台主机,该怎么划分子 呢的原则是从大到小:

1.先算200台主机:2^n-2 >= 200,n为8,即主机 为8, 络 为24

172.16.0.0/24变化发生在第3个8位组,因为第3个8位组全是 络位,因此块大小为2^0=1,子 :

172.16.0.0/24 (可以任选2个供200台主机用,例如选前2个。供200台主机用)
172.16.1.0/24 (供200台主机用)
172.16.2.0/24 (未分配)
……
172.16.255.0/24

2.算24个主机:2^n-2 >= 24,n为5,即主机位为5, 络位为27

在172.16.2.0/24基础上划分子 :172.16.2.0/27变化发生在第4个8位组,块大小为2^5=32:

172.16.2.0/27 (可以任选3个供24台主机用,例如选择前3个。供24台主机用)
172.16.2.32/27 (供24台主机用)
172.16.2.64/27 (供24台主机用)
172.16.2.128/27 (未分配)
…..
172.16.2.224/27

3.最后算2个主机:2^n-2 >= 2,n为2,即主机位为2, 络位为30

在172.16.2.128/27基础上划分子 :172.16.2.0/30变化发生在第4个8位组,块大小为2^2=4:

172.16.2.128/30 (这3个供2台主机用)
172.16.2.132/30
172.16.2.136/30

通过上面若干VLSM的例子可用看出,VLSM是从右向左问主机 借用 络 ,那CIDR就是 络 向左偏移,相当于主机数扩大了。更官方点说:

CIDR,就是忽略ABC类 络,自定义前缀相同的一条路由。

如192.168.12.0/24
192.168.13.0/24
192.168.14.0/24
192.168.15.0/24

都通过路由器E连接路由器F。如果设4条路由很麻烦,希望汇总一下。如果汇总成主类地址192.168.0.0/16太不精确了,可以汇总成192.168.12.0/22一条路由。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92560 人正在系统学习中 相关资源:求解偏微分方程的数学软件Fastflo-教育工具类资源

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年6月26日
下一篇 2018年6月27日

相关推荐