因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层服务模型定义了分组在发送与接收端系统之间的端到端运输特性,向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。
网络层的功能包括:
转发
将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作,通过转发表实现。
路由选择
当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径,通过路由选择算法实现。路由选择算法决定了插入路由器的转发表中的值。
- 连接建立
ATM、帧中继、MPLS 等虚电路网络要求从源到目的地沿着所选择的路径彼此握手,以便在给定源到目的地连接中的网络层数据分组能够在开始流动之前建立起状态。
因特网为数据报网络,不要求连接建立。
虚电路网络连接与运输层连接的区别:
- 运输层连接参数由端系统决定,网络中的路由器不知情
- 虚电路网络中的连接,沿两个端系统之间的路径上的路由器都要参与虚电路的建立,且每台路由器都完全知道经过它的所有虚电路
使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。
与 IP 协议配套使用的还有三个协议:
版本 :
4 比特,有 4(IPv4)和 6(IPv6)两个值,规定了数据报的 IP 协议版本。
首部长度 :
4 比特,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为固定部分长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。确定 IP 数据报中数据部分实际从哪里开始。大部分 IP 数据报不包含此选项,默认 20 字节长度。
区分服务 :
用来获得更好的服务,一般情况下不使用。使得不同类型的 IP 数据报能够相互区别开来(如实时数据报与非实时流量等)。
总长度 :
16 比特,包括首部长度和数据部分长度。以字节计算。
生存时间 :
TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
协议 :
指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。仅在一个 IP 数据报到达其最终目的地时才有用。协议号作用类似于端口号,将网络层与运输层绑定。(端口号绑定运输层与应用层)
首部检验和 :
因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分,仅针对首部,可以减少计算的工作量。用于帮助路由器检测收到的 IP 数据报中的比特错误。
标志:
最后一个片的标志比特被设为 0,其他片的标志为 1。保证完整性。
标识 :
在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。主机将其发送的每个数据报标识号加 1,目的地端系统通过检查标识号判定是否来自同一数据报。
片偏移 :
和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。指示片属于初始数据报的哪个位置,以保证有序性。
分片后的重组由端系统完成,在 IP 层完全重组后才会被传递给运输层,若数据不完整则被丢弃(若运输层使用 TCP,则通过重传恢复丢包)。
分片存在问题:复杂化路由器与端系统、致命的 DoS 攻击,如 Jolt2(所发送的片流中不存在偏移量为 0 的片导致重组崩溃)或发送交迭的 IP 片,无法适当排列,导致重组崩溃。
选项 / 可选部分:
允许 IP 首部被扩展,但是很少使用,由于对每个数据报首部不包括选项字段中的信息可节约开销,IPv6 数据报也去除该字段。
数据 / 有效载荷:
通常情况下指要交付给目的地的运输层报文段(TCP / UDP),特殊情况下可传输 ICMP 报文。
版本:
4 比特,用于标识 IP 版本号
流量类型:
8 比特,含义类似于服务类型 TOS 字段
流标签:
20 比特,标识流。
有效载荷长度:
16 比特无符号整数,给出了 IPv6 数据报中跟在定长的 40 字节数据报首部后面的字节数量。
下一个首部:
标识数据报中的内容(数据字段)需要交付给哪个协议(如 TCP 或 UDP),使用与 IPv4 首部中协议字段相同的值。
跳限制:
转发数据报的每台路由器将对该字段内容减 1,若达到 0 时丢弃该数据报。
源地址和目的地址
数据:
有效载荷部分。到达目的地时,有效载荷从 IP 数据报中移出并交给在下一个首部字段中指定的协议处理。
扩大的地址容量
将 IP 地址长度从 32 比特增加到了 128 比特,除了单播地址与多播地址之外,还引入了任播地址(可以使数据报交付给一组主机中的任意一个)。
简化而高效的 40 字节首部
可更快地处理 IP 数据报,更灵活的选项编码。
流标签与优先级
流概念:发送方要求进行特殊处理的流,如一种非默认服务质量或需要实时服务的流:音频与视频传输等,传统应用如电子邮件等就不是流。
优先级字段可给出一个流中某些数据报的优先级,以便指明某些应用的数据报(如 ICMP 分组)比其他应用的数据报(如网络新闻)有更高的优先权。
删除字段
双栈:
IPv6/IPv4 结点
即 IPv6 结点还具有完整的 IPv4 实现。但是传输过程中可能丢失某些信息。
建隧道
将中间的 IPv4 路由器集合称为一个隧道,路由器传输过程中封装 IPv6 数据。
IP 地址的编址方式利用点分十进制记法,经历了三个历史阶段:
由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
A 类:
A 类地址总共有 128 个地址块,其中 3 个地址块用作特殊用途,因此可以在互联网上使用的有 125 个,每一个地址块中可以拥有个 2 24 − 2 = 16777216 − 2 = 16777214 2^{24}-2=16777216-2=16777214 224−2=16777216−2=16777214 主机。(扣除的两个为特殊地址,全 0 和全 1)
B 类:
B 类地址总共有 16384 个地址块,其中 16 个地址块用作特殊用途,因此可以分配给企业使用的地址块有 16368 个,每一个地址块中可以拥有个 $ 2^{16}-2 $ 主机。
C 类:
C 类地址总共有 2097152 个地址块,其中 256 个地址块用作特殊用途,因此可以分配给企业使用的地址块有 2096896 个,每一个地址块中可以拥有个 254 主机。
D 类:
用于多播使用,只有一个地址块。
E 类:
保留未用,只有一个地址块。
第一个八位组(二进制) | 转化为十进制 | 地址所属类 |
---|---|---|
0xxxxxxxx | 1 - 126 | A |
10xxxxxx | 128 - 191 | B |
110xxxxx | 192 - 223 | C |
1110xxxx | 224 - 339 | D |
1111xxxx | 240 - 255 | E |
网络号为 127 的地址:被保留用于环回测试。指向本地结点并允许结点发送测试数据包给自己而不产生网络流量
结点地址(主机号)全为 0:意指 “网络地址”
结点地址全为 1:意指指定网络的 “所有结点”(广播地址),例如:128.2.255.255 意指 128.2 网络的 “所有结点”
全 0 的网络地址(即 0 网段):被保留用来指向默认路由
route -PRINT 可以用来查看路由表信息
子网定义:为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端点。这些隔离的网络中的每一个都叫做一个子网
通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。
IP 地址 ::= {<网络号>, < 子网号 >, < 主机号 >}
要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。
注意,外部网络看不到子网的存在。
无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。
IP 地址 ::= {<网络前缀号>, < 主机号 >}
实例:a.b.c.d/x,x 指示了地址第一部分中的比特数。外部路由器仅需考虑地址的前缀比特 x 即可进行数据报转发。剩余的 32 - x 比特可用于区分该组织内部设备。
CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。
CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。
一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种使用单个网络前缀通告多个网络的能力、通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网 。
在路由表中的项目由 “网络前缀” 和 “下一跳地址” 组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。
IPsec 是一种非常流行的安全网络层协议,其在虚拟专用网 VPN 中也得到了广泛部署,并设计为 IPv4 和 IPv6 向后兼容,且在不同模式下无需替换因特网中的所有路由器和主机中的协议栈即可使用。
运输模式:
如两台主机要安全通信, IPsec 仅需在这两台主机中可用,所有其他路由器和主机能够继续运行普通的 IPv4。面向连接实现,大致流程如下:
IPsec 会话可提供的服务类型:密码技术约定、IP 数据报有效载荷的加密、数据完整性、初始鉴别。
ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。
Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。
Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
目的:执行拥塞控制
原理: 使拥塞的路由器向一台主机发送一个 ICMP 源抑制报文,以强制该主机减小其发送速率。
由于 TCP 在运输层本身拥有拥塞控制机制,无需利用网络层中的反馈信息,即 ICMP 抑制报文,该报文在实践中很少使用。
Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。
由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。
有三个专用地址块:
VPN 使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚拟指好像是,而实际上并不是,它有经过公用的互联网。
下图中,场所 A 和 B 的通信经过互联网,如果场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信,IP 数据报的源地址是 10.1.0.1,目的地址是 10.2.0.3。数据报先发送到与互联网相连的路由器 R1,R1 对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器 R1 的全球地址 125.1.2.3,目的地址是路由器 R2 的全球地址 194.4.5.6。路由器 R2 收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为 10.2.0.3,就交付给 Y。
专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以通过 NAT 技术,利用 NAT 路由器上的 NAT 转发表来将本地 IP 转换为全球 IP。
在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。
该协议允许主机发现并配置邻近 NAT 协议,提供了有效而健壮的 NAT 穿越解决方案,允许外部主机使用 TCP 或 UDP 向 NAT 化的主机发起通信会话。
要求:
功能流程:
路由器从功能上可以划分为:路由选择和分组转发。
分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。
输入端口:
交换结构:
连接路由器的输入端口与输出端口,是网络路由器中的网络。
三种主要类型:
经内存交换:
在 CPU 的直接控制下完成,路由器可视作共享内存的多处理机,用一个线路卡上的处理将分组交换写入适当的输出端口内存中。
经总线交换:
输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择器的干预。分组可被所有输出端口接收,但仅有与其在输入端口设定的标签相匹配的端口可保存该分组并去除标签。单线程、共享式。
经互联网络(纵横式)交换:
总线交换的升级版本,2N 条总线( N 个输入端口、N 个输出端口)。交叉点通过交换结构控制器能够在任何时候开启和闭合,能够并行转发多个前往不同输出端口的分组。
纵横式潜在阻塞:1)一般阻塞:两个分组前往相同输出端口,其中一个需要等待;2)线路前部阻塞:若 AB 在一个输入端口, C 在另一个输入端口, AC 均要传输到输出端口 D,此时不仅 A 要等待,排在 A 之后的 B 也要等待。
输出端口:
路由选择处理器:
1)提取 IP 数据报告首部中的目的 IP 地址
2)判断目的 IP 地址所在的网络是否与本路由器直接相连。如果是,就直接交付给目的网络,如果不是执行 3)
3)检查路由器表中是否有目的 IP 地址的特定主机路由。如果有,按特定主机路由转发:如果没有,执行 4)
4)逐条检查路由表。若找到匹配路由,则按照路由表进行转发:若所有路由均不匹配,则执行 5)
5)若路由表中设置有默认路由,则按照默认路由表转发:否则,执行 6)
6)向源主机报错
路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。
互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议,以此解决公共因特网中路由选择计算复杂性高等问题,实现组织内部的管理自治。
一个 AS 是一个处于相同管理与技术控制下的路由器集合,在 AS 之间都运行相同的路由选择协议。每个 AS 通常又包含多个子网。
可以把路由选择协议划分为两大类:
RIP 是一种基于距离向量的路由选择协议。距离是指跳数,即沿着从源路由器到目的子网(包括目的子网)的最短路径所经过的路由器数量。直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。
路由选择更新信息在邻居之间约每 30 秒通过 RIP 响应报文(RIP 通告)相互交换一次,响应报文包含了该 AS 内部多达 25 个目的子网的列表以及发送方到其中每个子网的距离。经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。
距离向量算法:以迭代、分布式的方式计算出最低费用路径,没有结点拥有关于所有网络链路费用的完整信息,每个结点仅有与其直接相连链路的费用知识即可开始工作。
RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模,通常被设置在下层 ISP 和企业网中。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。
开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。
开放表示 OSPF 不受某一家厂商控制,而是公开发表的,不强制使用如何设置链路权值的策略,为给定链路权值集合提供确定最低费用路径路由选择的机制。
OSPF 是一种基于链路状态算法的协议,以所有结点之间的连通性及所有链路的费用作为输入,用完整的、全局性的网络指示计算出从源到目的地之间的最低费用路径。通常被设置在上次 ISP 中。
特性:
优点:
对 OSPF 其上层协议的值为 89,需要自己实现可靠报文传输、链路状态广播等功能。
所有路由器可通过使用 OSPF 构建关于整个自治系统的相同完整拓扑图继而确定最短路径。相比于 RIP,OSPF 的更新过程收敛的很快。
在一个 OSPF 区域内,一台或多台区域边界路由器负责为流向该区域以外的分组提供路由选择。
在 AS 内部仅有一个 OSPF 区域被配置为主干区域,为 AS 内其他区域之间的流量提供路由选择,该主干包含 AS 所有的区域边界路由器与一些非边界路由器。
负责向在本 AS 之外的目的地转发分组的路由器被称为网关路由器,从相邻 AS 获取可达性信息和向该 AS 中所有路由器传播可达性信息是两项由自治系统间路由选择协议处理的任务。因特网中所有 AS 均运行相同的 AS 间路由选择协议——【BGP4】。
BGP(Border Gateway Protocol,边界网关协议)使得每个子网能够向因特网的其余部分通告它的存在,确保所有 AS 知道该子网的存在及如何到达。
提供服务:
AS 内部存在网状的 TCP 连接,对于每条 TCP 连接,位于该连接端点的两台路由器称为 BGP 对等方。沿着该连接发送所有 BGP 报文的 TCP 连接称为 BGP 会话(会话线不总是与物理链路对应)。在同一个 AS 中的两台路由器之间的会话被称为内部 BGP 会话(iBGP),跨越两个 AS 的 BGP 会话称为外部 BGP 会话(eBGP)。
BGP 的目的地并非主机而是 CIDR 化的前缀,每个前缀表示一个子网或一个子网的集合。在任何 AS 中的网关路由器接收到 eBGP 学习到的前缀后,该网关路由器使用它的 iBGP 会话来向该 AS 中其他路由器发布这些前缀,路由器(网关或非网关)接收到前缀时为该前缀在其转发表中创建一个项。
BGP 属性:
AS-PATH:
包含了前缀的通告已经通告的那些 AS 的自治系统号 ASN,用以检测和防止循环通告。
NEXT-HOP:
是一个开始某 AS-PATH 的路由器接口,可被路由器用于正确配置转发表。
**路由消除规则:**对于相同前缀存在两条或多条路由时,BGP 顺序地调用下列消除规则直到留下一条路由
AS 之间的路由选择很困难,主要是由于:
BGP 只能寻找一条比较好的路由,而不是最佳路由。
每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。
参考:
https://cyc2018.github.io/CS-Notes/#/notes/计算机网络 - 网络层
《计算机网络:自顶向下方法》