1.5 IP
IP是网络之间互联协议的缩写,是TCP/IP协议族中最为核心的协议,是为计算机网络相互连接进行通信而设计的协议。IP协议可以说是学习网络技术的基础,目前的IP可分为IPv4和IPv6两个版本,本节将介绍IPv4,IPv6将在后续章节介绍。具体内容包括以下3项。
(1)IP编址。
(2)IP子网划分。
(3)IP网络层的常用排错方法。
1.5.1 IP编址
IP 地址用于唯一标识一台网络设备,由32个二进制位组成,这些二进制数字被分为4个八位数组(octets),又称为4个字节。IP地址表示方式如下。
点分十进制形式:10.110.128.111;
二进制形式:00001010.01101110.10000000.01101111;
十六进制形式:0a.6e.80.6f。
通常IP地址用点分十进制形式表示,很少表示成十六进制形式。IP地址采用分层设计,可以分为两部分:网络地址部分和主机地址部分,如图1-63所示。
图1-63 IP地址结构
IP 地址的分层方案类似于常用的电话号码。电话号码也是全球唯一的。例如对于电话号码010-12345678,前面的字段010代表北京的区号,后面的字段12345678代表北京地区的一部电话。IP地址也是一样,前面的网络地址部分代表一个网段,后面的主机地址部分代表这个网段的一台设备。
IP地址采用分层设计,方便了3层网络设备网络信息的维护,譬如路由器设备,在标识网络的时候,可以以网段的方式来进行标识(网络地址代表了该网段内所有主机组成的网络),而不必储存每一台主机的IP地址,大大减少了路由表条目,增加了路由的灵活性。
IP 地址的网络地址部分用于唯一地标识一个网段,或者若干网段的聚合。同一网段中的网络设备有同样的网络地址。IP 地址的主机地址部分用于唯一地标识同一网段内的网络设备,在网络设备拥有多个接口的情况下,则拥有标识某一特定的三层接口。如A类IP地址10.110.192.111,网络地址为10,主机地址为110.192.111。
如何区分IP地址的网络地址和主机地址呢?最初互联网络设计者根据网络规模大小规定了地址类,把IP地址分为A、B、C、D、E这5类,如图1-64所示。
图1-64 IP地址分类
A类IP地址的网络地址为第一个8位数组(Octet),第一个字节以“0”开始。因此,A类网络地址的有效位数为8-1=7位,A类地址的第一个字节在1~126之间(0和127留作他用)。例如,10.1.1.1、126.2.4.78等为A类地址。A类地址的主机地址位数为后面的3个字节24位。A类地址的范围为1.0.0.0~126.255.255.255,每一个A类网络共有224个A类IP地址。
B类IP地址的网络地址为前两个8位数组(Octet),第一个字节以“10”开始。因此,B类网络地址的有效位数为16-2=14位,B类地址的第一个字节在128~191之间。例如,128.1.1.1、168.2.4.78等为 B 类地址。B 类地址的主机地址位数为后面的两个字节16位。B 类地址的范围为128.0.0.0~191.255.255.255,每一个B类网络共有216个B类IP地址。
C类IP地址的网络地址为前3个八位数组(Octet),第一个字节以“110”开始。因此,C类网络地址的有效位数为24-3=21位,C类地址的第一个字节在192~223之间。例如,192.1.1.1、220.2.4.78等为 C 类地址。C 类地址的主机地址部分为后面的一个字节8位。C 类地址的范围为192.0.0.0~223.255.255.255,每一个C类网络共有28=256个C类IP地址。
D类地址的第一个8位数组以“1110”开头,因此,D类地址的第一个字节在224~239之间。D类地址通常作为多播地址。关于多播地址,在HCDP路由课程中会有讨论。
E类地址的第一个字节在240~255之间,保留,用于科学研究。
现网中经常用到的是A、B、C这3类地址。IP地址由国际网络信息中心组织(International Network Information Center,InterNIC)根据公司大小进行分配。过去通常把A类地址保留给政府机构,或者分配给谷歌之类的大公司,B 类地址分配给中等规模的公司,C 类地址分配给小单位。然而,随着互联网络的飞速发展,再加上IP地址的狼费,IP地址已经非常紧张,目前国际上的IP地址段已经分配完毕,运营商使用的IP地址都是之前申请的存量IP地址。鉴于此,IETF组织设计推出了IPv6协议。其中,对IPv6地址的定义,很重要的一个意义在于扩充了地址空间,由现在的32位扩充到了128位,能够用于替代现行越来越短缺的IPv4地址。
IP地址用于唯一地标识一台网络设备,但并不是每一个IP地址都是可用的。一些特殊的IP地址有特殊的用途,不能用于标识网络设备,如表1-12所示。
表1-12 特殊IP地址
对于主机部分全为“0”的IP地址,称为网络地址。网络地址用来标识一个网段。例如,A类地址1.0.0.0,私有地址10.0.0.0、192.168.1.0等。
对于主机部分全为“1”的 IP 地址,称为网段广播地址。广播地址用于标识一个网络的所有主机。例如10.255.255.255、192.168.1.255等。广播地址用于向本网段的所有节点发送数据包,这样的广播不能被路由器转发。
对于网络部分为127的IP地址,代表的是环回地址,往往用于环回测试。例如127.0.0.1。
全“0”的IP地址0.0.0.0代表所有的主机,华为实现中用0.0.0.0地址指定默认路由,同时,在终端配置自动获取IP地址的时候,以0.0.0.0作为临时填充地址。
全“1”的IP地址255.255.255.255也是广播地址,但255.255.255.255代表本地链路上的所有主机,用于向本地链路上的所有节点发送数据包。这样的广播不能被路由器转发。
如上所述,每一个网段会有一些IP地址不能用作主机IP地址。下面计算一下可用的IP地址。
如B类网段172.16.0.0,有16个主机位,因此有216个IP地址,除了一个网络地址172.16.0.0和一个广播地址172.16.255.255不能用作标识主机,那么共有216-2个可用地址。C类网段192.168.1.0,有8个主机位,共有28=256个IP地址,去掉一个网络地址192.168.1.0和一个广播地址192.168.1.255,共有254个可用主机地址。
每一个网段的可用主机地址可以用这样一个公式表示:假定这个网段的主机部分位数为n,则可用的主机地址个数为2n-2个。
IP地址除了可以分为A类、B类等,同样还区分定义了私网地址和公网地址,通常情况下会在公司内部网络使用私有IP地址。
私有IP地址是由InterNIC预留的由各个企业内部网自由支配的IP地址。使用私有IP地址不能直接访问 Internet。因为公网上没有针对私有地址的路由。当访问 Internet 时,需要利用NAT 或者代理等技术把私有 IP 地址对公网的访问转换为对非私有地址的访问。InterNIC预留了以下网段作为私有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地址,不仅减少了用于购买公有IP地址的投资,而且节省了IP地址资源。
IP编址与路由——IP地址介绍
1.5.2 子网划分
上文中提到了IP地址的分层结构,IP地址可以分为网络地址部分和主机地址部分,网络地址部分用于表示网段,主机地址部分用于唯一标识同一网段内的网络设备。网络地址和主机地址的区分则通过掩码实现。
掩码与IP地址的表示法相同。掩码中用1表示该位为网络位,用0表示主机部分。一个255则表示有8个1。
默认状态下,A 类地址的网络掩码为255.0.0.0,B 类地址的网络掩码为255.255.0.0,C 类地址的网络掩码为255.255.255.0。
图1-65所示的192.168.1.100是一个标准C类地址,子网掩码为255.255.255.0,该地址的网络地址为192.168.1.0。
图1-65 网络地址和掩码
如果一个 IP 地址在表示的时候没有带上掩码,则被称为无子网编址。无掩码编址使用自然掩码,不对网段进行细分。比如B类网段172.16.0.0,使用自然掩码255.255.0.0。
对于没有子网的IP地址组织,外部将该组织看作单一网络,不需要知道内部结构。例如,所有到地址172.16.X.X的路由被认为同一方向,不考虑地址的第三和第四个8位分组,这种方案的好处是减少路由表的项目。
但这种方案没法区分一个大的网络内不同的子网网段,这使网络内的所有主机都能收到该大的网络内的广播,从而降低网络的性能,另外也不利于管理。
比如,一个B类网可容纳65 534个主机。假设申请B类地址的用户只需要100个IP地址,那么剩余的地址无法被别的用户使用,这就造成了极大的狼费。于是需要一种方法将这种网络分为不同的网段,按照各个子网段进行管理。
从地址分配的角度来看,子网是网段地址的扩充。网络管理员根据组织增长的需要决定子网的大小。网络设备使用子网掩码(Subnet Masking)决定IP地址中哪部分为网络部分,哪部分为主机部分。
子网掩码也是掩码,其表示方式与掩码是一样的。如图1-66所示,IP地址192.168.1.7对应的子网掩码是255.255.255.240,将十进制转化为二进制,子网掩码的二进制表示为11111111.11111111.11111111.11110000。根据掩码的定义,掩码位为1的代表网络地址,那么代表IP地址192.168.1.7的网络地址位共有8+8+8+4=28位。因此IP地址也可以表示为192.168.1.7/28。
图1-66 子网掩码的表示方法
在默认状态下,如果没有进行子网划分,A 类网络的子网掩码为255.0.0.0,B 类网络的子网掩码为255.255.0.0,C 类网络子网掩码为255.255.255.0。利用子网,网络地址的使用会更有效。对外仍为一个网络,对内部而言,则分为不同的子网。例如,某公司的财务部使用172.16.4.0子网段,工程部使用172.16.8.0子网段。这样可使路由器根据目的子网地址进行路由,从而限制一个子网的广播报文发送到其他网段,不对网络的效率产生影响。
通过子网掩码,可以进行IP地址的网络地址位和主机地址位的区分,那么如何计算网络地址呢?如图1-67所示,IP地址为192.168.1.167/28,将IP地址和掩码分别表示为二进制,按位进行“与”的计算,得到结果11000000.10101000.00000001.10100000,转换为十进制,即为网络地址192.168.1.160。
图1-67 网络地址的计算
那么网段192.168.1.160/28中能容纳多少台主机呢?主机数同样是通过子网掩码来计算的。在掩码的规定中,值为0的比特位即为主机位,所以要看的就是子网掩码中最后有多少位是0。如图1-68所示,假设子网掩码中最后有n位为0,那么总的主机数为2n个,可用主机的个数要减去全0的网络地址和全1的广播地址,所以可用的主机数为2n-2个。按照该计算方式,192.168.1.160/28网段中可用的主机IP地址为14个。
图1-68 主机数的计算
在了解了子网掩码的基本概念后,可以尝试着进行以下网络的子网划分。
某公司分配到了一个 C 类的地址网段201.222.5.0/24。出于业务需要,需要将公司的网络划分成20个子网,每个子网有5台主机,该如何划分?
在这个例子中,因为是C类地址,所以子网部分和主机部分总共是8位。假设取其中的n位作为子网网络地址,那么剩下的主机位为8-n位。根据前面的主机数目的计算公式可以得出每个子网中的可用IP地址数为2(8-n)-2。由于还需要分配一个IP地址作为网关使用,所以可以得出不等式:2(8-n)-2-1≥5。而由于作为子网网络地址的比特位为n位,因此能够划分的子网网段为2n个,如此可以得到另一个不等式:2n≥20。
从不等式2n≥20中可以得出n的取值为5、6、7、8。从不等式2(8-n)-2-1≥5中,可以得出n的取值为0、1、2、3、4、5。综合考虑两个条件,n的取值为5。也就是说,可以将C类地址网段201.222.5.0/24划分为32个29位掩码的子网网段。每个网段分别如下。
201.222.5.0~201.222.5.7
201.222.5.8~201.222.5.15
…
201.222.5.240~201.222.5.247
201.222.5.248~201.222.5.255
划分子网的时候,每个子网网段的掩码位数不一定要相同,可以根据实际情况调整子网掩码的长度。如图1-69所示,某公司准备用C类网络地址192.168.1.0进行IP地址的子网规划。公司共购置了5台路由器,一台路由器作为企业网的网关路由器接入当地ISP,其他4台路由器连接4个办公点,每个办公点20台PC。从图中可以看出,需要划分8个子网,4个办公点各网段需要21个IP地址(包括一个路由器接口,作为网关),与网关路由器相连的4个网段各需要两个IP地址。最终子网掩码的规划是,4个办公点网段采用子网掩码255.255.255.224,预留5位作为主机位,可以容纳最多25-2=30台主机。对于4个办公点路由器和网关路由器相连的网段,预留2位作为主机位,可用主机地址为22-2=2个,链路两端各一个。
对于图1-69中的子网划分,每一个子网使用不同的网络标识ID,不同子网的主机数不一定相同,所以在划分子网的时候,没有采用固定长度的子网掩码。这种子网掩码的划分方式称为可变长子网掩码(Variable Length Subnet Mask,VLSM)技术。对主机数目比较多的子网采用较短的子网掩码,对主机数目比较少的子网采用较长的子网掩码,这种方案能节省大量的地址,节省的这些地址可以用于其他子网上。
VLSM 技术将一个网段划分成了多个网段,那么网络在通告路由的时候会导致路由条目的大量增加。为了减少网络中的路由条目,对应于VLSM技术,还有无类域间路由技术(Classless Inter Domain Routing, CIDR)。
图1-69 可变长子网掩码
CIDR由RFC1817定义。CIDR突破了传统IP地址分类边界,可以将路由表中的若干条路由汇聚为一条路由,极大地减少了路由表的规模,提高了路由器的可扩展性。
如图1-70所示,一个ISP被分配了一些C类网络,198.168.0.0~198.168.255.0。该ISP准备把这些C类网络分配给各个用户群,目前已经分配了3个C类网段给用户。如果没有实施CIDR技术,ISP的路由器的路由表中会有3条下连网段的路由条目,并且会把它通告给Internet上的路由器。通过实施CIDR技术,可以在ISP的路由器上把这3条网段198.168.1.0、198.168.2.0、198.168.3.0汇聚成一条路由198.168.0.0/16,这样 ISP 路由器只向Internet通告198.168.0.0/16这一条路由,大大减少了路由表的数目。
IP编址与路由——子网掩码介绍
IP编址与路由——IP地址规划与使用
图1-70 无类域间路由(CIDR)
值得注意的是,使用 CIDR 技术汇聚的网络地址的比特位必须是一致的,如上例所示。如果上图所示的ISP连接了一个172.178.1.0网段,那么这个网段路由将无法被汇聚。
1.5.3 IP网络排错
网络搭建完毕后,如何对网络进行验证,确保能够正常工作?或者网络出了故障后,如何进行故障的判断和定位?下面对几种常见的应用进行了介绍。
1.ping
ping是用来检查IP网络连接及主机是否可达的常用方法。如路由器之间、主机与路由器之间的连通性问题都可以使用ping来判断。ping使用一系列ICMP的消息来确定目的地址是否可达,以及通信是否延时和丢包情况。ping 实际上是一个发出请求并等待响应的过程。发起 ping 命令的源端首先向目的地址发送“Echo”消息并等待回应。如果“Echo”包到达目的地址,并且在确定时间周期内从目的地成功返回“Echo Reply”包给源端,则ping成功。一旦超过时间周期则会显现“Request timed out”请求超时的消息。
如图1-71所示,在RTA上使用ping命令测试与RTB互联的IP地址的连通性,收到了RTB接口1.1.1.2发回的应答报文。
图1-71 ping检测
ping命令除了基本命令外,还提供许多可选参数供使用,这里列举-a和-i两个参数。
-a source-ip-address:设置发送ICMP ECHO-REQUEST报文的源IP地址。
-i interface-type interface-number:设置发送ICMP ECHO-REQUEST报文的接口。
图1-71中的测试,也可以执行命令ping a 1.1.1.1 1.1.1.2来代表报文从1.1.1.1发送到1.1.1.2。
2.ICMP
ICMP 是网络层的一个重要组成部分。IP 协议并不提供连接的可靠性保证,所以无法获取到网络故障的信息,利用ICMP可以获取网络中问题的反馈。前面提到的ping测试,以及稍后提到的Tracert,实际上都用到了ICMP的协议报文封装。
ICMP的作用为传递差错、控制、查询报文等信息,其报文被封装在基本的IP报头(即20字节)中,协议字段值为1,如图1-72所示。ICMP的报文结构则如图1-73所示。
图1-72 ICMP报文封装
图1-73 ICMP报文结构
ICMP报文由Type、Code、Checksum和unused字段组成。不同的消息报文其格式略有些不同,这里对几个常用的参数做介绍。
(1)类型(Type)。
Type表示ICMP消息类型,以下为常用的几种消息类型,如表1-13所示。
表1-13 ICMP消息类型
(2)代码(Code)。
同一个 ICMP 消息类型中通过不同的代码表示不同的信息。例如 Type 为3的目的不可达消息(Destination Unreachable),其Code代码就细分了几类,以下列举了4个代码的含义,如表1-14所示。
表1-14 ICMP代码类型
(3)校验和(Checksum)。
该字段占16位,目前没有使用,值为0。
3.Tracert
Tracert可探测源节点到目的节点之间数据报文所经过的路径。IP报文的TTL值在每经过一个路由器转发后减1,当TTL=0时则向源节点报告TTL超时。
如图1-74所示,Tracert首先发送一个TTL为1的UDP报文,因此第一跳发送回一个ICMP错误消息以指明此数据报不能被发送(因为TTL超时)。之后Tracert再发送一个TTL为2的UDP报文,同样第二跳返回 TTL 超时。这个过程不断进行,直到到达目的地,由于数据报中使用了无效的端口号(默认从33 434开始使用,后续UDP报文目的端口号自动加1),此时目的主机会返回一个ICMP的目的不可达消息,表明该Tracert操作结束。Tracert记录下每一个ICMP TTL超时消息的源地址,从而给用户报文提供到达目的地所经过的网关IP地址。
常见应用简介——ICMP、Telnet、FTP
图1-74 Tracert路由跟踪
Tracert同样可以提供测试连通性的功能,当Tracert某一目的地址时,从显示的路径信息可以判断出故障点在什么地方。图1-75所示是Tracert的简单应用示例。
图1-75 Tracert应用示例