当使用 SSLStream 将“大”数据块(1 兆)发送到(已通过身份验证的)客户端时,我看到的数据包碎片/分解是FAR比使用普通 NetworkStream 时更大。
在客户端上使用异步读取(即 BeginRead()),会重复调用 ReadCallback完全相同大小的数据块直到最后一个数据包(数据的其余部分)。对于我发送的数据(它是一个 zip 文件),这些段的长度恰好是 16363 字节。Note:我的接收缓冲区比这个大得多,改变它的大小没有效果
我知道 SSL 加密的数据块不大于 18Kb,但由于 SSL 位于 TCP 之上,我不认为 SSL 块的数量与 TCP 数据包碎片有任何关系?
本质上,客户端完全读取数据所需的时间比使用标准 NetworkStream(两者都在本地主机上!)长约 20 倍。
我缺少什么?
EDIT:
我开始怀疑 SSLStream 的接收(或发送)缓冲区大小是有限的。即使我使用同步读取(即 SSLStream.Read()),也不会再有任何数据可用,无论我在尝试读取之前等待多长时间。这与我将接收缓冲区限制为 16363 字节的行为相同。设置底层 NetworkStream 的 SendBufferSize(在服务器上)和 ReceiveBufferSize(在客户端上)没有任何效果。
这看起来像是由私有成员定义的 SslStream 应用的数据包数据大小限制:
SSLStream._SslState.MaxDataSize
我很难理解为什么要应用此限制,或者是否可以更改它,并提出了这个问题here https://stackoverflow.com/q/11209258/520050
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)