掌握 IP 编址就是掌握因特网的网络层!(雾)
Bulter Lampson—— 在一个时刻做一件事,将他做好。一个接口应当俘获一个抽象的最低限度的要件。不要进行一般化,一般化通常是错误的。

# 第四章 网络层:数据平面

# 网络层概述

# 数据平面

网络层中每台路由器的功能,决定到达路由器输入链路之一的数据报如何转发到该路由器的输出链路之一,每台路由器如何选择。

传统方式的转发功能基于目标地址和转发表,SDN 方式基于多个字段和流表。

# 控制平面

网络范围的逻辑,控制数据报沿着源主机到目的主机的端到端路径中路由器的路由方式,协调本地路由器的转发动作。

传统的路由方法在路由器中实现,SDN 方法在远程的服务器中实现。

传统方式,分布式的去做,控制平面和数据平面在一起完成。

SND 有一个统一的服务器,实现解耦合的功能。

# 网络层功能

  1. 转发,在数据平面实现
  2. 路由选择,在控制平面中实现

# 网络服务模型

# 对于单个数据报服务

  1. 可靠传送
  2. 延迟保证

# 对于数据报流的服务

  1. 保序数据报传送
  2. 保证流的最小宽带
  3. 分组之间的延迟差

# 路由器工作原理

路由器包括输入端口、交换结构、输出端口和路由选择处理器

基于目标的转发:仅仅依赖于 IP 数据报的目标 IP 地址。

通用转发:基于头部字段的任意集合进行转发。

“匹配” 加 “动作”

# 输入端口和基于目的地转发

# 查找

使用转发表来查找输出端口

路由器用分组目的地址的前缀与该表中的表项进行匹配。当有多个匹配时,使用最长前缀匹配规则

# 其他动作

  • 出现物理层和链路层处理
  • 检查分组的版本号、检验和以及寿命字段
  • 必须更新用于网络管理的计数器

# 输入端口缓存

排队延迟以及由于输入缓存溢出造成丢失

# 交换

  1. 经内存交换

    先将分组存入内存,再将分组复制到输出端口

  2. 经总线交换

    一次只有一个分组能够快约总线,路由器的交换带宽受总线速率的限制。

  3. 经互联网络交换

    使用更复杂的互联网络,例如使用纵横式交换机、榕树网络,纵横式交换机就是一种由 2N 条总线组成的互联网络。

# 输出端口处理

取出排队的分组进行传输,执行所需的链路层和物理层传输功能。

# 何处出现排队

# 输入排队

HOL 阻塞 Head-Of-the-Line 线路前端阻塞

只要输入链路上的分组到达速率达到其容量的 58%,在某些假设前提下,输入队列长度就会无限制地增大。

# 输出排队

如何丢弃?

  • 弃尾
  • 根据优先权
  • 随机丢弃

# 分组调度

  1. 先进先出

    FIFO first in first out

    FCFS first come first service

  2. 优先权排队

    优先权高的先进行传输

    非抢占式优先权排队:一旦分组开始传输,就不能打断

  3. 循环和加权公平排队

    保持工作排队,不允许链路保持空闲

    类 n 的分组传输完毕后,就传输类 n+1 的分组,如果该类暂时没有分组,就跳到下一个类进行传输。

    每类的服务时间可能是带有权重的。

# 网络协议

以网络为单位来访问和向外传输

掌握 IP 编址就是掌握因特网的网络层!

# IPv4 数据报格式

版本

首部长度

服务类型

数据报长度

16 比特标识

标志

13 比特片偏移

寿命

上层协议

首部检验和

32 位比特源 IP 地址

32 比特目标 IP 地址

数据

# 数据报分片

因为最大传送单元(MTU Maximum Transmission Unit)在链路层的限制,IP 数据报的长度有限,并且,不同链路也许会有不同的链路层协议,有不同的 MTU,所以要对于数据报做一些调整。

分片,重新组装,标记表示、标志和片偏移字段【20 字节头部、数据、偏移量、最后一片的标志比特为 0】

# IPv4 编址

32 比特(4 字节),共有约 40 亿个。

点分十进制记法

无类别域间路由选择 a.b.c.d/x

为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端点。这些隔离的网络中的每一个都叫作一个子网。

# 分类编址:

  1. A 类 1/7/24
  2. B 类 2/14/16
  3. C 类 3/21/8

# 特殊的地址:

  1. 全 0 - 本网络、本主机

  2. 全 1 - 广播

  3. 127.x.x.x 回路地址

  4. 专用网络地址

    • A 10.0.0.0-10.255.255.255
    • B 172.16.0.0-172.31.255.255
    • C 192.168.0.0-192.168.255.255

# 主机如何获得 IP 地址?

  1. 获取一块地址

    从一个 ISP 获取一组地址,例如该 ISP 被分配了地址 200.23.16.0/20,ISP 可以将地址块分成八个长度相等的连续地址块

    ICANN Internet Corporation for Assigned Names and Numbers 分配地址的机构

  2. 获取主机地址:动态主机配置协议

    DHCP Dynamic Host Configuration 动态主机配置协议 即插即用协议 零配置协议

    DHCP 建立在 UDP 上

    1. DHCP 服务器发现
    2. DHCP 服务器提供
    3. DHCP 请求
    4. DHCP ACK

# 网络地址转换

NAT Network Address Translation 网络地址转换

专用网络 / 具有专用地址的网络 —— 其地址仅对该网络中的设备有意义的网络

局域网的地址仅在自己内部有效。

与外界通信利用 NAT 转换表,记录对应的 WAN 端和 LAN 端的 IP 地址和端口号。

但是会造成 NAT 穿越问题(客户端如何和网络内部的端系统建立链接)。

# 安全性

# 防火墙

阻挡所有的 ICMP 回显请求分组

基于源和目标 IP 端口号阻挡

跟踪 TCP 连接

# 入侵检测系统

检查数据报的首部字段和有效载荷,匹配数据库中的特征,如果发现匹配,则产生告警。

# IPv6

IP 地址更新为 128 比特

删去的字段:取消分片与重新组装(丢给端系统)、取消首部检验和(丢给链路层和运输层),这些都是为了加快网络中的 IP 转发速度,除去(甩锅)冗余的步骤

# IPv4 和 IPv6 之间如何通信

采用隧道,比如说,两个 IPv6 的地址进行通信,可以把整个 IPv6 的数据报放到 IPv4 数据报的有效载荷字段当中。

# 通用转发和 SDN

匹配 + 动作

通用转发基于 OpenFlow 的讨论,匹配加动作转发表在 OpenFlow 中称为流表(flow table),它的每个表项包括:

  1. 首部字段值的集合
  2. 计数器集合
  3. 当分组匹配流表项时采取的动作集合

# 匹配

OpenFlow 匹配入端口、链路层字段、网络层字段、运输层字段

# 动作

  • 转发
  • 丢弃
  • 修改字段

# 其他

网络层中的设备过多

数量众多、功能各异的中间盒

# 传统方式实现网络功能的问题

  1. 垂直集成》昂贵,不利于创造新的生态

  2. 分布式、固化设备功能、网络设备朱磊繁多

  3. 管理困难

  4. 流量工程较为困难

# SDN

SDN 远程集中,将数据平面和控制平面分离

  1. 水平集成

  2. 业界生态开放,快速创新

  3. 产业巨大