了解IPv4/IPv6

前言

记得小时候家里牵网络时,工作人员拿着机器给你申请了一个IP地址,也就是说对于个人用户来说,这些地址是由ISP(网络服务提供商)分配的,最终在通过配置路由器就可以上网了,实际上每次访问互联网都是经由ISP,由它来帮助我们访问资源。因此,IP地址是网络的必修课,简单说说吧。

基本概念

192.168.1.0就是一个IPv4地址,采用点分四组表示法来展示十进制,简单而言就是用4个点分隔每一位(共有4位数字),每一位的范围是[0,255],也可以使用二进制的方式展示,每一位有8个0或1组成(共有32位1或0)。5f05:2000:80ad:5800:0058:0800:2023:1d71就是一个IPv6地址,采用称为块的方式来展示十六进制,每一位使用冒号分隔(共有8位数字),也可以使用二进制的方式展示,每一个位有16个1或0组成(共有128位1或0),除此之外,它还有一些规则用来简化表示:

  • 一个块的前导零可以不用写,比如前面的例子可以写成:5f50:2000:80ad:5800:58:800:2023:1d71。

  • 全零的块可以省略,并使用::代替,比如:0:0:0:0:0:0:0:1可以简写为::1,再比如:2001:0db8:0:0:0:0:0:2可以简写为2001:0db8::2,为了避免歧义,在IPv6中符号::只能出现一次,其实可以想象如果有多个::的话,IPv6的地址会有多种情况。

分类

IP地址划分为若干个固定类,每一类地址都有两个固定长度的字段组成,其中第一个字段是网络号,它标识着主机所连接的网络,第二个字段是主机号,用于标识主机,一个主机号在它前面的网络号所指明的网络范围内必须是唯一的。如下图所示:

tcp-ip-地址分类

可知ABC类地址的网络号分别为1、2、3个字节,也就是分别有8、16、24位,网络号字段最前面的数字表示类别位(处于哪一个分类),由此还可以知道ABC类地址所处的范围,,如下图所示:

地址范围 高序位 网络数 主机数
A 0.0.0.0 ~ 127.255.255.255 0 128 16777216
B 128.0.0.0 ~ 191.255.255.255 10 16384 65536
C 192.0.0.0 ~ 223.255.255.255 110 2097152 256

可知A类地址可使用的网络数是最少的,但可分配的主机数却是最多的,这就有可能会造成网络号和主机号的分配问题,因此也引出了子网的概念,实际上就是将原来的主机号在划分成一个子网号和一个新的主机号,如图所示:

tcp-ip-子网号

B类默认的网络号、主机号都是16位,在主机号的基础上在划分出8位作为子网号,那么最终主机号只有8位,相当于网络号变成了24位,但请注意,对于外界来说,它仍然是一个只有16位网络号的IP地址,只有本地才知道它是划分了子网的。那么我们怎么才知道它是否有划分了子网,具体划分了多少位,这就需要提供一个子网掩码,由一些1后跟一些0组成,不能是1(0)交替,它也是32位,每一位也是使用点来分隔,举个例子:将子网掩码128.32.1.14转换成二进制,同时将IP地址也换算成二进制,然后将两者的结果进行&运算就可以得出网络号和主机号,比如:


    地址:100000000 00100000 00000001 00001110    128.32.1.14
    掩码:111111111 11111111 11111111 00000000    255.255.255.0(/24)
    结果:100000000 00100000 00000001 00000000    128.32.1.0

你会发现掩码和地址的对应位都是1时,其结果才是1。在上面的例子中,地址128.32.1.14的网络号是128.32.1.0/24(/24代表子网掩码中从左边起有24位连续1)。然而随着时间的推移,IP地址已经明显不够用了,虽然子网掩码的出现有所缓解该问题,但并不足以应对未来,于是专家们提出了CIDR概念(无类别域间路由),简单来说就是不在对IP地址划分网络号和主机号,自然也就没有ABC类别了,采用类似子网掩码的方式来划分范围,同时为了解决日益增长的路由数量(每个网络号对应一条),又提出了聚合的概念,简单理解就是在CIDR的基础上可以将IP地址进行合并(个人认为这里只需要简单理解其概念就可以了,《TCP/IP详解 卷一》描述的太泛了,只是点到为止)。

参考资料

《TCP/IP详解 卷一》
《计算机网络第六版 谢希仁编著》

posted @ 2021-01-05 22:00  zliawk  阅读(679)  评论(0)    收藏  举报