当使用 SSLStream 向(已经过身份验证的)客户端发送“大”数据块(1 兆)时,我看到的数据包碎片/分解比使用普通 NetworkStream 时要大得多。
使用客户端上的异步读取(即 BeginRead()),ReadCallback 被重复调用,并使用完全相同大小的数据块直到最终数据包(数据的其余部分)。使用我发送的数据(它是一个 zip 文件),这些段恰好是 16363 字节长。注意:我的接收缓冲区比这大得多,改变它的大小没有效果
我知道 SSL 以不大于 18Kb 的块加密数据,但由于 SSL 位于 TCP 之上,我不认为 SSL 块的数量与 TCP 数据包碎片有任何关系吗?
从本质上讲,客户端完全读取数据所需的时间比使用标准 NetworkStream(都在本地主机上!)
我错过了什么?
编辑:
我开始怀疑 SSLStream 的接收(或发送)缓冲区大小是有限的。即使我使用同步读取(即 SSLStream.Read()),也不会再有数据可用,无论我在尝试读取之前等待多长时间。这与我将接收缓冲区限制为 16363 字节的行为相同。设置底层 NetworkStream 的 SendBufferSize(在服务器上)和 ReceiveBufferSize(在客户端)没有任何效果。