TLS记录协议如何重组接收到的数据?

时间:2018-10-23 06:39:52

标签: ssl cryptography protocols tls1.2

我找不到有关TLS记录协议如何重组接收到的数据的详细信息。在RFC 5246中:

  

接收到的数据被解密,验证,解压缩,重新组合,   然后交付给更高级别的客户。

但是如何?记录层数据如下所示:

struct {
    ContentType type;
    ProtocolVersion version;
    uint16 length;
    opaque fragment[TLSPlaintext.length];
} TLSPlaintext;

length字段就是片段的长度:

  

以下TLSPlaintext.fragment的长度(以字节为单位)

我希望在记录协议标题中看到完整的长度。 Google对此几乎没有给出任何结果,这让我感到我缺少明显的东西...

1 个答案:

答案 0 :(得分:0)

TLS在流上执行,并将这些流中的数据放入一个或多个片段(最大2 ^ 14字节)。这称为碎片。

规范本身的内容为:

  

客户      消息边界未保留在记录层中(即,      可以合并多个相同ContentType的客户端消息      成单个TLSPlaintext记录,或者单个消息可能是      分散在几条记录中。

这与将它们放入流中,然后再次将流分成单独的片段相同。

如果通过TLS接收数据,则必须从单独的片段重新创建该流。因此,发生的“重组”是将片段简单地串联到流中。

一个套接字包含一个输出和输入流。输出流需要分段,输入流需要重新组装。

没有什么神奇的事情发生,这也许就是为什么你找不到太多东西的原因。


但是,通常会给应用程序层一个相对较低级别的TLS层接口,这将允许它包装或发送自己的片段。例如,此API by IBM表明它允许用户包装和发送或接收和解包每个消息本身。在这种情况下,库的用户需要处理任何消息碎片/重组。

由于TLS并未指定碎片/组装的实际方法,因此应将其视为特定于实现的。