计算机网络——网络层:数据层面
网络层概述
网络层的作用可以抽象为两个:
- 转发,当一个包交换器收到一个数据包时,需要将数据包在出口端进行发送。
- 路由,决定数据包的转发路径,其中,路由的方式由路由算法决定。
一个关键的组件就是路由表,一个路由表通过路由算法生成,指导数据包如何进行转发。
因此,我们将网络层分为两个层面,数据层和控制层。
其中,控制层由路由算法组成,负责维护转发表,而数据层则进行对数据包进行匹配、操作。
路由器
网络层最关键的设备就是路由器,一个路由器由下面的部分组成:
- 入口:数据从入口输入到路由器。
- 出口:数据从出口发送。
- 转发结构:定义了如何从入口读取数据,从出口发出数据。
- 路由处理器:维护转发表、执行转发算法。
转发
一般的,转发规则分为两种:
- 基于目的地的转发:路由器只根据网络层的 IP 地址进行转发。
- 一般化转发:路由器可以根据 5 层结构中所有数据进行转发。
基于目的地的转发使用掩码进行匹配,使用最长匹配算法进行匹配。
交换
交换一般通过三种方式:
- 通过内存交换,硬件将数据包拷贝到共享内存,出口通过读取共享内存中的内容进行读取数据包进行发送。
- 通过总线交换,各个端口连接到同一个总线,数据包在总线中移动,同一个时间总线只能传输一个数据包。
- 内联总线网络,将总线设计为交叉网络,这样同一个时间能够传输多个数据包。
出口
无论是出口还是入口的缓冲区并不是越大越好,如果越大则会造成缓冲区臃肿,即每个数据包都必须进行排队。一般的通过公式 B = C × R T T B = C \times RTT B=C×RTT 计算缓冲区大小。
包调度
缓冲区队列分为三种类型:
- FIFO 队列,即一般的队列。
- 优先队列,路由器先对接收到的数据包进行分类,为每一个级别的数据包都创建一个 FIFO 队列。
- 轮询权值公平队列(WFQ),与优先队列唯一不同的是,每一个数据包都有一个权值,它能够保证每个权值的数据包都能占用带宽的 w / W w / W w/W 。
IP 协议
IPv4 数据报格式
- 版本号:默认为 4。
- 头部大小:根据 Options 部分而调整。
- TOS : 用于网络拥堵控制。
- 数据报大小。
- 标识号、标志、段偏移:用于 IP 分段数据报。
- TTL :每次经过一个路由器,数据报的 TTL 将会减 1,直到为 0 路由器丢弃。
- 上层协议号:指明了传输层所使用的协议。
- 校验和:检验数据。
- 32 位的源和目标 IP 地址。
- Options 可选头部分。
- Data 载荷数据。
主机每一个物理端口都称为接口,每一个接口都有一个 IP 地址,在一个子网中,使用 “xxx.xxx.xxx.xxx/xxx” 的格式标记子网。
DHCP 协议
DHCP 是一个应用层协议,使用 67 的 UDP 端口进行传输,自动配置主机的网络地址。
DHCP 协议分为四个类型的数据包,发现、提供、请求、和 ACK 。
NAT 网络地址转换协议
路由器一般具有网络地址转换协议,将输入或输出数据包的 IP 地址进行改写,链接两个不同的网络地址。
IPv6
- 版本号:一般为 6。
- TC:拥堵控制。
- Flow lable: 流控制。
- 负载大小。
- Next hdr : 上一层协议。
- HL: 类似于 TTL.
- 128 位的源和目的地址。
- 负载数据。
SDN 网络与网络中间件
如果路由数量多,网络结构复杂,通常使用 SDN 网络,即将每一个路由器的转发表通过一个公共的控制器配置、下发。
网络中间件是除了路由器的转发功能的其他网络设备,包括DHCP、NAT、IDS、防护墙等。
在数据层面,其核心的哲学思想就是“匹配-操作”,即先对数据包进行匹配,再根据匹配的结果做出操作,包括转发、改写、丢弃等等。