网络层提供的服务
- 从发送主机向接收主机传输数据(segment)
- 发送主机:将数据段封装到数据报中(datagram)
- 接收主机:向传输层交付数据段(segment)
- 每个主机和路由器都运行网络层协议(不是端到端而是主机到主机)
- 路由器检验所有穿越它的 IP 数据报的头部域
- 决策如何处理 IP 数据报
网络层核心功能
转发与路由(路由/转发表)
- 转发 forwarding,将分组从路由器的输入端口转移到合适的输出端口
- 路由 routing,通过路由算法确定分组从源到目的经过的路径
路由算法(协议)确定通过网络的端到端的路径,转发表确定在本路由器如何转发分组。
连接建立
并不是所有的网络都要建立连接
- 某些网络的重要功能:ATM、帧中继、X.25
- 数据分组传输之前两端主机需要首先建立虚拟/逻辑连接
- 网路设备(如路由器)参与连接的建立
网络层的连接与传输层不太一样,网路层的连接经过的几条路径上的所有网络层设备都要参与记住这个连接。
- 网路设备(如路由器)参与连接的建立
网络层连接与传输层连接的对比
- 网络层连接:两个主机之间(路径上的路由器等网络设备都参与其中)
- 传输层连接:两个应用进程之间,只有应用进程记住连接(对中间网络设备透明)
网络层服务模型
网络层为发送端(主机)到接收端(主机)的数据报传送通道(channel)提供什么样的服务模型(service model)?
CBR 固定比特,类似电路仿真
无连接服务 connection-less service
- 不事先为系列分组的传输确定传输路径
- 每个分组独立确定传输路径
- 不同分组可能传输路径不同
- 典型的无连接服务网络:数据报网络(datagram network)
连接服务 connection service
- 首先为系列分组的传输确定源到目的经过的路径(建立连接)
- 沿该路径(连接)传输系列分组
- 系列分组传输路径相同
- 传输结束后拆除连接
- 典型的连接服务网络:虚电路网络(virtual-circuit network)
连接服务与无连接服务
- 数据报(datagram)网络与虚电路(virtual-circuit)网络是典型两类分组交换网络
- 数据报网络提供网络层无连接服务
- 虚电路网络提供网路层连接服务
- 类似于传输层的无连接服务(UDP)和面向连接服务(TCP),但是网络层服务提供主机到主机服务,网络的核心实现
虚电路
- 一条从源主机到目的主机,类似于电路的路径(逻辑连接)。
- 最主要的区别是虚电路采用分组交换,每个分组的传输利用链路的全部带宽,电路交换采用复用的技术。
- 源到目的路径经过的网络层设备共同完成虚电路功能。
- 通信过程:呼叫建立(call setup)、数据传输、拆除呼叫。
- 每个分组携带虚拟电路标识(VCID),而不是目的主机地址。
- 虚电路经过的每个网络设备,维护每条经过它的虚拟电路连接状态。
- 链路、网络设备资源(带宽、缓存等)可以面向VC进行预分配(可预期的服务性能),如 ATM 的电路仿真。
VC 的具体实现
- 从源主机到目的主机的一条路径(一条路径上各段的 VCID 可能不同)。
- 虚电路号(VCID),沿路每段链路一个编号,如何确定,每个链路所能拥有的 VCID 数不一致。
- 沿路每个网络层设备,利用转发表记录经过的每条虚电路。
- 沿某条虚电路传输的分组,携带对应虚电路的 VCID,而不是目的地址。
- 同一条 VC,在每段链路上的 VCID 通常不同,路由器转发分组时依据转发表改写/替换虚电路号。
VC 转发表
虚电路信令协议(signaling protocols)
用于 VC 的建立、维护与拆除,需要进行路径选择(路由)。
应用虚电路的网络:ATM、帧中继(frame-relay)网络等。
目前的 Internet(数据报网络) 不采用这种协议,未来不一定。
数据报网络
- 网络层无连接
- 每个分组携带目的地址
- 路由器根据分组的目的地址转发分组
- 基于路由协议/算法构建转发表
- 检索转发表
- 每个分组独立选路
最长前缀匹配优先
在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口(entry)。
路由表,32位,40多亿,路由聚合,最长前缀匹配优先,越长越精确。
数据报网络 or VC 网络
Internet (数据报网络)
- 计算机之间的数据交换
- 弹性服务,没有严格时间要求
- 链路类型众多
- 特点、性能各异
- 统一服务困难
- “智能”端系统(计算机)
- 可以自适应、性能控制、差错恢复
- 简化网络,复杂边缘
ATM (VC 网络)
- 由电话网路演化而来
- 核心业务是实时对话
- 严格的时间、可靠性需求
- 需要有保障的服务(时延、带宽)
- “哑(dumb)”端系统,非智能
- 电话机
- 传真机
- 简化边缘,复杂网络
Internet 网络层
路由协议
路由选择:RIP、OSPF、BGP
IP 协议
- 寻址规约(conventions)
- 数据报(分组)格式
- 分组处理规约
ICMP 协议
- 差错报告
- 路由器”信令”
IP 数据报(分组)格式
版本号
占 4 位,IP 协议版本号,比如 4=IPv4,6=IPv6
首部长度
占 4 位,IP 分组首部长度,最多能表示 15,显然首部长度超过 15 字节了,所以该字段是以 4 字节为单位的长度。
比如 该字段为5 则,IP 首部长度为 20(5*4)字节。典型的 IP 数据报起始数据为 0x45
服务类型(TOS)
占 8 位,指示期望获得哪种类型的服务,1998 年这个字段改名为区分服务,只有在网络提供区分服务(DiffServ)时使用,
一般情况下不使用,通常 IP 分组的该字段(第二字节)的值为 00H
总长度字段
总长度字段占 16 位,IP 分组的总字节数(首部+数据)。
- 最大 IP 分组的总长度:65535B
- 最小的 IP 分组首部:20B
- IP 分组可以封装的最大数据(理论上,链路不会允许这么大):65535-20=65515B
TTL
生存时间,占 8 位,IP 分组在网络中可以通过的路由器数(或跳步数),即一个分组最多经过几个路由器,路由器转发一次分组,
TTL减一,如果TTL=0,路由器丢弃该 IP 分组,并发送 ICMP。
协议
协议字段占 8 位,指示 IP 分组封装的是哪个协议的数据包,实现复用、分用。
比如:6 为 TCP,表示封装的是 TCP 段,17为 UDP,表示封装的是 UDP 数据报。
首部校验和
首部校验和字段占 16 位,实现对 IP 分组首部的差错检测,计算校验和时,该字段置全0,采用反码算数运算求和,和的反码作为首部校验和字段。
逐跳计算、逐跳校验,因为 TTL 和其他字段可能在转发的时候会变。
源目IP
选项字段
长度可变,范围在 1-40B 之间,携带安全、源选路径、时间戳和路由记录等内容,实际上很少被使用。
填充
长度可变,范围在 0-3B,目的是补齐整个首部,符合 32 位对齐,即保证首部长度是 4 字节的倍数。
IP 分片
最大传输单元 (MTU)
网络链路存在 MTU ,即链路层数据帧可封装数据的上限,不同链路 MTU 不同,尽量不分片,一个分片丢失,导致源端重发整个分组。
IP 分片与 重组
大 IP 分组向较小 MTU 链路转发时,可以被分片(fragmented)。
- 1 个 IP 分组分为多片 IP 分组
- IP 分组到达目的主机后进行”重组”(reassembled)
- IP 首部的相关字段用于标识分片以及确定分片的相对顺序
路由器不负责分片重组,只分不重组,到达目的主机的 IP 层后重组。
标识
标识一个 IP 分组,IP 协议利用一个计数器,每产生 IP 分组计数器加1,作为该 IP 分组的标识(还要加上源目 IP 地址,协议等)。
标志位
占 3 位,第一位保留,第二位 DF,第三位 MF。
- DF Don’t Fragment
- DF = 1 禁止分片,路由器遇到这种数据报直接丢弃,并发送 ICMP。
- DF = 0 允许分片
- MF More Fragment
- MF = 1 非最后一片
- MF = 0 最后一片(或未分片)
片偏移
占 13 位,一个 IP 分组分片封装原 IP 分组数据的相对偏移量。以八字节为单位。
IP 分片过程
- 假设原 IP 分组总长度为 L,待转发链路的 MTU 为 M
- 若 L > M,且 DF=0,则可以/需要分片
- 分片时每个分片的标识复制原 IP 分组的标识
- 通常分片时,除最后一片,其他分片均分为 MTU 允许的最大分片
- 一个最大分片可封装的数据应该是 8 的倍数,因此,一个最大分片可封装的数据为:
d = floor((M - 20)/8)*8
,向下取整 - 需要的总片数为:
n = cell((L-20)/d)
,向上取整,20=首部长度 - 每片的片偏移字段取值为
F(i)=d/8 * (i-1) 1<= i<=n
- 每片的总长度
L(i) = d + 20 1<=i<n
L(i) = L - (n-1)d i=n
- 每片的 MF 标志位为:最后一片为0,其余为1
如果 MTU=1504,结果还是一样。
IP 略