12. IP 头部字段
本节描述服务器在客户端与对等方之间中继数据, 或反向中继数据时, 如何设置 IP 头部中的各个字段. 本节中的描述适用于: (a) 服务器向对等方发送 UDP 数据报时, 或 (b) 服务器通过 UDP 传输向客户端发送 Data indication 或 ChannelData 消息时. 本节中的描述不适用于服务器通过 TCP 或 TLS 传输发送给客户端的 TURN 消息.
下面的描述分为两种行为: 首选行为和备选行为. 服务器应该实现首选行为. 但是, 如果某个特定字段无法这样做, 则服务器应该实现备选行为.
Time to Live (TTL) 字段
-
首选行为: 如果入站值为 0, 丢弃入站分组. 否则, 将出站 Time to Live/Hop Count 设置为入站值减 1.
-
备选行为: 将出站值设置为出站分组的默认值.
Differentiated Services Code Point (DSCP) 字段 [RFC2474]
-
首选行为: 将出站值设置为入站值, 除非服务器包含 Differentiated Services Classifier and Marker [RFC2474].
-
备选行为: 将出站值设置为一个固定值, 该值默认为 Best Effort, 但可以配置.
-
在两种情况下, 如果服务器与 Differentiated Services Classifier and Marker 直接相邻, 则在朝向该分类器的方向上, DSCP 可以被设置为任意值.
Explicit Congestion Notification (ECN) 字段 [RFC3168]
-
首选行为: 将出站值设置为入站值, 除非服务器正在执行 Active Queue Management. 在这种情况下, 如果入站 ECN 字段设置为 ECT(1) (=0b01) 或 ECT(0) (=0b10), 且服务器希望指示已经经历拥塞, 则将出站值设置为 CE (=0b11).
-
备选行为: 将出站值设置为 Not-ECT (=0b00).
IPv4 分片字段
-
首选行为: 当服务器响应包含 DONT-FRAGMENT 属性的 Send indication 向对等方发送分组时, 将出站 IP 头部中的 DF 位设置为 1. 在发送包含应用数据的出站分组的所有其他情况下 (例如 Data indication, ChannelData 消息, 或不含 DONT-FRAGMENT 属性的 Send indication), 从包含该应用数据的入站分组的 DF 位复制 DF 位.
根据服务器所发送分组的需要, 设置其他分片字段 (Identification, More Fragments, Fragment Offset).
-
备选行为: 与首选行为相同, 但始终假定入站 DF 位为 0.
-
在首选行为和备选行为中, 生成的分组都可能对出站链路而言过大. 如果出现这种情况, 则适用普通分片规则 [RFC1122].
IPv4 Options
-
首选行为: 发送出站分组时不携带任何 IPv4 option.
-
备选行为: 与首选行为相同.