三层 - 网络层
# 概述功能
# 概述
主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。
网络层传输单位是数据报。
笔记
可以不严谨的把分组与 IP 数据报画等号
# 功能
功能一:路由选择与分组转发 最佳路径
功能二:异构网络互联
功能三:拥塞控制
若所有结点都来不及接受分组,而要丢弃大量分组的话,网络就处于拥塞状态。因此要采取一定措施,缓解这种拥塞。
开环控制 静
闭环控制 动
# SDN 基本概念
# 路由器功能:路由与转发
路由器主要完成两个功能:
- 路由选择(确定哪一条路径),根据特定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表
- 分组转发(当一个分组到达时所采取的动作),处理通过路由器的数据流,关键操作是转发表查询、转发及相关的队列管理和任务调度等。
# 数据平面
数据平面执行的主要功能是根据转发表进行转发,这是路由器的本地动作。
# 传统方法 - 每路由器法
路由选择算法运行在每台路由器中,并且在每台路由器中都包含转发和路由选择两种功能。
具体方法:在一台路由器中的路由选择算法与其他路由器中的路由选择算法通信(通过交换路由选择报文)计算出路由表和转发表。
# SDN 方法
Software-Defined Networking
控制平面从路由器物理上分离。路由器仅实现转发,远程控制器计算和分发转发表以供每台路由。器所使用。
具体方法:路由器通过交换包含转发表和其他路由选择信息的报文与远程控制器通信。因为计算转发并与路由器交互的控制器是用软件实现的,所以网络是 “软件定义的 "。
::: ntoe
远程控制器可能在具有高可靠性的远程数据中心中,并可能由 ISP 或某些第三方管理。
:::
# 控制平面
# 传统方法
路由选择处理器执行控制平面功能。在传统的路由器中,它执行路由选择协议,维护路由选择表于关联链。路状态信息,并为该路由器计算转发表。
# SDN 方法
在 SDN 路由器中,路由选择处理器负责与远程控制器通信,目的是接收远程控制器计算的转发表项。
- SDN 控制器:维护准确的网络状态信息 (远程链路、
交换机路由器和主机的状态) ;为运行在控制平面中的网络控制应用程序提供这些信息(逻辑集中,在多台服务器上实现)。 - 网络控制应用程序:根据 SDN 控制器提供的方法,这些应用程序通过这些方法能够监视、编程和控制下面的网络设备。
# SDN 控制器的三个层次
# IP 数据报 - 格式
# TCP/IP 协议栈
# IP 数据报格式
网络层的重点在于首部,数据部分为传输层的数据
固定部分:20B
版本:4 (IPv4)、6 (IPv6)
首部长度:单位是 4B,范围 5-15,最小为 5(5 * 4B = 20B,即只有固定部分)
区分服务:指示期望获得哪些类型的服务
总长度:首部 + 数据,单位是 1B;实际不会达到最大值,长度过大时进行分片,以满足 MTU。
标识:同一数据报的分片使用同一标识
标志:只有 2 位有意义,
X__
- 中间位 DF(Don't Fragment):DF=1,禁止分片;DF=0,允许分片
- 最低位 MF(More Fragment):MF=1,后面 “还有分片”;MF=0,代表最后一片 / 没有分片
片偏移:指出较长分组分片后,某片在原分组中的相对位置。以 8B 为单位
生存时间(TTL):IP 分组的保质期。经过一个路由器 - 1,变成 0 则丢弃。
协议:数据部分的协议。TCP 很 (6),UDP 很容易遗弃 (17)
首部检验和:只检验首部
源地址:32 位(IPv4)
目的地址:32 位(IPv4)
可变部分
- 可选字段:0-40B,用来支持排错、测量以及安全等措施。
- 填充:补 0,将首部填充为 4B 的整数倍
数据部分:4B 的整数倍
# IP 数据报 - 分片
# 最大传输单元 MTU
链路层数据帧可封装数据的上限,不包括 H、T 部分。
以太网的 MTU 是 1500 字节。
# 分片标识
在 IP 数据报首部的 标识
、 标志
、 片偏移
中体现
# 例题
# IPv4 地址
# IP 地址
连接到因特网上的每台主机(或路由器)都分配一个 32bit/4Byte 的全球唯一标识符,即 IP 地址。IP 地址由互联网名字和数字地址分配机构 ICANN 进行分配。
我们常看到的 xxx.xxx.xxx.xxx
则称之为点分十进制
# IP 编制的历史阶段
- 分类的 IP 地址
- 子网的划分
- 构成超网(无分类编制方法)
# 分类的 IP 地址
# 格式
IP地址::={<网络号>,<主机号>}
NetID 网络号 | HostID 主机网络号 | IP 地址(参考) | 作为 IP 分组源地址 | 作为 IP 分组目的地址 | 用途 |
---|---|---|---|---|---|
全 0 | 全 0 | 0.0.0.0 | 可以 | 不可以 | 本网范围内表示主机,路由表中用于表示默认路由(表示整个 Internet 网络) |
全 0 | 特定值 | 可以 | 不可以 | 表示本网内某个特定主机 | |
全 1 | 全 1 | 255.255.255.255 | 不可以 | 可以 | 本网广播地址(路由器不转发) |
特定值 | 全 0 | 不可以 | 不可以 | 网络地址,表示一个网络 | |
特定值 | 全 1 | 不可以 | 可以 | 直接广播地址,对特定网络上的所有主机进行广播 | |
127 | 任意数(非全 0/1) | 可以 | 可以 | 用于本地软件环回测试,称为环回地址 |
# 私有 IP 地址
# 最大主机数
网络类别 | 最大可用网络数 | 第一个可用的网络号 | 最后一个可用的网络号 | 每个网络中的最大主机数 |
---|---|---|---|---|
A | 1 | 126 | ||
B | 128.0 | 191.255 | ||
C | 192.0.0 | 223.255.255 |
- A 类网络数
-2
,是因为全 0 是保留地址,127 是环回地址 - 最大主机数
-2
,是因为全 0 和全 1 分别为网络地址、广播地址
注意
在一些旧资料中,B、C 类的最大可用网络数分别为128.0.0.1
是不指派的,而可以指派的 B 类最小网络地址为 128.1.0.0
”(C 类也有类似的描述),但其 2023 年的复习指导、谢希仁的计算机网络第 8 版均为
# 网络地址转换 NAT
网络地址转换 NAT (Network Address Translation):在专用网连接到因特网的路由器上安装 NAT 软件,安装了 NAT 软件的路由器叫 NAT 路由器,它至少有一个有效的外部全球 IP 地址。
# 子网划分
# 三级 IP 地址
结构: IP地址::={<网络号>,<子网号>,<主机号>}
# 子网掩码
- 子网掩码中的 1 位为网络号、子网号,0 位主机号。
- 将子网掩码与 IP 知道逐位相与,得到子网网络地址。
笔记
与 (&):除了 1&1,其余都是 0
习题 1:已知 IP 地址是 141.14.72.24,子网掩码是 255.255.192.0,求网络地址。
解:子网掩码中 255
(全 1) 对应的 IP 地址位保留, 0
对应的 IP 地址位为 0,因此本题中唯一要计算的是 72&192
。
0100 1000
1100 0000
0100 0000 = 64
因此网络地址为:141.14.64.0
习题 2:某主机的 IP 地址为 180.80.77.55,子网掩码为 255.255.252.0。若该主机向其所在子网发送广播分组,则目的地址可以是()
解:在 “分类的 IP 地址” 中已知广播地址位主机号全为 1 的地址,因此得
1011 0100.0101 0000.0100 1101.0101 0101(主机IP地址)
1111 1111.1111 1111.1111 1100.0000 0000(子网掩码)
1011 0100.0101 0000.0100 1100.0000 0000(相与,得网络地址)
1011 0100.0101 0000.0100 1111.1111 1111(主机号全1,得广播地址)
即180.80.79.255
# 子网时分组的转发
# 无分类编制 CIDR
# 记法
记法: IP地址::={<网络前缀>,<主机号>}
- 消除了传统的 A 类,B 类和 C 类地址以及划分子网的概念。
CIDR 记法:IP 地址后加上 “/”,然后写上网络前缀(可以任意长度) 的位数。e.g. 128.14.32.0/20
- 融合子网地址与子网掩码,方便子网划分。
CIDR 把网络前缀都相同的连续的 IP 地址组成一个 “CIDR 地址块”。
128.14.35.7/20 是某 CIDR 地址块中的一个地址
10000000 00001110 00100011 00000111 二进制
10000000 00001110 00100000 00000000 最小地址,即 128.14.32.0
10000000 00001110 00101111 11111111 最大地址,即 128.14.47.255
地址块:128.14.32.0/20 成为 "/20 地址块"
地址掩码(子网掩码):11111111 11111111 11110000 00000000
例题:192.199.170.82/27
最大主机数:
最小 IP 地址:192.199.170.0
最大 IP 地址:192.199.170.31
# 构成超网
将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合。
方法:将网络前缀缩短(所有网络地址取交集)。
例题:某路由表中有转发接口相同的 4 条路由表项,其目的网络地址分别为 35.230.32.0/21、35.230.40.0/21、 35.230.48.0/21、 35.230.56.0/21,将该 4 条路由聚合后的目的网络地址为:
00100011.11011110.00100000.00000000
00100011.11011110.00101000.00000000
00100011.11011110.00110000.00000000
00100011.11011110.00111000.00000000
00100011.11011110.00100000.00000000(共同部分,即35.230.32.0/19)
# 最长前缀匹配
使用 CIDR 时,查找路由表可能得到几个匹配结果(跟网络掩码按位相与),应选择具有最长网络前缀的路由。前缀越长,地址块越小,路由越具体。
例题:
这道题中盲猜不是 R3 就是 R2,关键在于 IP 地址是否在 R3 目的网络子网内,
计算可知,132.19.237.5/22 的网络地址为 132.19.224.0,而非 R3 的 132.19.232.0
再次技术可知,132.19.237.5/11 的网络地址为 132.0.0.0,与 R2 匹配。
笔记
实际应按顺序匹配
# ARP 协议
由于在实际网络的链路上传送数据帧时,最终必须使用 MAC 地址。
ARP 协议:完成主机或路由器 IP 地址到 MAC 地址的映射。解决下一跳走哪的问题
ARP 协议使用过程:
检查 ARP 高速缓存,有对应表项则写入 MAC 帧,没有则用目的 MAC 地址为 FF-FF-FF-FF-FF-FF
的帧封装并广播 ARP 请求分组,同一局域网中所有主机都能收到该请求。目的主机收到请求后就会向源主机单播一个 ARP 响应分组,源主机收到后将此映射写入 ARP 缓存(10-20min 更新一次)。
ARP 协议 4 种典型情况:
- 主机 A 发给本网络上的主机 B:用 ARP 找到主机 B 的硬件地址;
- 主机 A 发给另一网络上的主机 B:用 ARP 找到本网络上一个路由器(网关)的硬件地址;
- 路由器发给本网络的主机 A:用 ARP 找到主机 A 的硬件地址;
- 路由器发给另一网络的主机 B:用 ARP 找到本网络上的一个路由器的硬件地址。
ARP 协议自动进行
# 发送数据的过程
# 局域网
# 非局域网
当发送 IP 不在同一局域网时,ARP 请求会由路由器响应,返回路由器接口 MAC 地址
习题:
# DHCP 协议
# 主机如何获取 IP 地址
静态配置,手动配置
动态配置
# 概述
动态主机配置协议 DHCP 是应用层协议,使用客户 / 服务器方式,客户端和服务端通过广播方式进行交互,基于 UDP。
DHCP 提供即插即用联网的机制,主机可以从服务器动态获取 IP 地址、子网掩码、默认网关、DNS 服务器名称与 IP 地址,允许地址重用,支持移动用户加入网络,支持在用地址续租。
- 主机广播 DHCP 发现报文 —— “有没有 DHCP 服务器呀?” 试图找到网络中的服务器,服务器获得一个 IP 地址。
- DHCP 服务器广播 DHCP 提供报文 —— “有!有!有!” 服务器拟分配给主机一个 IP 地址及相关配置,先到先得。
- 主机广播 DHCP 请求报文 —— “我用你给我的 IP 地址啦” 主机向服务器请求提供 IP 地址。
- DHCP 服务器广播 DHCP 确认报文 —— “用吧!” 正式将 IP 地址分配给主机。
# ICMP 协议
ICMP 协议支持主机或路由器:
- 差错(或异常)报告
- 网络探询
发送特定 ICMP 报文
# 差错报告报文(5 种)
终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。无法交付
源点抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。拥塞丢数据,基本不用了
时间超过:当路由器收到生存时间 TTL=0 的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发,送时间超过报文。
参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。首部字段用问题
改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。值得更好的路由
不应发送 ICMP 差错报文的情况
对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
对具有组播地址的数据报都不发送 ICMP 差错报告报文。
对具有特殊地址(如 127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
# 询问报文
- 回送请求和回答报文:主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文。测试目的站是否可达以及了解其相关状态。
- 时间戳请求和回答报文:请某个主机或路由器回答当前的日期和时间。用来进行时钟同步和测量时间。
掩码地址请求和回答报文:不再使用路由器询问和通告报文:不再使用
# 应用
# ping
测试两个主机之间的连通性,使用了 ICMP 回送请求和回答报文。
# Traceroute
跟踪一个分组从源点到终点的路径,使用了 ICMP 时间超过差错报告报文。
发送一连串的报文,将 TTL 分别设为 1、2、3、4....,每一跳都会有 TTL 归零导致的差错报文返回。
# IPv6 地址
IPv4 不够用了
# 数据报文格式
- 基本首部
- 版本:6
- 优先级:区分数据报的类别和优先级
- 流标签:“流” 是互联网络上从特定源点到特定终点的一系列数据报。所有属于同一个流的数据报都具有同样的流标签。(类似 IPv4 的标识)
- 有效载荷长度:扩展首部 + 数据的大小
- 下一个首部:标记下一个扩展首部或上层协议首部
- 跳数限制:相当于 IPv4 的 TTL
- 源地址:
- 目标地址:
# IPv6 和 IPv4 的区别
- IPv6 将地址从 32 位(4B)扩大到 128 位(16B) ,更大的地址空间。
- IPv6 将 IPv4 的校验和字段彻底移除,以减少每跳的处理时间。
- IPv6 将 IPv4 的可选字段移出首部,变成了扩展首部,成为灵活的首部格式,路由器通常不对扩展首部进行检查,大大提高了路由器的处理效率。
- IPv6 支持即插即用(即自动配置),不需要 DHCP 协议。
- IPv6 首部长度必须是 8B 的整数倍, IPV4 首部是 4B 的整数倍。
- IPv6 只能在主机处分片,IPv4 可以在路由器和主机处分片。
- ICMPv6:附加报文类型 “分组过大”。
- IPv6 支持资源的预分配,支持实时视像等要求,保证一定的带宽和时延的应用。
- IPv6 取消了协议字段,改成下一个首部字段。
- IPv6 取消了总长度字段,改用有效载荷长度字段。
- IPv6 取消了服务类型字段。
# 表示形式
一般形式 冒号十六进制记法: 4BF5:AA12:0216:FEBC:BASF:039A:BE9A:2170
压缩形式
# 类型
# IPv6 向 IPv4 过渡的策略
# 双栈协议
双协议栈技术就是指在一台设备上同时启用 IPv4 协议栈和 IPv6 协议栈。这样的话,这台设备既能和 IPv4 网络通信,又能和 IPv6 网络通信。
- 如果这台设备是一个路由器,那么这台路由器的不同接口上,分别配置了 IPv4 地址和 IPv6 地址,并很可能分别连接了 IPv4 网络和 IPv6 网络。
- 如果这台设备是一个计算机,那么它将同时拥有 IPv4 地址和 IPv6 地址,并具备同时处理这两个协议地址的功能。
# 隧道技术
通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。
# 路由算法
# 分类 - 静态路由算法
非自适应路由算法,管理员手工配置路由信息。
优点:简便、可靠,在负荷稳定、拓扑变化不大的网络中运行效果很好,广泛用于高度安全性的军事网络和较小的商业网络。
缺点:路由更新慢,不适用大型网络。
# 分类 - 动态路由算法
自适应路由算法,路由器间彼此交换信息,按照路由算法优化出路由表项。
优点:路由更新快,适用大型网络,及时响应链路费用或网络拓扑变化。
缺点:算法复杂,增加网络负担。
# 分层次的路由选择协议
# RIP 协议
# 基本概念
RIP 是一种分布式的基于距离向量的路由选择协议,是因特网的协议标准,最大优点是简单。
RIP 协议要求网络中每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录(即一组距离)。
距离:通常为 “跳数” ,即从源端口到目的端口所经过的路由器个数,经过一个路由器跳数 + 1。特别的,从一路由器到直接连接的网络距离为 1,RIP 允许一条路由最多只能包含 15 个路由器,因此距离为 16 表示网络不可达。
- RIP 协议只适用于小互联网
# 交换信息
仅和相邻路由器交换信息。
路由器交换的信息是自己的路由表。
每 30 秒交换一次路由信息,然后路由器根据新信息更新路由表。若超过 180s 没收到邻居路由器的通告,则判定邻居没了,并更新自己路由表。
路由器刚开始工作时,只知道直接连接的网络的距离 (距离为 1),接着每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
经过若干次更新后,所有路由器最终都会知道到达本自治系统任何一个网络的最短距离和下一跳路由器的地址,即 “收敛”。
笔记
- 每个交换机每隔 30 秒就会跟相邻的交换机交换信息,最终会得知整个自治系统的信息。
# 距离向量算法
修改相邻路由器发来的 RIP 报文中所有表项
对地址为 X 的相邻路由器发来的 RIP 报文,修改此报文中的所有项目:把 “下一跳” 字段中的地址改为 X,并把所有的 “距离” 字段 + 1。
对修改后的 RIP 报文中的每一个项目,进行以下步骤:
- 路由表中若没有 Net3,则把该项目填入 R1 路由表
- R1 路由表中若有 Net3,则查看下一跳路由器地址:
- 若下一跳是 X,则用收到的项目替换源路由表中的项目;
- 若下一跳不是 X,原来距离比从 x 走的距离远则更新,否则不作处理。
若 180s 还没收到相邻路由器 x 的更新路由表,则把 x 记为不可达的路由器,即把距离设置为 16。
返回
习题