数据包碎片通过SSLStream发送数据时(Packet fragmentation when se

2019-09-18 09:40发布

当使用SSLStream到数据的“大”的块(1微克)发送到(已经认证)客户端,分组分段/ dissasembly我看到是FAR使用正常的NetworkStream当大于。

在客户端上使用异步读取(即的BeginRead()),该ReadCallback反复与准确的数据相同大小的块 ,直到最后的数据包(该数据的其余部分)调用。 随着我送(这是一个zip文件)的数据,该段正好是16363个字节长。 :我的接收缓冲区比这大得多,改变它的大小没有任何影响

据我所知,SSL加密的数据块不超过18Kb的大,但由于SSL位于TCP之上,我不认为SSL块的数目不会有什么相关性的TCP数据包不成?

从本质上讲,数据需要大约20倍更长的时间才能被客户端比标准的NetworkStream充分阅读(包括本地主机上!)

我在想什么?


编辑:

我开始怀疑接收(或发送)缓冲区大小的SSLStream是有限的。 即使我使用同步读取(即SSLStream.Read()),没有更多的数据永远可用,无论我尝试读取之前等待多长时间。 这将是相同的行为,如果我要限制接收缓冲区16363个字节。 设置相关资产的NetworkStream的SendBufferSize(在服务器上),并ReceiveBufferSize(客户端)没有任何影响。

Answer 1:

这看起来像通过由私人构件限定的SslStream施加的分组的数据大小的限制:

SSLStream._SslState.MaxDataSize

我挣扎理解为什么应用此限制,或者如果它是可以改变的,并且已经提出这样的问题在这里



文章来源: Packet fragmentation when sending data via SSLStream