作者:一天 首发公众号:网络之路博客(ID:NetworkBlog)
回顾之前
上一篇了解了IP协议的各个字段的作用,以及提到了特别重要IP地址,在网络世界中作为通信识别的唯一寻址信息,让两台终端通信知道如何去跟回,其实网络世界更像我们现实世界的缩影,很多能在现实中找到相似的影子,特别在于寄信件的时候,里面最重要的就是地址信息,这个能是去往目的地的关键信息,现实中通过各个省份、城市、区县、区域来定位到具体位置,并且,这个地址是唯一的,不能出现重复,否则信件就不知道如何发送了,而在TCP/IP通信的网络世界中,为了保证正常通信,也是一样,需要有一个唯一并且能够寻址功能定位到目的地在哪的地址信息,这就是IP地址,所以每个设备都需要正确的IP地址,否则无法实现正常的通信,那它在网络世界中如何表示的呢?怎么去保证唯一性呢?
了解IP地址
1、IP地址的格式
在IP协议的报文中,可以得知IP地址是有32个比特,IP地址在计算机中是以二进制的方式处理的,如果全部以二进制的形式来表示,使用跟表达都非常的困难,所以为了人类方便记忆,采用了点分十进制的方式,将32位的IP地址以8位为一组,分成四个部分,每组以【.】进行隔开,再将每组转换成十进制。
以博主电脑网卡获取的地址举例,计算机系统处理以二进制进行,可以看到非常的长,都是0跟1的组合,在使用中很容易出错也非常难记,换成十进制后,相对来说就轻松很多了。并且可以发现二进制里面0跟1的组合不一样,得到的数值也不一样,总共IP地址有多少个呢?
最大允许差不多43亿的终端连接到网络里面来,看起来已经非常多了!但是,如今的Internet网中,IP地址是枯竭的状态,这也是为什么推出了IPV6的原因,可能IP地址的设计者也没想到,今后的internet网会这么庞大。
IP地址其实是由2个部分组成的,一个是网络号(网段地址)和主机号(主机地址),这个两个组成很关键,网络号是设备所在区域的一种标识区分,网络号相同的设备处于同一个网段内,网络号不同的设备处于不同网段,两个之间通信需要依赖三层设备。主机号是在同一个网段中标识不同终端设备,同一个网段内的终端是不允许出现重复的主机号的,这段很重要,先读几次,有个印象,这对我们排错跟学习都非常有帮助。
举个生活中的例子,一个小区内,有多栋楼,每栋楼都有501、601这样,避免住户搞混冲突,开发商会在前面加一个数字或者字母来进行区分每栋楼,比如2501、3601,这样在找位置的时候就很容易找到了。随着时间久了,可能跟同一栋楼的上下左右邻里相处的不错,经常会相互串门聊聊天,聚聚餐之类的,同一楼层每家独立的门牌号不会重复,很容易就找到了。不同楼就相当于网络号,有不同的标识,而同一栋楼的有很多住户,每个住户的门牌号都是不一样的,不会有重复,这样就方便定位了。
同样的,在网络中也是一样,可能我们访问的目的就在一个区域,也可能在另外的区域,那运行了TCP/IP协议的设备不管是PC、手机、路由器还是交换机,都得有一个判断规则,来对比要去的目的跟自己是不是一个网络区域,那就是通过上面的网络号来进行区分。
以我们最容易接触到的家用网举例,每个人家里都有无线路由器,可能有的下面接了电脑、手机、电视、PAD、有的甚至有个人服务器/NAS等。像上面的图,路由器左边是家庭局域网网,比如有三个终端,地址分别是192.168.255.1、192.168.255.2、192.168.255.240,不管是相互传文件以及访问个人的服务器,直接输入对方的地址就可以了,并且还有这样的情况,就算宽带接入出现故障,互联网访问不到了,但这些局域网之间的互访是不影响的。
另外可以发现图里面有相同的特征,都是192.168.255开头,变化的是最后一位,现在还没学介绍到地址分类,假设192.168.255相同的前缀为网络号,同一个网段,而最后一位1、2、240为主机号,数字都不是重复的。
比如这里192.168.255.1访问192.168.255.240,这里192.168.255.1设备系统通过自己网卡的参数读取到对应的IP信息与目的的IP比较,发现网络号相同,则在同一个网段内,直接发送给对方,并且二层封装目的主机的MAC地址。
PS:(在同一个局域网内就是上一篇学习的二层,通过MAC封装,交换机通过MAC学习到目标MAC的接口发送出去,当然这里会留下个疑问,终端之间怎么在会实现知道对方的MAC地址是多少呢,这里还没讲解ARP协议,暂时当成它已经事先知道了。另外家用路由器有多个LAN口,其实这LAN就相当于交换机的工作模式一样,可以学习MAC的功能,自然就能知道某个设备在哪个口)
如图 192.168.255.1去访问互联网上的百度 181.55.6.6, 假设对比前三段,终端判断目的与自己的网络号不一致,那么它该怎么处理呢?
如果终端判断目的与自己的网络号不一致就会丢给网关处理,比如图上面丢给192.168.255.254(家用路由器的网关),家用路由器通过查询路由表中的网络号,查询交给Internet的网关,最终Internet中的路由器也通过查询网络号来层层传递,最终抵达目的地。
通过这个分析,可以得到这些有用的知识点总结。
- IP地址的网络号用于区分源目IP是否在同一个网段还是不同网段,主机号用于标识同一个网段内的不同终端,并且不能重复,比如192.168.255(网络号),主机号可以是1、2、3 …..等
- 设备终端,比如PC、手机、平板运行了TCP/IP协议的,它都有判断的功能,如果目的IP与我网络号相同,判断在一个网段内,直接在同一个区域内完成通信;如果网络号不同,则判断为不同网段,这个时候直接交给网关处理,如果没有网关信息,则通信失败,数据包发送不出。
- 路由器这些三层设备在处理转发这个数据包的时候,查询路由表根据目的IP的网络号进行查询转发,这样的好处是能够提高效率,不用具体到主机位,否则Internet这么庞大的网络,每个网路设备都存放在路由表中,对设备的压力以及查询的效率就非常低了。
- 终端设备访问不同网段依靠的是网关,而路由器等三层设备转发数据包去往不同目的地依靠的是路由表中的条目。
- 这些“规则”一定要有一个认知,后续在学习路由交换的时候非常有用,甚至排错的时候,比如某个设备上不了网,那我们知道了上网是得有网关的,是不是就先检查网关设置了吗,设置的对吗。当然这些会在后续中反复提到,数据包的通信离不开这些“规则”。
明白了网络号与主机号的概念,那在IP地址中,哪几位是网络号?哪几位是主机号呢?下面就来了解下地址分类以及子网掩码的概念。
2、IP地址分类
在internet诞生初期,IP地址是非常充裕的,计算机科学家们进行了分类地址,把IP地址分为了5大类,分别是A类、B类、C类、D类、E类。
早期沿用的是地址分类的方法,A、B、C作为全局可用唯一地址进行分配,每个列别定义了网络号以及主机号的范围大小,由于这种方式早就不在使用,只有考试以及很多书籍还在介绍,所以这里就简单介绍下。
(1)A类地址
A类IP地址以首位为“0”开头,前面8位是网络号,网络号范围是0~127(0和127属于保留地址)。
算下来就2^(8-1)-2=126,其中8位中最开始0是固定的,所以只有7个可以变化,0与127是保留需要-2,最终有126个网段。
后24位是主机号,表示可容纳的终端数量,2^24次方=16777216个地址。
(2)B类地址
B类IP地址前两位以“10”固定开头,1~16位为网络号,网络号的范围128.0~191.255,其中169.254为保留地址,算下来2^(16-2)-1,有16383个可用网段。
后16位主机号,表示可容纳的终端数量,2^16次方=65536个地址。
(3)C类地址
C类IP地址前三位“110”固定,从1~24位为它的网络号,范围是192.0.0~223.255.255.255,其中192.0.0属于保留地址,所以有2^(24-3)-1=2097151
后8位是主机号,标识可容纳的终端数量,2^8=256个地址。
(4)D与E类地址
D类IP比较特殊,它属于组播地址,不区分网络号与主机号,用于各种协议中以及某些特殊场景,后续会慢慢熟悉,范围是224.0.0.0~239.255.255.255。而E类属于科研方面等方面,不用于互联网使用。
(5)了解网段地址、网段广播地址、以及单播地址
当主机号全为0时,表示某个网段,叫做网段地址,比如192.168.255.0,表示192.168.255.1到192.168.255.254所有地址,这也是以后在项目中经常遇到的表示方法,用于表示某个网段。
当主机号全为1时,它表示的网段广播地址,发往这个地址的数据包,该网段内所有主机都能收到,比如:网段192.168.255.0,广播地址是192.168.255.255。
所以,在每个网段中,主机号全0的网段地址以及主机号全1的广播地址是不能被使用,每个网段实际可用的地址是对应的地址数-2。
那什么是单播地址呢?每个网段内除去网段地址以及网段广播地址以外,剩下的就是单播地址,单播地址也就我们终端PC、手机以及网络设备路由器、交换机设备上使用的地址了,通信双方就一个发送方与接收方,而广播则是一个发送方,其余同网段的主机都为接收方,但是不会发往其他网段,中间三层设备会隔离广播,不会进行转发。
(6)二进制与十进制转换
上面介绍了一大堆地址范围,可能很多朋友有点犯迷糊,怎么就计算出这么多的网段跟主机了,首先,要明白二进制与十进制的换算。
二进制到十进制的换算,可以参考上面表格,也可以借助计算器,采用程序员的模式,输入对应的数值即可,其中BIN表示二进制,DEC表示十进制,HEX表示十六进制。
按照上面的表格,把每一段“置1”的数值相加就得了每一段的十进制,最终就是192.168.255.4,这个是C类地址,因为网络号前三位固定为110,同样的A与B类的地址,都有前面固定的值,范围都不一样,只要知道了固定值的位置,然后就可以计算出每个类的范围。
(7)IP地址分类的好处
- 判断方便,网络设备需要解析一个IP地址的时候,只需要判断网络位的前四位就可以知道是网络号与主机地址的范围。
这样的地址分类好处就是简单、选路查询方便,减轻中间设备的压力,但是也带来了很多的问题,也是导致这种分类在如今的环境下无法使用的原因。
问题一:灵活性
一个企业可能根据需求以及区域不同会划分成办公区、生产区、会议区等,而IP分类是没有这种区域层次的划分功能的,缺少灵活性。
问题二:与现实网络不匹配
从上面的分类的网段以及每个可以容纳的终端数来看,A、B、C中间差距太明显,比如一个C类的网段可以容纳254个主机,一个小型办公环境可能够用了,稍微有点规模的就显得不够,而一个B类地址对应一个企业来说又达不到这样大的规模,很多地址就浪费了,注意,公网地址是要花钱购买的,并不是免费使用的。
问题三:安全性问题
比如A公司与B公司是是同行竞争关系,同时向运营商购买了自己需要数量的IP地址,有一天,A公司的技术发现它竟然能看到B公司的数据包?原因就是运营商给它们分配的都是C类同一个网段,比如给A公司分配的是202.100.1.1到202.100.1.50,B公司分配的是202.100.1.101到202.100.1.180,通过地址分类,202.100.1.0属于C类,而且是同一个网段,那么数据通信A与B之间其实是可以直接通信的,有可能B的数据发送了广播报文的,导致A收到了,同样A发送的某些数据包,B也收到了,对于这样的场景,可能客户为了安全性就会选择去其他运营商购买,并且要求独立的网段,这问题对于运营商来说就头疼了,一个C内网段最少也有254个地址,一个公司有又不需要购买这么多,一部分给A,一个部分给B呢,又说不安全,空着吧,又浪费了。
问题四:地址浪费
其实从上面的三个问题中都可以看出来,地址的分类根本无法根据不同的场景需求来定制需要的,不是一个网段多了,就是少了,怎么都会造成地址浪
费空闲的,并且在划分的时候,很多A类地址就被美国的公司或者运营商占据了,像我们中国作为全球第一的人口庞大的国家,都没有一个”完整”的A类地址。而一个A类想想上千万个地址,一个公司怎么可能用得了这么多,剩下的就白白的浪费了。
重点回顾
- IP地址采用点分十进制表示,分为四个部分。
- IP地址由网络号与主机号组成,网络号表示具体的某一个网段,同一个网段内的主机可以直接通信,不同网段的主机互访则交给网关处理,是否在于同一个网段的判断依据就是依赖网络号。主机号表示这个网段内的终端数量,每个地址都不能相同。
- 路由器等三层设备在处理数据包转发的时候,也是通过网络号进行查询转发,这样效率更高,对设备压力更小。
- 每个网段都存在一个网段广播地址,一个网段地址,这两个地址是不能被使用的,其中网段地址表示某个整体网段,而网段广播地址是指,发往该地址的数据包,该网段内所有主机能收到,就像广播一样,但是只能在该网段内广播,穿越不了路由器,也可以理解路由器天生隔离广播。
- IP地址早期采用分类地址,分为了A、B、C、D、E 五大类,其中在后续经常会接触到的有A、B、C三类,分类的好处就是规划了网络号与主机号的范围,并且为不同场景规模的环境提供了不同的网段数量以及主机数量。网关以及互联网设备在转发数据查询的时候也很容易进行判断。
- 分类地址的方法存在很多弊端,最大的弊端就是地址的浪费,导致IPV4地址枯竭的重大原因。
参考文献
[1]图解网络-小林coding-第三版
[2]计算机网络–自顶向下(第七版)
“承上启下”
竟然分类地址存在这么多的问题,势必需要一种更好的分类划分的方法来避免地址的浪费,以及可以灵活的进行划分,这样才能满足internet快速壮大的规模跟发展的需求,这种方法就是下一篇要讲的子网掩码、VLSM、CIRD、私网地址。