网络层
1. 概述
网络层提供两种服务:面向连接和无连接的传送服务
在互联网中,网络层向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务,网络层不提供服务质量的承诺;
网络层的两个层面:
- 数据层面:路由器根据转发表,把收到分组从查到的对应接口转发出去
- 控制层面:根据路由选择协议所用的路由算法计算路由,创建路由表
路由器之间传送的信息有以下两大类:
- 转发源主机和目的主机之间所传送的数据
- 传送路由信息
2. 国际协议 IP
国际协议 IP(Internet Protocol)是 TCP/IP 体系中两个最主要的协议之一;与协议 IP 配套使用的还有三个协议:
- 地址解析协议 ARP(Arrdress Resolution Protocol)
- 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 网际组管理协议 IGMP(Internet Group Management Protocol)
将网络互相连接起来需要使用一些中间设备,根据中间设备所在的层次,可以有以下四种不同的中间设备:
- 物理层:转发器(repeater)
- 数据链路层:网桥或桥接器(bridge)以及交换机(switch)
- 网络层:路由器(router)
- 网络层以上:网关(gateway),用网关连接两个不兼容的系统需要在高层进行协议的转换;
2.1. IP 地址分类
主要分为ABC三类:
- A类:子网掩码:255.0.0.0,网络号全为 0 的 IP 地址为本网络,网络号最大(127)的 IP 地址用作本地软件环回测试本主机进程之间的通信使用;
- B类:子网掩码:255.255.0.0
- C类:子网掩码:255.255.255.0
2.2. 无分类编址 CIDR
使用 CIDR 的好处就是可以更加有效地分配 IP 地址空间,根据客户地需求选择适当大小地 CIDR 地址块;
无分类域间路由选择 CIDR(Classless Inter-Domain Routing),要点如下:
-
将网络号改称为“网络前缀”,网络前缀位数 n 不固定,0~32 任意取值;使用斜线记法或称为“CIDR记法”,在 IP 地址后面加入斜线“/”,斜线后面是网络前缀所占的位数;可以看出网络前缀越短的地址块所包含的地址数就越多;
-
把网络前缀相同的所有连续的 IP 地址组成一个 “CIDR 地址块”,常使用地址块中的最小地址和网络前缀的位数指名一个地址块;
已知 IP 地址 128.14.35.7/20 是某 CIDR 地址块中的一个地址,现在把它写成二进制表示,前 20 位是网络前缀:128.14.35.7/20 = 10000000 00001110 00100011 00000111
这个地址块的 IP 地址共有 212 - 2个(去掉全1和全0),显然每次计算太麻烦,==常使用地址块中的最小地址和网络前缀的位数指名一个地址块;==即该地址块为:128.14.32.0/20
-
计算机使用 32 位的地址掩码来从 IP 地址迅速计算出网络地址;地址掩码(又称子网掩码)由一连串的 1 和一连串的 0 组成,1 的个数是网络前缀的长度,例如上例中地址掩码是:11111111 11111111 11110000 00000000 = 255.2555.240.0;
根据子网掩码定义可知,早期的分类 IP 地址的子网掩码都是固定的:
- A 类:255.0.0.0
- B 类:255.255.0.0
- C 类:255.255.255.0
把二进制 IP 地址和子网掩码进行按位与(&)运算,即可计算出网络地址:
CIDR 地址中还有三个特殊的地址块:
-
当前缀 n = 32,32 位 IP 地址都是前缀,没有主机号,这其实就是一个 IP 地址,这个特殊的 IP 地址用于主机路由
-
当前缀 n = 31,这个地址块中只有两个 IP 地址,主机号分别为 0 和 1,这个地址块用于 点对点链路
-
当前缀 n = 0,同时 IP 地址也是全 0,即 0.0.0.0/0,这用于默认路由;
一个大的 CIDR 地址块中往往包含很多小的地址块,所以在路由器的转发表中就利用较大的一个 CIDR 地址块来顶替许多较小的地址块,这种方法称为路由聚合(route aggregation)
2.3. IP 地址的特点
- 由网络前缀和主机号组成,是一种分等级的地址结构;分等级的好处是:
- IP 地址管理机构只负责分配网络前缀(第一级),主机号(第二级)由申请单位自行分配,方便了 IP 地址的管理;
- 路由器根据目的主机所连接的网络前缀(即地址块)来转发分组(而不考虑主机号),可以减少转发表所占的存储空间,缩短查找转发表的时间;
- IP 地址是标志一台主机(或路由器)和一条链路的接口;
- 用转发器或交换机连接起来的若干个局域网仍为一个网络,因为它们具有相同的网络前缀;具有不同网络前缀的局域网必须使用路由器进行互连;
- 互联网平等对待每一个 IP 地址;
两个路由器直接相连时,使用了 /31 地址块,专门为点对点链路的两端使用,这种特殊的“网络”一般被称为 无编号网络(unnumbered network) 或 匿名网络(anonymous network)
2.4. Mac 地址与 IP 地址
二者的称呼区别:
- Mac 地址固化在网卡上的 ROM 中,常称为 硬件地址 或 物理地址
- IP 地址常称为 虚拟地址、软件地址 或 逻辑地址
从层次的角度看:
- Mac 地址是数据链路层使用的地址
- IP 地址是网络层和以上各层使用的地址,是一种逻辑地址(IP 地址是由软件实现的)
IP 地址放在 IP 数据报中,MAC 地址放在 MAC 帧的首部。
在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用 IP 地址的 IP 数据报一旦交给数据链路层,就被封装成为 MAC 帧。MAC 帧在传送时使用的源地址和目的地址都是 MAC 地址,这两个 MAC 地址都写在 MAC 帧的首部中(各占 6 个字节);
连接在通信链路上的站点收到 MAC 帧后,根据 MAC 帧首部中的 MAC 地址决定收下或丢弃;只有剥去 MAC 帧首部和尾部后把 MAC 层的数据上交给网络层后,网络层才能在 IP 数据报中找到源 IP 地址和目的 IP 地址;
- 在 IP 层抽象的互联网只能看到 IP 数据报
- 路由器 R1、R2、R3 都有两个 MAC 地址,因为它同时连接着两个局域网
- 路由器只根据目的站的 IP 地址进行转发,与源站 IP 地址无关
- 在局域网的链路层,只能看见 MAC 帧
2.5. 地址解析协议 ARP
ARP(Arrdress Resolution Protocol)地址解析协议适用于根据一个机器(主机或路由器)的 IP 地址解析出其相应的 MAC 地址;
IP 地址是 32 位数据,MAC 地址是 48 位数据,格式不同,且主机更换了网络适配器后 MAC 地址也会变化,IP 地址与 MAC 地址二者之间并不存在简单的映射关系;
每个主机都设有一个 ARP 高速缓存(APR Cache),其内存有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表(从 IP 地址到 MAC 地址的映射表),定时动态更新(新增或超时删除);
在本局域网内,若主机 A 要向主机 B 发送的 IP 数据报,其经过的过程如下:
- 查表:查找本机的 ARP 高速缓存看是否有主机 B 的 IP 地址
- 若有,取出其 MAC 地址写入 MAC 帧通过局域网把该 MAC 帧发送至此 MAC 地址
- 若无,则主机 A 自动运行 APR
- 广播:ARP 进程在本局域网上广播发送一个 APR 请求分组(大意是:“我的 IP 地址是 xxx.xxx.xxx.xxx,MAC 地址是 xx-xx-xx-xx-xx-xx,我想知道 IP 地址为 xxx.xxx.xxx.xxx 的MAC地址”)
- 回应:所有在本局域网上运行的主机收到了 ARP 请求分组(包括主机 B),主机 B 的 IP 与 ARP 请求分组中要查询的 IP 地址一致,收下该 ARP 分组,将其写入自己的 APR 缓存中,并向主机 A 发送 ARP 响应分组(大意是:“我的 IP 地址是 xxx.xxx.xxx.xxx,我的 MAC 地址是 xx-xx-xx-xx-xx-xx”);
- 更新:主机 A 收到 ARP 响应分组后,将其 IP 地址到 MAC 地址的映射写入 APR 高速缓存中;
- 重发:重新执行步骤 1
注意由于互联网上的主机可以随时加入和删除,同一主机的 MAC 地址也可能因为网卡的更换而改变,所以 ARP 高速缓存中的每一个映射地址项目都应该有一个生存时间(过期时间),超时则删除;
ARP 适用于解决同一局域网内主机或者路由器的 IP 地址和 MAC 地址的映射问题;
注意:这并不代表着 APR 协议只用于同一局域网内,从 IP 地址到 MAC 地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的,ARP 协议使用的四种典型情况:
在许多情况下需要多次使用 ARP,重复下述的四种情况;
- 发送方是主机(如 H1),要把 IP 数据报发送到同一个网络上的另一台主机(如 H2)。具体执行过程如上述;
- 发送方是主机(如 H2),要把 IP 数据报发送到另一个网络上的一台主机(如 H3 或 H4)。具体执行过程拆分为两部:
- H1 发送 ARP 请求分组(在网络 N1 上广播),找到 N1 上的一个路由器 R1 的 MAC 地址;
- 剩余的工作由路由器 R1 完成,R1 要做的就是 步骤 3 和 步骤 4;
- 发送方是路由器(如 R1),要把 IP 数据报转发到与 R1 连接在同一个网络 N2 上的主机(如 H3)。
- R1 发送 ARP 请求分组(在网络 N2 上广播)找到目的主机 H3 的 MAC 地址;
- 发送方是路由器(如 R1),要把 IP 数据报转发到网络 N3 上的一台主句(如 H4),H4 与 R1 不是连接在同一个网络上的。
- R1 发送 ARP 请求分组(在网