跳到主要内容

9. 连接迁移

9. 连接迁移 (Connection Migration)​

connection ID 的使用允许 connection 在 endpoint address (IP address 和 port) 变化后继续存在, 例如 endpoint 迁移到新网络所导致的变化. 本节描述 endpoint 迁移到新 address 的过程.

QUIC 的设计依赖 endpoint 在 handshake 持续期间保持稳定 address. endpoint MUST NOT 在 handshake 被确认之前发起 connection migration, 如 [QUIC-TLS] 第 4.1.2 节所定义.

client 负责发起所有 migration. server 在看到来自某个 client address 的 non-probing packet 之前, 不会向该 address 发送 non-probing packet (见第 9.1 节).

9.1 探测新路径 (Probing a New Path)​

endpoint MAY 在将 connection 迁移到新的 local address 之前, 使用 path validation (第 8.2 节) 从新的 local address 探测 peer 可达性.

9.2 发起连接迁移 (Initiating Connection Migration)​

endpoint 可以通过从新的 local address 发送包含 non-probing frame 的 packet, 将 connection 迁移到新的 local address.

9.3 响应连接迁移 (Responding to Connection Migration)​

从新的 peer address 收到包含 non-probing frame 的 packet, 表明 peer 已经迁移到该 address.

9.3.1 Peer address 伪造 (Peer Address Spoofing)​

peer 可能伪造其 source address, 使 endpoint 向不愿接收的 host 发送过量数据.

9.3.2 路径上 address 伪造 (On-Path Address Spoofing)​

on-path attacker 可以复制并转发带有伪造 address 信息的 packet, 从而造成虚假的 connection migration.

9.3.3 路径外 packet 转发 (Off-Path Packet Forwarding)​

能够观察 packet 的 off-path attacker 可能向 endpoint 转发真实 packet 的副本.

9.4 丢失检测和拥塞控制 (Loss Detection and Congestion Control)​

新路径上的可用容量可能不同于旧路径. 在旧路径上发送的 packet MUST NOT 参与新路径的 congestion control 或 RTT 估计.

9.5 连接迁移的隐私影响 (Privacy Implications of Connection Migration)​

在多个网络路径上使用稳定的 connection ID, 会允许 passive observer 关联这些路径之间的活动.

9.6 Server 的首选地址 (Server's Preferred Address)​

QUIC 允许 server 在一个 IP address 上接受 connection, 并在 handshake 后不久将这些 connection 转移到更 preferred address.

9.6.1 传达首选地址 (Communicating a Preferred Address)​

server 通过在 TLS handshake 中包含 preferred_address transport parameter 来传达 preferred address.

9.6.2 迁移到首选地址 (Migration to a Preferred Address)​

迁移到 preferred address 的 client MUST 在向该 address 发送任何数据之前验证新路径.

9.6.3 Client 迁移与首选地址的交互 (Interaction of Client Migration and Preferred Address)​

client 可能需要在迁移到 server 的 preferred address 之前执行 connection migration.

9.7 IPv6 Flow Label 的使用和迁移 (Use of IPv6 Flow Label and Migration)​

使用 IPv6 发送数据的 endpoint SHOULD 按照 [RFC6437] 应用 IPv6 flow label, 除非本地 API 不允许设置 IPv6 flow label.