华为HCIA路由与交换技术实战
上QQ阅读APP看书,第一时间看更新

1.5 IP报文结构与IP编址

视频讲解

按TCP/IP由下往上的顺序,本节讲解网络层协议相关的内容,如图1.34所示。网络层包含了许多协议,其中最为重要的是IP。IP是网络层其他协议的基础,扎实掌握IP之后,学习其他的协议会简单得多。下面讲解IP报文具体结构及其工作背景,以及IP编址规则。

图1.34 按由下往上的顺序学习协议栈

1.5.1 IP报文结构

1.4节介绍以太网帧结构的时候提到以太网帧中的Type字段值为0x0800时,表示该帧的网络层协议为IP协议,如图1.35所示。

图1.35 包含IP报文的以太网帧

确定这是一个IP报文之后,链路层去掉帧头和帧尾,然后交给IP协议处理。IP头包含哪些字段,为什么需要这些字段,它们都是做什么用的?下面将详细介绍。

IP头总长度为20~60B,最少20B,这是固定的部分。此外还有可选项IP Options,在特殊场景中需要用到这个字段,通常不填,需要时最长40B。所以,IP头部长度范围是20~60B,不固定,如图1.36所示。

图1.36 IP头部结构

Version:用来区分IPv4和IPv6报文,IPv4取值为4,IPv6取值为6。

Header Length:表示IP头长度,一般情况下这个值是20,如果有IP Options字段,取值会大于20,但是不超过60。

DS Field:Different Service Field,区分服务字段。工作背景:网络中可以发送不同业务数据,例如语音、电视、邮件等。不同业务对网络质量要求不一样,语音业务稍微出现延迟或者丢包,用户会明显感觉通话质量下降;邮件业务延迟1~2s基本没影响,甚至延迟1min也可以接受。为了提高用户体验,需要为不同的业务提供不同的处理优先级,语音报文要优先转发,邮件报文则可以降低一点优先级。DS Field用于给不同的报文贴上优先级标签,例如将语音报文的DS设置成7,邮件报文设置成1,网络设备就可以根据这个优先级提供不同服务。在网络出现拥塞的情况下,会优先发送高优先级的报文,保证不会丢包和延迟。

Total Length:IP报文总长度,Total Length-Header Length=Data Length。IP报文总长度减去头部长度,就是数据部分的总长度。

下面介绍几个与包分片相关的字段:Identification、Flags和Fragment Offset。如图1.37所示。

图1.37 IP分片相关的字段

工作背景:报文在网络设备上转发的时候有时需要做分片处理,如图1.38所示。路由器接口有一个参数是MTU(Maximum Transmission Unit,最大传输单元),表示当前接口最大转发报文长度,默认值是1500,可以根据实际情况配置为其他值。

如果路由器左右两边接口的MTU参数不一样,左边是1500B,右边是1400B,此时主机A发送一个1500B的报文给主机B,经过路由器的时候,路由器会对该报文做分片处理,分成2片,第一片1400B,第二片100B。

主机B收到这两个分片的时候,如何判断这是独立的两个报文,还是同一个报文的两个分片呢?这个时候就需要用到分片标识进行判断,分片标识共3个字段:

Identification:分片编号,同一个报文的不同分片取值相同,如图1.39中的分片1、分片2、Identification值都是99,主机B就可以判断这两个分片是同一个报文的。

图1.38 分片应用背景

图1.39 分片标志位设置

Flags:分片标志,用来标识是否还有更多分片。图1.39中分片1的Flags值设置为1,表示后面还有分片,主机B收到这个报文会先放到缓存,等待后面分片到齐;分片2的Flags设置为0,表示后面没有分片了,主机B看到这个标识就会整合所有分片,还原为最初的报文,然后进一步处理。

Fragment Offset:分片偏移量,用来定位分片在原始报文的位置,分片1的偏移量是0,分片2的偏移量是1400。在这个例子里只有2个分片,通过Flags即可判断哪个先哪个后,如果分片数量超过3个,就必须通过这个偏移量确定分片的先后顺序。

下面介绍一个常用的参数Time to Live,报文生存时间,如图1.40所示。

图1.40 Time to Live生存时间

Time to Live:简称TTL,用来防止网络环回。应用场景:如图1.41所示,主机A和主机B之间有3个路由器A、B、C,通常情况下主机A发报文给主机B,应该是经过路由器A,路由器B,然后到达主机B,但是有时候路由器配置不当会导致报文到达路由器B之后,并没有交给主机B,而是交给路由器C,然后路由器C又交给路由器A,产生环回。

图1.41 TTL应用场景

环回报文如果不进行消除,会越积越多,最后导致设备崩溃。TTL可以消除环回。

工作原理:主机A发出报文的时候,TTL设置为255,在网络中转发,每经过一个3层网络设备TTL值就减1,因此TTL在报文从路由器A传到路由器B的时候变成254,从路由器B传到路由器C的时候变成253,依次递减。如果网络出现环路,经过255次转发之后TTL=0。任何网络设备收到一个报文,如果它的TTL=0,就直接丢弃。这样就可以消除报文无限环回。

注:丢弃报文的设备会根据报文头中的源IP地址向源端发送ICMP错误消息。

下面介绍Protocol参数的作用,如图1.42所示。

图1.42 Protocol字段

网络层在接收并处理报文后,要确定下一步如何处理报文。IP报文头中的协议字段标识了下一步将交给哪个协议处理。与以太帧头中的Type字段类似,协议字段也是一个十六进制数。该字段可以标识ICMP(Internet Control Message Protocol,因特网控制报文协议,对应值0x01),也可以标识TCP(Transmission Control Protocol,传输控制协议,对应值0x06)和UDP(User Datagram Protocol,用户数据报协议,对应值0x11),如图1.43所示。

图1.43 IP头Protocol字段含义

如果Protocol字段为0x06,那么主机会去掉IP头部,然后把里面的数据交给TCP处理。其他值的处理与此相似,都会分别交给相应的协议处理。

下面介绍IP头部的后面3个参数:Header Checksum、Source IP和Destination IP。

Header Checksum:头部校验和,是将IP头部的所有字段用特定算法做运算,得出的一串校验数字,用来检验收到的IP头部是否和最初发的一致。

Source IP Address:源IP地址,指报文发送端的IP地址。

Destination IP Address:目标IP地址,指接收端的IP地址。

IP Options:可选参数,该字段平时用得很少,有兴趣可以自己查询资料学习,这里不展开介绍。

IP头的参数相对较多,重点要理解每个参数的工作背景。

1.5.2 IP编址

主机之间一般是通过IP地址互相通信,例如主机A通过ping 192.168.1.3检测主机C是否可达,192.168.1.3就是主机C的IP地址。如图1.44所示。

图1.44 主机间用IP地址互相通信

192.168.1.3这个IP地址实际上由两部分组成,分别是网络位和主机位,如图1.45所示。

图1.45 主机C的IP地址组成

网络位标识的是一个网络,在这个网络里可以有多个主机。主机位标识的是主机在网络中的编号,例如主机A的编号是1,主机B的编号是2,主机C的编号是3,主机D的编号是4,这4个主机在同一个网络里面,网络编号是192.168.1。通过网络编号+主机编号就可以确定一个主机的具体IP地址。

同一个网络里的主机通信时可以直接发送报文,例如主机A ping主机C时,发现目标IP 192.168.1.3与自己的IP 192.168.1.1处于同一个网络,就可以直接封装以太网报文,MAC地址填主机C的MAC地址,然后发给对方。

如果主机A ping另外一个网络里面的主机F,它的IP地址是192.168.2.1,此时主机F的网络编号是192.168.2,主机A发现其与自己处于不同的网络,不能直接通信,需要将报文发给网关,由网关进行转发。此时,主机A发出来的以太网帧的目标MAC是网关的MAC地址,如图1.46所示。

可以看到,网络编号决定了主机发送报文时的发送对象,如果目标网络编号与自己的相同,直接发送;如果不同,则发给网关,由网关转发。

在实际应用中,主机位取值为0的IP地址表示一个网络号,一般用于路由表,以节省路由条目。如图1.47所示。

主机位取值全1的IP地址是一个广播地址,用来在当前网段内广播报文,如192.168.1.255。广播报文对应的以太网帧中,目标MAC也是一个广播MAC,取值FF-FF-FF-FF-FF-FF。

每一个网段内都有2个特殊IP地址,一个是主机位取值全0,另一个是主机位取值全1。

图1.46 不同网络主机间的通信

图1.47 网络号的应用

IP地址长度是4B,每字节8位,可以表示的数值范围是0~255,十进制和二进制的对应关系如图1.48所示。

图1.48 十进制和二进制的对应关系

一个二进制数如何转化成十进制数呢,如00101011对应的十进制数是多少?图1.49中对应的是8位二进制数,哪一位取值是1,就将其对应的数值加起来,00101011共有4位取值为1,对应的数值分别是32、8、2、1,全部相加的和是43,对应的十进制数就是43,如图1.49所示。

图1.49 二进制转十进制

反过来,一个十进制数如何换算成二进制数,如十进制数43对应的二进制数是多少?将43不断被2除,得到的一系列余数逆序排列就是对应的二进制数。43/2=21,余1;21/2=10,余1;10/2=5,余0,以此类推,一直除到商等于0,不足位用0补齐,如图1.50所示。最终得到00101011。

4字节的IP地址,每字节换算成十进制之后,十进制数之间用点号隔开,得到的就是对应的IP地址。如图1.51所示。

图1.50 十进制转二进制

图1.51 IP地址的换算

192.168.1.1这个IP地址的网络位占3B,主机位占1B,为什么网络位占3B,而不是1B或2B呢?这是由IP地址的取值范围决定的,IPv4地址总共分为5类,每一类对应的网络位长度和取值范围都不一样。

如图1.52所示,A类IP地址网络位占1B,主机位占3B,其中网络位的最高位取值固定为0,则网络位的取值范围是00000000~01111111,对应的十进制数是0~127。

那么100.1.1.1这个IP地址的网络位应该是几字节呢?因为100在0~127之间,所以这是一个A类地址,对应的网络位长度就是1B。

B类地址网络位占2B,最左边2位取固定值10,网络号范围128.0~191.255。

C类地址网络位占3B,最左边3位取固定值110,网络号范围192.0.0~223.255.255。

D类地址没有网络位,最左边4位取固定值1110,用作组播地址。

E类地址也没有网络位,最左边4位取固定值1111,目前没有使用。

图1.52 IPv4地址分类

可以看出,不同类的IP地址取值范围不一样,根据IP地址的取值就可以判断其属于哪一类,网络位占几位。

IP地址分公网IP地址和私网IP地址,使用公网IP地址可以在全世界范围内找到目标主机。不同国家使用的公网IP地址范围不一样,由国际组织统一分配。私网IP地址只在私有网络内部使用,不同国家、不同公司的内部私网可以使用相同的私网IP地址,互不影响。

私网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地址:

127.0.0.0~127.255.255.255:用于本地环回,如127.0.0.1,无论有没有连接网络,ping 127.0.0.1这个地址总能成功,如果不成功就表示网卡有故障。

0.0.0.0:用于默认路由。

255.255.255.255:用于全网广播。

除了私网IP地址和特殊IP地址之外的都是公网IP地址。

实际应用中,除了配置主机IP地址之外,通常还需要配置子网掩码,如图1.53所示。

子网掩码做什么用呢?前面介绍网络号的时候提到过,主机发送报文前需要判断目标IP地址是否和自己处于同一个网络,如果是就直接发送,如果不是就发给网关。

那么怎么判断目标IP地址是否和自己处于同一个网络呢?这个时候就需要用子网掩码计算,子网掩码由一串连续的1和0组成,前半部分全是1,后半部分全部是0,如255.0.0.0、255.255.0.0。0和1不能混插,如255.0.255.0就不是一个合法的子网掩码。

图1.53 IP地址和子网掩码

主机A的IP地址是192.168.1.3,子网掩码是255.255.255.0,目标IP地址是192.168.1.7,此时主机怎么进行计算呢?首先主机会用自己的子网掩码和目标IP地址进行与运算,算出目标IP地址的网络号,如图1.54所示,先展开成二进制,然后做与运算,最后再还原成十进制。

图1.54 网络地址计算过程

同样地,主机A也会将自己的IP地址192.168.1.3和子网掩码做与运算,得到的网络号是192.168.1.0。通过比较,发现目标IP地址的网络号与自己的网络号相同,就可以判断目标主机和自己处于同一个网络,否则就是在不同网络。

在明确告知子网掩码的情况下,可以很容易算出网络号。如果没有明确子网掩码,能不能算出网络号呢?如IP地址:111.102.3.189、129.132.143.7,这两个IP地址的网络号分别是多少?

前面介绍IP地址分类的时候,我们知道不同类的IP地址有不同取值范围,111在范围0~127内,表明这是A类地址,网络位1B,默认的子网掩码是255.0.0.0,因此它的网络号是111.0.0.0。129在128~191范围内,表明这是B类地址,网络位2B,默认的子网掩码是255.255.0.0,因此它的默认网络号是129.132.0.0。

下面介绍可用主机数的概念。我们知道一个主机IP地址由2部分组成,前面是网络号,后面是主机号。A类地址主机号占3B;B类地址主机号2B;C类地址主机号占1B,如图1.55所示。

图1.55 C类地址的主机号

1B可以表示的值的范围是00000000~11111111,共256个值。其对应的IP地址范围是192.168.1.0~192.168.1.255,其中主机位全0和全1有特殊用途,分别表示网络号和广播地址。那么可以分配给主机使用的IP地址范围是192.168.1.1~192.168.1.254,共2n-2(256-2=254)个。

在实际应用中,直接使用A类,B类或者C类地址都会出现浪费情况,如图1.56所示。3个网段:

网段A的网络号是192.168.1.0,共30台主机,将会浪费224个IP地址;

网段B的网络号是192.168.2.0,共20台主机,将会浪费234个IP地址;

网段C的网络号是192.168.3.0,共10台主机,将会浪费244个IP地址。

(注:子网掩码通常用掩码长度表示,如255.0.0.0,用数字8表示网络号长度,255.255.255.0用数字24表示。192.168.1.1/24表示IP地址是192.168.1.1,掩码是255.255.255.0。)

图1.56 IP地址浪费现象

这是C类地址的情况,如果是A类,或者B类,主机位分别是3B和2B,地址浪费更严重。怎样才能避免IP地址浪费呢?可以用变长子网掩码(Variable-Length Subnet Masking,VLSM)解决。

192.168.1.0是C类网段,默认子网掩码是255.255.255.0,为了避免IP地址浪费,可以将掩码扩展2位,如图1.57所示,扩展后的子网掩码由24位变成26位,对应的十进制数子网掩码是255.255.255.192。

2位可表示的值有00、01、10、11,因此就可以将原来的192.168.1.0网段划分为4个子网,这4个子网的网络号如图1.57所示。

图1.57 变长子网掩码

这4个子网的可用主机位由原来的8位减为6位,可用的IP数是2n-2,也就是26-2=62个。

这里问个问题,扩展子网掩码后192.168.1.65与192.168.1.130是处于同一个子网吗?参照图1.57可以看出这两个IP地址处于不同子网。

通过子网划分后,每个子网支持62台主机IP地址,可以满足原来的组网要求,同时避免了IP地址浪费,如图1.58所示。每个子网62台主机,还会有一点浪费,还可以再次扩展掩码,减少浪费吗?自己尝试计算一下。

图1.58 子网划分

需要注意,子网划分时只能扩展,不能收缩,如192.168.1.0/24网段可以扩展成25、26、27位掩码,但是不能缩减成23、22位掩码。

下面再介绍一种跟子网掩码有关的场景。如图1.59所示,路由器右边有4个网段,路由表就有4个条目,向外通告的时候也有4个条目。这4个条目非常相似,有没有办法合成1个条目,提高通告效率呢?

图1.59 路由通告

实际上这4个条目,除了第三字节有差异之外,其他字节都是一样的。把第三字节展开成二进制之后,里面又有6位一样,如图1.60所示。

图1.60 第三字节二进制展开

4个不同网段的前22位一样,因此,通告路由的时候可以只通告10.24.0.0/22一条路由,提高了效率,如图1.61所示。

在实际应用中,路由表会非常庞大,将路由精简,不仅提高了通告效率,也减轻了其他路由器的负担。这个精简路由的技术称为无类域间路由(Classless Inter Domain Routing,CIDR),也称为路由聚合。

图1.61 精简路由通告条目

1.5.3 小结

本节首先介绍了IP头部各字段的含义及其相关的工作背景,然后介绍了IP地址的结构及5种不同的IP地址分类,最后介绍了变长子网掩码和无类域间路由。

本节介绍的每个知识点都很重要,在整个NA课程里面是核心知识点,同时因为相对来说比较抽象,也是难点,需要熟练理解掌握。学习的关键是要理解它们的工作背景并稍加记忆,同时多做练习。

练习题

1.公司某主机IP地址是193.168.1.3,它的网络号是多少?这是公网IP地址还是私网IP地址?如果公司有5个子网,每个子网的主机数分别是24、28、10、15、7,应该如何划分子网,子网掩码应该是多长?对应的网络号是多少?

2.10.12.13.194/23与10.12.13.234/23属于同一个子网吗?

3.IP头部TTL字段的作用是什么?

4.子网掩码的作用是什么,在什么情况下主机会用到?