我找不到有关TLS记录协议如何重组接收到的数据的详细信息。在RFC 5246中:
接收到的数据被解密,验证,解压缩,重新组合, 然后交付给更高级别的客户。
但是如何?记录层数据如下所示:
struct {
ContentType type;
ProtocolVersion version;
uint16 length;
opaque fragment[TLSPlaintext.length];
} TLSPlaintext;
length字段就是片段的长度:
以下TLSPlaintext.fragment的长度(以字节为单位)
我希望在记录协议标题中看到完整的长度。 Google对此几乎没有给出任何结果,这让我感到我缺少明显的东西...
答案 0 :(得分:0)
TLS在流上执行,并将这些流中的数据放入一个或多个片段(最大2 ^ 14字节)。这称为碎片。
规范本身的内容为:
客户 消息边界未保留在记录层中(即, 可以合并多个相同ContentType的客户端消息 成单个TLSPlaintext记录,或者单个消息可能是 分散在几条记录中。
这与将它们放入流中,然后再次将流分成单独的片段相同。
如果通过TLS接收数据,则必须从单独的片段重新创建该流。因此,发生的“重组”是将片段简单地串联到流中。
一个套接字包含一个输出和输入流。输出流需要分段,输入流需要重新组装。
没有什么神奇的事情发生,这也许就是为什么你找不到太多东西的原因。
但是,通常会给应用程序层一个相对较低级别的TLS层接口,这将允许它包装或发送自己的片段。例如,此API by IBM表明它允许用户包装和发送或接收和解包每个消息本身。在这种情况下,库的用户需要处理任何消息碎片/重组。
由于TLS并未指定碎片/组装的实际方法,因此应将其视为特定于实现的。