12. IP Header Fields (IP 头字段)
本节描述服务器在客户端和对等方之间或反向中继时如何设置 IP 头中的各个字段。本节中的描述适用于:(a) 当服务器向对等方发送 UDP 数据报时,或 (b) 当服务器通过 UDP 传输向客户端发送 Data 指示或 ChannelData 消息时。本节中的描述不适用于从服务器到客户端通过 TCP 或 TLS 传输发送的 TURN 消息。
下面的描述分为两部分:首选行为和备用行为。服务器应该 (SHOULD) 实现首选行为,但如果对于特定字段这是不可能的,则它应该 (SHOULD) 实现备用行为。
生存时间 (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),除非另有配置。
-
在这两种情况下,如果服务器紧邻差异化服务分类器和标记器,则在朝向分类器的方向上,DSCP 可以 (MAY) 设置为任何任意值。
显式拥塞通知 (Explicit Congestion Notification, ECN) 字段 [RFC3168]
-
首选行为:将传出值设置为传入值,除非服务器正在进行主动队列管理 (Active Queue Management),传入 ECN 字段为 ECT(1) (=0b01) 或 ECT(0) (=0b10),并且服务器希望指示已经历拥塞,在这种情况下将传出值设置为 CE (=0b11)。
-
备用行为:将传出值设置为 Not-ECT (=0b00)。
IPv4 分片字段 (IPv4 Fragmentation Fields)
-
首选行为:当服务器响应包含 DONT-FRAGMENT 属性的 Send 指示向对等方发送数据包时,将传出 IP 头中的 DF 位设置为 1。在发送包含应用程序数据的传出数据包的所有其他情况下(例如,Data 指示、ChannelData 消息,或 Send 指示中未包含 DONT-FRAGMENT 属性),从包含应用程序数据的传入数据包的 DF 位复制 DF 位。
将其他分片字段(标识 (Identification)、更多分片 (More Fragments)、分片偏移 (Fragment Offset))设置为适合从服务器发起的数据包的值。
-
备用行为:如首选行为中所述,但始终假设传入 DF 位为 0。
-
在首选和备用行为中,生成的数据包可能对于传出链路来说太大。如果是这种情况,则应用正常的分片规则 [RFC1122]。
IPv4 选项 (IPv4 Options)
-
首选行为:传出数据包在发送时不带任何 IPv4 选项。
-
备用行为:与首选行为相同。