第 4 章 网络层(上)
基本概念
-
网络层要设计得尽量简单,向上层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务,不提供服务质量的承诺。若需要可靠的通信,就由更上层(例如运输层)完成负责
-
网络层逻辑上可以分为两个层次:数据层面(也称转发层面)、控制层面,数据层面转发主机之间要传送的数据,控制层面传送路由信息
-
路由器在数据层面转发分组时,是各自独立工作的,往往使用硬件方式,非常快(纳秒级);但是由于控制信息需要协同多个路由器进行,通常使用软件方式完成,速度比较慢(秒级)
-
一般来说,各路由器均集成了控制层面与数据层面。但在新兴的软件定义网络SDN中,控制层面由一个远程控制器(物理上可以是分布式的)完成,在计算完成后会直接在每个路由器中生成转发表,此时路由器中只有数据层面了,速度快、造价低
-
一些中间设备
-
物理层:转发器repeater
-
数据链路层:网桥bridge、交换机switch
-
网络层:路由器router
-
网络层以上:网关gateway
-
参与互连的计算机都使用网际协议IP,这使得可以将他们看成一个虚拟互连网络,不在一个网络上的主机通信起来就像是在同一网络上,多种异构网络可以构成同一个互联网。在这种覆盖全球的IP网上层使用TCP协议,就成为了当今的互联网
要通信的主机之间建立一条逻辑上的虚电路连接(不建立物理连接),沿这条逻辑连接按存储转发方式传送数据报
IP地址
以下的叙述中,未特别说明处的IP地址都认为是IPv4的地址
基本概念
-
对于路由器,其每个端口都有一个IP地址,由于路由器是用来连接多个网络的,也就是会使用至少两个端口,即一个路由器至少会有两个不同的IP地址
-
用转发器或网桥连接起来的网络仍为同一网络,使用同样的网络号
IP地址结构
IPv4地址长度为32bit,以x.x.x.x
的格式来表示,每个x
为8bit,即每个x
的十进制值为0-255,这种表示方法称为点分十进制表示。另外,IP地址可以分为网络号和主机号两部分
在任何网络段中,主机号全为0的称为网络地址、主机号全为1的称为广播地址,不能分配给网络中的主机使用
ABC三类IP地址
A类
A类地址的二进制第一位为0,网络号共8位也就是网络号区间为$ [0,127]$,分别为
0.0.0.0
…
0.255.255.255
1.0.0.0
…
1.255.255.255
…
127.0.0.0
…
127.255.255.255
0.0.0.0\ \dots\ 0.255.255.255\\ 1.0.0.0\ \dots\ 1.255.255.255\\ \dots\\ 127.0.0.0\ \dots\ 127.255.255.255\\
0.0.0.0 … 0.255.255.2551.0.0.0 … 1.255.255.255…127.0.0.0 … 127.255.255.255
其中,网络号为0的作为A类地址的网络地址,网络号为127的作为回送地址,用于网络软件测试和本地进程间的通信。也就是说,A类地址中的网络数最多为
2
7
−
2
=
126
2^7-2=126
27−2=126个
在A类地址中,网络号为10的一般作为专用地址,给局域网中的主机使用
B类
B类地址二进制以10开头,网络号区间为
[
128
,
191
]
[128, 191]
[128,191]
128.0.0.0
…
128.255.255.255
129.0.0.0
…
129.255.255.255
…
191.0.0.0
…
191.255.255.255
128.0.0.0\ \dots\ 128.255.255.255\\ 129.0.0.0\ \dots\ 129.255.255.255\\ \dots\\ 191.0.0.0\ \dots\ 191.255.255.255\\
128.0.0.0 … 128.255.255.255129.0.0.0 … 129.255.255.255…191.0.0.0 … 191.255.255.255
其中,网络号为128.0的作为B类地址的网络地址,也就是说,B类地址中的网络数最多为
2
14
−
1
2^{14}-1
214−1个
在B类地址中,网络号172.16~172.31一般作为专用地址,给局域网中的主机使用
C类
C类地址以110开头,网络号区间为
[
192
,
223
]
[192,223]
[192,223]
192.0.0.0
…
192.255.255.255
193.0.0.0
…
193.255.255.255
…
223.0.0.0
…
223.255.255.255
192.0.0.0\ \dots\ 192.255.255.255\\ 193.0.0.0\ \dots\ 193.255.255.255\\ \dots\\ 223.0.0.0\ \dots\ 223.255.255.255\\
192.0.0.0 … 192.255.255.255193.0.0.0 … 193.255.255.255…223.0.0.0 … 223.255.255.255
其中,网络号为192.0.0的作为B类地址的网络地址,也就是说,B类地址中的网络数最多为
2
21
−
1
2^{21}-1
221−1个
在B类地址中,网络号192.168.0~192.168.255一般作为专用地址,给局域网中的主机使用
子网及子网掩码
使用子网概念的目的是为了将网络划分为多个部分供内部使用,但对于外部来说,仍像一个网络一样
子网地址的结构
子网地址是三级的地址结构,即网络号+子网号+主机号,可以应用于A、B、C三类IP地址。同一个网络中的几个子网在外部看来,仍为一个网络,即子网对外部网络透明
子网掩码
子网掩码也称为子网屏蔽码,可以用来从三级IP地址中提取出网络号。
通过子网掩码计算出本机的网络号和欲通信的目标主机的网络号比较这两个网络号,就可以知道接受方主机是否在本网络上。
如果网络号相同,表明接受方在本网络上,那么可以通过相关的协议把数据包直接发送到目标主机;如果网络号不同,表明目标主机在远程网络上,那么数据包将会发送给本网络上的路由器,由路由器将数据包发送到其他网络,直至到达目的地。
将IP地址和对应的子网掩码,做二进制“与运算”即可得到网络号。也就是说,A类地址的子网掩码为255.0.0.0
(即1111111100000...000(24个0)
);B类地址的子网掩码为255.255.0.0
;C类地址的子网掩码为255.255.255.0
另外,还可以使用/网络号长度+子网号长度
的形式来表示子网掩码,例如对于子网掩码255.255.252.0
也可以表示为/22
对于划分了子网的三级结构,一般为A、B、C类地址中的一种,通过三类地址前1-3bit判断是哪一种标准IP地址,再结合对应的子网掩码就可以得到子网号的部分。
需要注意的是,IP地址本身始终保持32bit的长度,并且三类标准IP地址自身的网络号长度也不改变,子网号占用的是原本主机号部分的长度
例如,对一个需要分64个子网的B类地址,结构为
二进制10开头的16bit网络号+6bit长的子网号+10bit长的主机号
共32bit长
无类域间路由技术CIDR
CIDR使用网络前缀代替标准分类的IP地址的网络号与主机号,不再使用子网的概念,也就是说IP地址是一个二级结构。这个二级结构以网络前缀 主机号
的形式表示。同样的,对于掩码也可以使用斜杠形式表示。
在CIDR中,将网络前缀相同的连续IP地址组成一个 “CIDR地址块”,这个块的大小是可变的,可以将某块地址分配给包括ISP在内的各个机构。
CIDR地址块
一个CIDR地址块由块起始地址与块地址数来表示,以200.16.23.0/20
为例,其起始地址为200.16.23.0
,即网络前缀。这个CIDR地址块中有$ 2{32-20}=2{12}
个
地
址
,
将
这
些
地
址
分
配
给
各
个
主
机
,
也
就
是
说
能
给
个地址,将这些地址分配给各个主机,也就是说能给
个地址,将这些地址分配给各个主机,也就是说能给 2^{12}$个主机分配地址。200.16.23.0/20
对应了20bit长的网络前缀+12bit长的主机号
同样的,对于CIDR来说,主机号全为1的地址为(直接)广播地址
广播地址举例
156.25.0.0/16
:16bit网络前缀+16bit主机号,广播地址为156.25.255.255
156.25.0.0/28
:28bit网络前缀+4bit主机号,广播地址为156.25.0.15
195.1.22.64/27
:27bit网络前缀+5bit主机号,广播地址为195.1.22.95
理论上来说,掩码不一定由连续的1组成,例如掩码255.255.254.112
,但这样非常难以管理,一般不使用
CIDR地址规划方法
也是通过向主机号“借位”用于网络号,达到子网划分的效果
以200.16.23.0/20
为例,要将该地址块均分为4个更小的地址块,需要向地址块借用2bit,分好的4个地址为:200.16.23.0/22
、200.16.27.0/22
、200.16.31.0/22
、200.16.35.0/22
例子中分好的4个地址的前20bit是相同的,由此说明CIDR有地址聚合与路由聚合的能力,将多个地址归并到单一的网络中(构造超网),并且在转发表中只使用一项来表示这些地址,可以减少路由表的压力
最长前缀匹配
使用CIDR进行路由聚合之后,转发表中可能会同时存在好几个可以与目的IP地址匹配的项,此时应选择具有最长网络前缀的路由表项,这就是最长前缀匹配,这样的选择可以使得转发的位置更具体
IP地址相关的解题步骤
IP地址规划方法
一般来说,网络地址规划分6步进行:判断用户对网络与主机数的需求,计算满足用户需求的基本网络地址结构,计算地址掩码,计算网络地址,计算网络广播地址,计算网络主机地址
1.判断网络与主机数的需求
即需要得到网络中最多可能使用的子网数量 N_{net}、网络中最大网段的最多主机数量 N_{host}
2.确定合适的基本网络地址结构
根据 N_{net}确定子网号段的长度 X,使得 N_{net} \le 2^X;根据 N_{host}确定主机号段的长度 Y,使得 N_{host} \le 2^Y
X+Y即为除去网络号段后的长度,据此可确定需要使用的IP地址标准
例如当 X=4,Y=6时,共需要10bit的主机号,则需要使用一块B类地址或两块C类地址
3.计算地址掩码
结合需要的子网号段长度 X确定具体的IP地址结构,确保通过掩码计算出的结果为主机号即可。
也就是说,对于具体的地址结构,开头是所选IP类别对应长度的网络号,接着是 Xbit的子网号,剩下的都给主机号使用
例如当 X=4,Y=6时,选用一块B类地址,其掩码应为255.255.240.0
,即16+4个1与12个0的组合
4.计算网络地址
需要注意的是,主机号全为0或1的作特殊用途,因此每个子网中实际上最多有 2^Y-2个主机。在二进制下可以计算各个子网的网络号。最初有规定不使用第一个和最后一个子网的地址
例如若第一个网络号为128.5.0.0
,则各子网的网络号为128.5.0.0
、128.5.16.0
、128.5.32.0
、…、128.5.240.0
5.计算网络广播地址
每个子网的网络广播地址,为各子网的网络号加上主机号全置1,也就是下一个子网网络号减1
继上例,各子网的定向广播地址为128.5.15.255
、128.5.31.255
、128.5.63.255
、…、128.5.255.255
6.计算各子网中的主机IP地址
显然,主机IP地址不能使用子网的网络地址、也不能使用子网的定向广播地址,介于这两者之间的IP地址就是可用的主机IP地址
继上例,各子网的主机IP地址范围为
128.5.0.1-128.5.15.254
、128.5.16.1-128.5.31.254
、128.5.32.1-128.5.63.254
…、128.5.240.1-128.5.255.254
可变长度子网掩码VLSM地址规划方法
可变长度子网掩码VLSM(Variable Length Subnet Mask)对子网进行层次化编址,以便最有效的利用现有的地址空间。这种技术适用于网络内部不同网段需要不同大小子网的情形。
直观地来说,就是把子网继续分割为若干更小的子网
一般分为3步:根据用户需求确定子网数、计算各子网掩码、确定各子网的IP地址区间
1.确定子网数
调查实际需求,获取需要分的子网数及各子网将要添加的主机数
例子中需要分5个子网,3个子网中需要的主机数分别为25、12、10、6、2
上级分配的网络地址为192.168.10.0
2.计算子网掩码
VLSM的核心思想就是向主机号头部“借位”,使得出现更小的子网,但是对于整体来说,各个子网仍然是逐个递增的样子
分子网时,一般按主机数从大到小来分
第一个子网
25个主机,需要长为5bit的主机号,则借用主机号作为网络号的是3bit,那么该子网的网络地址为192.168.10.0/27
第二个子网
在第一个子网分完的基础上,从192.168.10.32/27
开始继续分。12个主机,主机号需要4bit,网络号增加4bit,该子网的网络地址为192.168.10.32/28
第三个子网
从192.168.10.48/28
开始。10个主机,主机号需要4bit,网络号增加4bit,该子网的网络地址为192.168.10.48/28
第四个子网
从192.168.10.64/28
开始。6个主机,主机号需要3bit,网络号增加5bit,该子网的网络地址为192.168.10.64/29
第五个子网
从192.168.10.72/29
开始。2个主机,主机号需要2bit,网络号增加6bit,该子网的网络地址为192.168.10.72/30
3.确定IP区间
子网 |
子网地址 |
广播地址 |
可用主机IP区间 |
子网1 |
192.168.10.0/27 |
192.168.10.31 |
192.168.10.1-192.168.10.30 |
子网2 |
192.168.10.32/28 |
192.168.10.47 |
192.168.10.33-192.168.10.46 |
子网3 |
192.168.10.48/28 |
192.168.10.63 |
192.168.10.49-192.168.10.62 |
子网4 |
192.168.10.64/29 |
192.168.10.71 |
192.168.10.65-192.168.10.70 |
子网5 |
192.168.10.72/30 |
192.168.10.75 |
192.168.10.73-192.168.10.74 |
CIDR地址规划方法
也是通过向主机号“借位”用于网络号,达到子网划分的效果
以200.16.23.0/20
为例,要将该地址块均分为4个更小的地址块,需要向地址块借用2bit,分好的4个地址为:200.16.23.0/22
、200.16.27.0/22
、200.16.31.0/22
、200.16.35.0/22
例子中分好的4个地址的前20bit是相同的,由此说明CIDR有地址聚合与路由聚合的能力。CIDR通常用在将多个C类地址归并到单一的网络中,并且在路由表中只使用一项来表示这些C类IP地址,可以减少路由表的压力
网际协议——IP
基本概念
-
IP是TCP/IP体系中的两个主要协议之一
-
常与IP协议配套使用的其他三个协议
-
地址解析协议ARP(Address Resolution Protocol)
-
互联网控制报文协议ICMP(Internet Control Message Protocol)
-
互联网组管理协议IGMP(Internet GROUP Management Protocol)
在RFC标准中,ARP协议是放在数据链路层中的,其作用是处理IP和MAC之间的转换,与各种网络接口相关;而ICMP和IGMP使用了IP协议
-
不同网络之间差异是非常大的(例如在用户接入控制、管理控制方式、差错恢复方法上),需要一些中间设备将不同网络连接
-
物理层中间设备:转发器Repeater
-
数据链路层中间设备:网桥/桥接器Bridge
-
网络层中间设备:路由器Router
-
网络层以上中间设备:网关Gateway
-
当研究网络层时,可以将IP数据报视为在不同主机的网络层之间传送
路由转发
路由器是处于第三层网络层的设备,它可以看到数据报首部包含的IP地址。在要转发数据报时,它会将IP数据报重新封装成MAC帧,修改MAC帧首部的源MAC和目的MAC地址,从而实现转发。事实上,路由器还会继续把MAC帧转变为物理层的比特流,以在物理链路上传送,上图中为了便于说明未画出物理层
以上图为例,说明整个转发过程
-
⭐️路由器R1左侧接口收到IP数据报后,逐项查找路由表,将数据报头部的目的IP地址IP2与各表项的子网掩码按位与,发现要到达IP2的网段,不是直连的网络,需要转发到下个路由,且下一跳地址为IP5
-
路由器R1查看ARP缓存表,是否存在IP5对应的表项
若存在,则将表项中的MAC地址(HA5)作为MAC帧的目的MAC地址,将表项中指出的自身接口的MAC地址(HA4)作为MAC帧的源MAC地址,最后从该接口发出即可
若不存在,则发起ARP请求,通过ARP协议获得相关表项
-
⭐️路由器R2左侧接口收到IP数据报后,同样逐项查找路由表,发现IP2对应的网段是直连的,不需要转发到下个路由了
-
路由器R2查看ARP缓存表,是否存在IP2对应的表项
同样通过ARP协议相关操作,将IP数据报封装成MAC帧,源MAC地址为HA6,目的MAC地址为HA2
需要注意的是,从始至终IP数据报首部的源IP和目的IP地址都不会变化,而MAC帧中的源MAC和目的MAC地址不断变化
地址解析协议ARP
在路由转发的过程中,我们得到了一个主机/路由器的IP地址,但是实际上需要知道相应的MAC地址,才能够使用MAC对数据进行传送。ARP的功能就是通过IP地址获得对应的MAC地址
需要注意的是,ARP协议完成的IP到MAC的转换仅限于同一局域网,也就是说,若要找的IP对应的主机和源主机不在同一局域网上,就无法成功进行转换
ARP高速缓存
即ARP表,其中的表项记录着IP地址、MAC地址、生存时间、类型等信息,主机和路由器都会有ARP高速缓存
存在时间超过生存时间(一般为10~20分钟)的表项会自动从ARP表中删除
ARP分组类型
ARP请求分组
想要知道IP对应MAC的主机/路由器在本局域网内广播ARP请求。显然,请求分组中需要明确发送方的IP和MAC地址、目标方的IP地址
ARP响应(应答)分组
目标方收到广播的ARP请求分组后,发现其中的IP和自己的一样,就会向发送方单播ARP响应分组。显然,这其中包括了自己的MAC地址
ARP报文格式
ARP报文承载在数据链路层上,因此其报文是一个MAC帧,格式如下图
其中标蓝色部分的内容是ARP协议中重点关注的内容
-
前14字节是MAC帧的首部,对于ARP来说,帧类型字段值为0x0806
对于ARP请求分组,MAC地址为广播地址,即0xFFFF-FFFF-FFFF
-
硬件类型:对于以太网来说,本字段值为1
-
协议类型:发送方要映射的协议地址类型。ARP显然要映射IP为MAC地址,对于IP地址,本字段值为0x0800
-
硬件地址长度:即MAC地址长度,为6(字节)
-
协议地址长度:即IP地址长度(IPv4),为4(字节)
-
操作类型:1表示ARP请求报文,2表示ARP响应报文
-
源MAC:与帧头部中的以太网源MAC相同
-
目的MAC:ARP请求分组中还不知道目的MAC,此时本字段全为0,即0x0000-0000-0000
❓诶,为什么IP字段只有4字节呢?IPv6怎么办?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)