4.1. Demultiplexing DTLS Records (DTLS记录解复用)
4.1. Demultiplexing DTLS Records (DTLS记录解复用)
DTLS 1.3的头部格式比DTLS 1.2更复杂, 后者总是将内容类型作为第一个字节。如图5所示, 第一个字节决定了如何对传入的DTLS记录进行解复用。第一个字节的前3位将DTLS 1.3加密记录与先前DTLS版本中使用的记录类型以及明文DTLS 1.3记录类型区分开来。因此, IANA需要将范围32 (0b0010 0000)到63 (0b0011 1111)排除在未来分配之外, 以避免解复用时出现问题; 见第14节。实现可以通过检查第一个字节来对DTLS 1.3记录进行解复用, 如下所示:
-
如果第一个字节是alert(21), handshake(22)或ack(提议的, 26), 则该记录必须被解释为DTLSPlaintext记录。
-
如果第一个字节是任何其他值, 则接收者必须检查第一个字节的前导位是否为001。如果是, 则实现必须将该记录作为DTLSCiphertext处理; 真正的内容类型将在受保护部分内部。
-
否则, 必须拒绝该记录, 如同其解保护失败一样, 如第4.5.2节所述。
图5以图形方式展示了此解复用过程, 考虑了DTLS 1.3和更早版本的DTLS。
+----------------+
| Outer Content |
| Type (OCT) |
| |
| OCT == 20 -+--> ChangeCipherSpec (DTLS <1.3)
| OCT == 21 -+--> Alert (Plaintext)
| OCT == 22 -+--> DTLSHandshake (Plaintext)
| OCT == 23 -+--> Application Data (DTLS <1.3)
| OCT == 24 -+--> Heartbeat (DTLS <1.3)
packet --> | OCT == 25 -+--> DTLSCiphertext with CID (DTLS 1.2)
| OCT == 26 -+--> ACK (DTLS 1.3, Plaintext)
| |
| | /+----------------+\
| 31 < OCT < 64 -+--> |DTLSCiphertext |
| | |(header bits |
| else | | start with 001)|
| | | /+-------+--------+\
+-------+--------+ |
| |
v Decryption |
+---------+ +------+
| Reject | |
+---------+ v
+----------------+
| Decrypted |
| Content Type |
| (DCT) |
| |
| DCT == 21 -+--> Alert
| DCT == 22 -+--> DTLSHandshake
| DCT == 23 -+--> Application Data
| DCT == 24 -+--> Heartbeat
| DCT == 26 -+--> ACK
| else ------+--> Error
+----------------+
图5: DTLS 1.2和DTLS 1.3记录的解复用