网络层位于数据链路层与传输层之间。网络层中包含了许多协议,其中最为重要的协议就是IP协议。网络层提供了IP路由功能。理解IP路由除了要熟悉IP协议的工作机制之外,还必须理解IP编址以及如何合理地使用IP地址来设计网络。
学完本篇以后,我们应该能够:
掌握IP报文及字段含义
掌握IP编址
掌握网络地址规划
IP报头格式如图所示,I IP报文头部长度为20到60字节,报文头中的信息可以用来指导网络设备如何将报文从源设备发送到目的设备。同一个网段内的数据转发通过数据链路层即可实现,而跨网段的数据转发需要使用网络设备的路由功能。分片是指数据包超过最大转发长度时,需要被划分成不同的片段使其能够在网络中传输。
图1 :IP报头
为了更透彻理解IP报头,现将IP报头内部字段含义整理为下表所示。
表1: IP报头字段
IP报文头部长度为20到60字节,报文头中的信息可以用来指导网络设备如何将报文从源设备发送到目的设备。其中,版本字段表示当前支持的IP协议版本,当前的版本号为4。DS字段早期用来表示业务类型,现在用于支持QoS中的差分服务模型,实现网络流量优化。源和目的IP地址是分配给主机的逻辑地址,用于在网络层标识报文的发送方和接收方。根据源和目的IP地址可以判断目的端是否与发送端位于同一网段,如果二者不在同一网段,则需要采用路由机制进行跨网段转发。
什么是IP地址?
前面学习的MAC地址是一个物理地址相当于我们的身份证,那么IP地址就相当于我们各自的电话号码——逻辑地址。用来标识我们在网络中的逻辑位置,一共有两个版本分别是IPv4和IPv6。
IP地址本质上是32位二进制数,共四个字节。一般情况下我们看到的表现形式为点分十进制,它也可以用二进制数表示。如图4-2IP地址两种表现形式。
图2: IP地址表现形式
两种地址表现形式差异很大,如何进行换算?首先我们要知道进制之间的换算关系。
网络中的数据可以采用二进制、十进制或十六进制来表示。每种进制使用不同的基值表示每一位的数值。二进制每一位只有0和1两个值,基值为2,二进制数的每一位都可以用2的x次幂来表示,x表示二进制数的位数。十六进制的每一位可以有16个数值,范围为0-F(即0-9和A-F),A对应十进制的10,F对应十进制的15(二进制的1111)。
进制的书写形式有两种如下:
数值用括号括起来,进制号下标在右括号,例如:(101)2,表示二进制数101。
用进制简称标识即可,各进制简称如下:
二进制:B
十进制:D
十六进制:H
表2: 常用进制
在IP地址学习阶段经常会进行二进制与十进制的换算,其换算关系如下表所示。
表3:二进制与十进制之间换算关系
我们举个例子:IP地址为172.16.25.3,用二进制形式如何表示?
查找计算:
172=128+32+8+4=(10101100)2
16=16=(00010000)2
25=16+8+1=(00011001)2
3=2+1=(00000011)2
172.16.25.3=10101100.00010000.00011001.00000011
从图2中我们可以看出IP地址组成包括两部分,第一部分是网络位,这一部分用来表示所属的网段,第二部分是主机位,用来唯一标识本网段上的某台网络设备。IPv4地址被划分为A、B、C、D、E五类,每类地址的网络号包含不同的字节数。A类,B类和C类地址为可分配IP地址,每类地址支持的网络数和主机数不同。32位的IP地址分为4个字节,每个字节有256(0-255)个取值。因此,理论上IPv4可以有4294967296个IP地址,但实际上只有其中一部分地址可以分配给网络设备使用。如图3中IP地址分类详情。
A类地址:第一个bit必须为0,这样就能计算出A类地址的第一个字节的取值范围为0-127或(00000000)2-(01111111)2,第一个字节为网络位区间,后三个字节为主机位区间。在A类地址中当第一个字节为0或127时,它不归属于A类网络,我们在4.2.3中介绍。
B类地址:前2bit必须为10,那么B类网络地址第一个字节的取值范围为128-191或(10000000)2-(10111111)2,前两个字节段为网络位区间,后两个字节段为主机位区间。
C类地址:前3bit必须为110,第一个字节取值范围为192-223或(11000000)2-(11011111)2。C类地址前三个字节为网络位区间,第四个字节为主机位区间。
D类地址:这一类被定义为组播地址。
E类地址:用于科学研究。
关于D类,E类地址具体范围如图4-3,其详情本节不做讨论。
图3 IP地址分类
除了D类E类这两个特殊类地址外,下面还列举了特殊的网络地址。
0.0.0.0:全网络地址,表示所有网络。
255.255.255.255:全局广播地址。
网络地址:网络位不变,主机位全为0;网络地址是一个网段的开端地址。
广播地址:网络位不变,主机位全为1;广播地址是一个网段的结束地址。
127.0.0.0/8: 环回地址,用于诊断网络是否正常。
现阶段世界上所有终端系统和网络设备都需要IP地址,远远超过了32位IPv4地址所能支持的最大地址数为4,294,967,296。网络工程师们为节省IP地址将A、B、C类地址段中都预留了特定范围的地址作为私有地址——内网使用地址。为主机分配私有地址节省了公网地址,这样可以用来缓解IP地址短缺的问题。企业网络中普遍使用私有地址,不同企业网络中的私有地址可以重叠。默认情况下,网络中的主机无法使用私有地址与公网通信;当需要与公网通信时,私有地址必须转换成公网地址。
各类别私有地址具体范围如下
A类:10.0.0.0~10.255.255.255
B类:172.16.0.0~172.31.255.255
C类:192.168.0.0~192.168.255.255
与IP地址结构类似,子网掩码由32bit(四字节)组成,以点分十进制表示。子网掩码并不是IP地址,只是用于区分网络部分和主机部分。子网掩码中的1表示网络位,0表示主机位,连续的1数量称为一个子网掩码的长度。举个例子,子网掩码255.255.0.0 转换为二进制11111111.11111111.00000000.00000000,观察得出他是一个16位掩码。每个IP地址和子网掩码一起可以用来唯一的标识一个网段中的某台网络设备。
通常给定一个IP地址需要计算其归属网段,我们可以将IP地址和它的子网掩码进行与运算得出网络地址。运算法则为同为1时为1,其他情况为0。与运算举例如表5所示。
表5与运算举例
如图4每类IP地址有一个缺省子网掩码。A类地址的缺省子网掩码为8位,即第一个字节表示网络位,其他三个字节表示主机位。B类地址的缺省子网掩码为16位,因此B类地址支持更多的网络,但是主机数也相应减少。C类地址的缺省子网掩码为24位,支持的网络最多,同时也限制了单个网络中主机的数量。
图4默认子网掩码
按照定义好的网络长度划分的A类、B类、C类等网络分类,称为有类网络 ,有类网络由于采用固定格式,正因为这一点使用缺省子网掩码就会存在一定的局限性,如果企业网络中希望通过规划多个网段来隔离物理网络上的主机,网络中划分多个网段后,每个网段中的实际主机数量可能很有限,导致很多地址未被使用。如图4-5有类网络缺陷
图5 有类网络缺陷
从上图中可以看出,网段192.168.1.0/24根据子网掩码255.255.255.0,计算出其网络地址为192.168.1.0,广播地址为192.168.1.255,减去网络地址和广播地址其有效主机地址范围为192.168.1.1-192.168.254共计253个有效主机地址;而实际需求为30个主机,将造成223个地址浪费。
采用可变长子网掩码可解决有类网络固化地址格式带来地址浪费问题。使默认子网掩码可以进一步划分,成为变长子网掩码(VLSM)。根据需求通过改变子网掩码,合理的将网络划分为多个子网。经过前面学习,我们已经知道网络位和主机位占位空间决定网段地址及其主机地址数量,具体关系如表6所示。
表6子网与子网地址计算
我们以图5为例现有一个C类网络地址段192.168.1.0/24,使用变长子网掩码给三个子网分别分配IP地址。过程如下:采用默认子网掩码的C类地址网段一般情况可以提供253个有效主机地址;在图中我们发现该企业三个部门共计需分配60个主机地址,其中需求最多部门为30个地址,所以只需要将192.168.1.0/24合理的分配给三个部门即可;满足子网数大于等于3所以需要借位至少2位,主机地址剩6位每个子网地址空间为64个,有效空间62(减去网络地址和广播地址)个。划分过程如图4-6所示
图6 子网划分举例
划分后我们可以将网段192.168.2.0/24和192.168.3.0/24释放出来,而且每个部门都预留了地址不担心后期部门扩员。经过上面的过程我们可以总结出子网划分依据是子网掩码的长度,而子网掩码长度取决于借位后网络位的位数。
1、某公司申请到一个C类地址段,需要平均分配给8个子公司,最大的一个子公司有14台计算机,不同的子公司必须在不同的网段中,则子网掩码应该设计为?( )
A、255.255.255.240 B、255.255.255.128 C、255.255.255.192 D、255.255.255.0
2、如果一个网络的广播地址为172.16.1.255,那么它的网络地址可能是?( )
A、172.16.1.128 B、172.16.2.0 C、172.16.1.1 D、172.86.1.253
3、主机的IPv4地址为200.200.200.201/30、拥有下列哪个IPv4地址的主机和其通信不需要经过路由器转发?( )
A、200.200.200.202 B、200.200.200.200 C、200.200.200.203 D、200.200.200.1