CNATDA 第四章学习笔记

Computer Networking: A Top-Down Approach (8th Edition)第四章 The Network Layer: Data Plane 的学习笔记

Overview of Network Layer

Network Layer 可以被细分为 data plane 和 control plane 两部分

data plane 的主要功能是 forwarding也称作 switching即一个 router 将 input link 收到的数据转发到正确的 output link

control plane 的主要功能是 routing即决定从 sending host 到 receiving host 的路径

router 中会有一个 forwarding table从 packet header 中选取某些 field 用来 index forwarding table得到 outgoing link interface

计算 forwarding table 则是 control plane 的任务有两种实现方式

  • the traditional approach: router 之间根据 routing protocol 互相通信根据 routing algorithm 计算得到 forwarding table
  • the SDN approach: router 只实现 forwarding而 routing 由一个 remote controller 完成router 向 remote controller 发送信息由 remote controller 计算得到 forwarding table 发给 router这个 remote controller 通常是由软件实现的所以这种方法被称作 software-defined networking (SDN)

Whats Inside a Router?

router 一般包含以下部分

  • input ports

    • incoming link 的 physical layer 和 link layer
    • input queue
    • lookup:
      • 从 forwarding table 查 output port
      • 将 control packet例如包含 routing protocol information 的 packetforward 到 routing processor
  • switching fabric: 连接 input ports 和 output ports

  • output ports

    • outgoing link 的 link layer 和 physical layer
    • output queue
  • routing processor: 得到 forwarding table进行 network management

    • traditional: 执行 routing protocol
    • SDN: 与 remote controller 通信

为了保证通信速度forwarding 的用时需要在 ns 级所以要用硬件实现而 control plane 的用时一般在 ms 或 s 级可以用软件实现

Input Port Processing and Destination-Based Forwarding

多个 input port 可以合并到一个 line card 上

forwarding table 会从 routing processor 给每个 line card 都复制一份从而可以在每个局部分别计算不需要集中计算

对于 destination-based forwardingforwarding table 一般是 index 为 IP 地址前缀value 为 link interface采用 longest prefix matching

lookup 通常要在 ns 级别的时间内完成而 forwarding table 很大不仅需要通过硬件实现还需要使用特殊的算法或存储器例如使用 TCAM

input port processing 除了 lookup 还有 physical-layer 和 link-layer processing还需要检查/更新 packet versionchecksumTTL更新 network management 的 counter

Switching

switching 有多种形式

  • via memory: packet 从 input port 复制到 memory 再复制到 output port如果使用集中的 memory 而非每个 line card 分别的 memory则传输速率会受 memory 的速率限制
  • via bus: 将 packet 加上一个 switch-internal label 再通过 bus 发送给所有 output port收到后根据 label 决定是否保留这个 packet传输速率会受 bus 的速率限制
  • via interconnection network: 每个 input port 对应一个 bus每个 output port 对应一个 bus每对 input port bus 和 output port bus 之间都有 crosspoint通过控制 crosspoint 来控制从哪传到哪结构和 ROM 类似这是 non-blocking 的只要两个 packet 的 output port 不同就可以同时传输

Input Queuing

如果 switching fabric 的速率达到了所有 input port 的速率之和则不会发生 input queuing否则可能要等待其他 packet 在 switching fabric 上传输

以 switching via interconnection network 为例只有多个 packet 传输到同一个 output port 才会发生 input queuing但是一个 packet 即使没有和它 output port 相同的 packet 也可能因为 input queue 中在它前面的其他 packet 而被 block即 HOL blocking

Output Queuing

如果 packet 到达 output port 的速率超过了 output line 的速率则会发生 output queuing

若 packet 到达时 buffer 已经满了则需要决定 drop 哪个 packet在 buffer 满之前进行 packet dropping 或 marking 称作 active queue management (AQM)例如 ECNrandom early detection (RED) 等

How Much Buffering Is Enough?

NN 个 independent TCP flow 经过一个带宽为 CC 的 link 时buffer 需要有 RTTC/N\mathrm{RTT} \cdot C / \sqrt N

更大的 buffer 能减少 packet loss但可能会增加 delayTCP 可能会使得 buffer 一直不被清空从而导致 queuing delay 是 constant 且 persistent 的这被称作 bufferbloat可以通过一些 AQM 措施来缓解

Packet Scheduling

  • FIFO (FCFS)
  • priority queuing
    在 non-preemptive priority queuing 中如果低优先级的 packet 已经开始传输高优先级的 packet 再到来不会打断传输
  • weighted fair queuing (WFQ): 给每种 packet 类型一个 weight决定选择这种类型的频率

packet scheduling 可以根据 IP datagram header 中的各种信息优先传输或 block 某一类 packetOrder on Protecting and Promoting an Open Internet (2015) 规定了 net neutrality 的三条原则no blockingno throttlingno paid prioritizationRestoring Internet Freedom Order (2017) 则收回了这些限制而是注重于 ISP transparency

The Internet Protocol (IP)

IPv4 Datagram Format

IPv4 datagram 的格式如下图所示1

IPv4 datagram format

  • version: 例如 IPv4IPv6
  • header length: 因为可能有 optionsheader 是不定长的
  • type of service (TOS): 用来识别各种类型的流量例如 real-time datagram (对延时敏感)其中有 2 个 bit 用于 ECN
  • datagram length: header + data 的长度为放入 Ethernet frame一般不超过 1500 bytes
  • identifierflagsfragmentation offset: 用于 IP fragmentation在 IPv6 中已被弃用
  • TTL: 为了防止死循环TTL 每经过一个 router 会减一到 0 就会被 drop
  • protocol: transport-layer protocol用来连接 network layer 和 transport layer
  • header checksum: 只计算 header 不计算 data使用 ones complement sumheader 每经过一个 router 都会更新checksum 也要相应地更新
  • source and destination IP address
  • options: 由于会影响性能在 IPv6 中已被弃用
  • data: 一般是 transport-layer segment但也可能是 ICMP message 之类的其他数据

IPv4 Addressing

一般来说每个 host 有至少一个 interface 来接入网络每个 router 有多个 interface 来与其他 router 或 host 连接每个接入 Internet 而不在 NAT 后的interface 都有一个 IP address

多个 host 和 router 之间可以通过 Ethernet switchwireless access point 等方式互相连接构成一个 routerless network在 IP 中这被称作一个 subnet即 interface 之间由 link 连接不经过 router 和 host 而构成的连通块

一个 subnet 会有一个 subnet address例如 223.1.1.0/24而其中的 IP address 包括 223.1.1.1223.1.1.2223.1.1.3 等

Internet 分配 IP address 的方案是 classless interdomain routing (CIDR)其规定了 subnet address 的格式例如 /24 表示前 24 位是这个 subnet 的地址network prefix这个 subnet 中的 IP address 的后 8 位可以取其他值这样的地址分配方案和 router lookup 使用的 longest prefix matching 配合在一起可以减少 lookup table 的表项

在 CIDR 之前曾使用过 classful addressing相当于是 mask length 只能是 81624分别被称作 class A, B, C network这使得不同 class 之间的 address 数量相差过大难以按需选择容易造成浪费最终促成了 classless 的 CIDR

longest prefix matching 也使得 address aggregation 成为可能可以在 lookup table 中将多个有 common prefix 的 subnet 合并为一个更大的 subnet address即使这些 subnet 并没有覆盖这个大的 subnet address 中的所有 address没覆盖到的部分还可以由更小的 subnet address更长的 prefixoverride

255.255.255.255 是一个特殊的 IP address表示 broadcastdestination address 为 broadcast address 的 datagram 会发送给整个 subnet 内的所有 host还有可能发送给 neighbour

Obtaining Addresses

Obtaining a Block of Addresses

IP address 由 ICANN 管理ISP 以及 organization 可以从由 ICANN 管理的 Internet registry (Address Supporting Organization) 处获得 IP address block

ISP 可以将其拥有的 IP address block 再进行细分来提供给用户

Obtaining a Host Address: DHCP

router 的 IP address 一般是手动半自动配置的而 host 的 IP address 通常是通过 Dynamic Host Configuration Protocol (DHCP) 自动进行的

使用 DHCP 能减少手动配置的工作量尤其是在 host 经常移动时例如笔记本电脑在教室和寝室之间移动手动配置几乎是不可能的

DHCP 可以给 host 提供一个固定或临时的 IP address除此之外还能提供 subnet maskfirst-hop router address (default gateway)local DNS server address 等信息

每个 subnet 一般都会有至少一个 DHCP server或者一个知道 DHCP server address 的 DHCP relay agent一个 router

使用 DHCP 获取 IP address 的步骤如下

  1. host 发送 DHCP discover message通过 UDP 发送到 255.255.255.255port 67包含一个 transaction ID由于 DHCP 使用 broadcast需要通过 transaction ID 区分不同 host
  2. DHCP server 收到 DHCP discover message 后发送 DHCP offer message是一个发送到 port 68 的 broadcast包含 transaction IDproposed IP addressIP address lease timeproposed IP address 的有效时间一般是几个小时或几天DHCP server address 等信息
  3. host 收到 DHCP offer message 后选择其中一个如果收到了多个发送 DHCP request message包含和 DHCP offer message 类似的信息也是一个 broadcast虽然此时已知 DHCP server address但可能有多个 DHCP serverbroadcast 可以让其他 server 知道可以取消 address reservation 了2
  4. DHCP server 收到 DHCP request message 后回应 DHCP ACK message

实际上DHCP offer 和 ACK 也可能不是 broadcast3

host 收到 DHCP ACK message 后就可以在 lease time 内使用这个 IP address 了DHCP 还提供了延长 lease time 的机制

Network Address Translation (NAT)

subnet 需要一段连续的 IP address如果设备数量增长超过了原来的 IP address block 大小新地址的分配将会变得困难而且每个设备都有一个 globally unique address 对于 IPv4 来说难以承担Network Address Translation (NAT) 可以解决缓解这些问题

使用 NAT 时subnet 内使用 IP address space reserved for private network10.0.0.0/8172.16.0.0/12192.168.0.0/16有一个 router 与外界连接并进行 NAT这个 router 对外界表现为 a single device with a single IP address通过 NAT translation table 在 private address + port 和 WAN-side address + port 之间进行转换使用不同的 NAT port 来区分不同的 host 以及 application port这个 router 的 public address 从 ISP可以通过 DHCP获得而它作为 DHCP server 为 subnet 内部提供 private address

NAT 一般会改变 port而有时需要使用特定的 port 不能改变可以通过 NAT traversal 来实现勾起了一些远古的 MC 联机回忆虽然当时并没成功

IPv6

为了解决 IPv4 address 即将耗尽的问题IPv6 被研发了出来除了将 IP address 从 32 bits 扩展到 128 bitsIPv6 还顺带解决了 IPv4 中的一些其他问题

IPv6 datagram 的格式如下图所示4

IPv6 datagram format

IPv6 的主要变化

  • 在 unicast 和 broadcast 的基础上引入了 anycast即向多个地址之一发送信息例如可以用来向多个有相同内容的 server 发送 anycast 来获取其中最近的一个的 response
  • 使用定长 (40 bytes) 的 header
  • 引入了 flow label 使得 router 可以对 flow 进行特殊处理
  • 删除了 fragmentation 功能以提高性能
  • 删除了 checksum因为 transport-layer segment 一般已经有 checksum 了每次修改 TTL 都更新 checksum 也非常耗时
  • 删除了 options而 next header 不一定是 transport-layer protocol也可以是 option
  • TOS 改为 traffic classTTL 改为 hop limitdatagram length 改为 payload length不含 header lengthprotocol 改为 next header

network-layer protocol 的改动非常困难IPv4 到 IPv6 的转换至今仍在进行中

新的设备router可以同时支持 IPv4 和 IPv6但旧的设备只能支持 IPv4为了使它们共存可以采用 tunneling即将 IPv6 datagram 作为 IPv4 的 payload 进行传输两个 IPv6 router 之间的一系列 IPv4 router 被称作 tunnel

Generalized Forwarding and SDN

generalized forwarding 基于match-plus-action的原则比起 destination-based forwardingmatch时可以考虑 IP header 中 destination 以外的其他 field也可以考虑 link-layer headertransport-layer headeringress port 等action除了 forward 还可以是 drop修改 header field 等

OpenFlow 是一个 generalized forwarding 的协议规定了 match 时可以/不能使用哪些 field以及可以采取哪些 action设计一个 flow table就可以实现各种功能例如 forwardingload balancingNATfirewall 等

P4 (Programming Protocol-independent Packet Processors) 是一个用来实现 generalized forwarding 的 programming language可以比 flow table 更加灵活

Middleboxes

在 network 中除了基础的 forwarding还有一些用来实现其他功能的设施称作 middlebox

  • NAT translation
  • security services例如 firewallemail filter
  • performance enhancement例如 Web cacheload balancingTCP splitter

为了降低运营维护的成本有的 middlebox 用软件甚至云服务代替硬件来实现称作 network function virtualization (NFV)

middlebox 在一定程度上破坏了 network 的 layered architecture很多 middlebox 位于 network layer却依赖于 transport layer 甚至 application layer 的信息例如 NAT 会修改 IP address 和 portfirewall 可能依赖于 application message 的内容

Internet architecture 的基本原则是the goal is connectivity, the tool is the Internet Protocol, and the intelligence is end to end rather than hidden in the network5在 network layer 中只有 IP 一个 protocol将 complexity 放在 end system可以简化 network layer 的功能保证 connectivity而 middlebox 在一定程度上破坏了这样的原则

尽管在架构上有些不完美但 middlebox 承担着非常重要的功能并不会消亡

Footnotes

  1. p331, Figure 4.17: IPv4 datagram format

  2. Why is broadcast used at the DHCPREQUEST step? - Network Engineering Stack Exchange

  3. Why are DHCP Offer and Ack broadcasted? - Stack Overflow

  4. p349, Figure 4.26: IPv6 datagram format

  5. 2. Is there an Internet Architecture? - RFC1958