通过 SSLStream 发送数据时出现数据包碎片

2024-05-12

当使用 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(使用前将#替换为@)

通过 SSLStream 发送数据时出现数据包碎片 的相关文章

随机推荐

  • 正则表达式删除某些字符周围不需要的空格

    我正在尝试从 JavaScript 文件中删除一些不需要的空格 并在将文件发送到客户端之前使用 C 和 Regex 组合文件 我有一个JavascriptHandler处理 js 文件 效果很好 这是我用来 打包 JavaScript 的函
  • 使用 jackson 序列化 Map.Entry 时出现问题

    如果我尝试反序列化以下存储为字符串的类型 List
  • 如何使用 FOR 循环处理批处理文件中的“net use”命令错误输出?

    我在用着net use批处理文件中的命令用于连接远程位置 我想将它的输出存储到一个变量中并对其进行处理 当命令成功完成时 我的代码工作正常 但是 如果出现一些错误 例如密码错误 那么我无法将错误输出存储在变量中 它直接打印到正在运行脚本的控
  • LogRecord 没有预期的字段

    在使用 logging 模块的Python中 文档承诺LogRecord实例将具有许多属性 这些属性在文档中明确列出 然而 情况似乎并不总是如此 当我不使用日志记录模块的 basicConfig 方法时 下面的程序显示属性 asctime
  • pandas groupby 并转换为 json 列表

    我有一个如下所示的 pandas 数据框 idx f1 f2 f3 1 a a b 2 b a c 3 a b c 87 e e e 我需要将其他列转换为基于索引列的字典列表 所以 最终结果应该是 idx features 1 f1 a f
  • 如何从linux命令行运行.exe可执行文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 Windows 中有一个 abc exe 可执行文件 我可以使用 DOS 命令提示来执行此应用程序 并为其提供一些运行时变量 我想从
  • 测试 - 存根服务方法未定义

    我已经在非常简单的代码上编写了一个非常简单的测试 但由于某种原因存根服务方法未定义 当我使用 Jasmine Spy 时 它可以工作 但对于这样一个简单的任务 有人可以解释一下为什么会发生这种情况吗 我删除了 import 语句只是为了减少
  • 为什么 Objective-C 使用 YES 和 NO 而不是 1 和 0? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Objective C 使用 YES 和 NO 而不是 1 和 0 是否有任何技术原因 或者只是为了使其更具可读性 使其更具可读性is技术原因
  • 膨胀类片段 InflateException 二进制 XML 文件时出错

    我正在使用 Material Design 和 NavigationDrawer 布局等设计我的第一个应用程序 但我遇到了一个问题 该应用程序非常简单 它只显示文本 并且基于 Android Studio 中提供的模板 尝试启动我的应用程序
  • 在 SSIS 中使用 OLE DB 从 Sybase 提取数据时出错

    我在 SSIS 2017 中使用 Advantage 11 OLE DB Provider 从 Sybase 提取数据时遇到问题 我可以连接到数据库 查看表列表 并且在选择表作为数据源时 我可以看到列 但是 当我单击 预览 或运行数据流任务
  • 如何将值从孩子的孩子传递给父母?

    我有一个父组件 有一个子组件 它也有一个子组件 Parent Child One child of parent Child Two child of child 当在子二中定义一个值时 我使用回调将该值传递给子一 但我也想将相同的值传递回
  • Azure 2012 年 10 月 SDK 损坏 UseDevelopmentStorage=true

    有人尝试过使用 usedevelopmentstorage true 连接字符串的 2012 年 10 月 Azure sdk 吗 CloudStorageAccount Parse UseDevelopmentStorage true 抛
  • 我可以在 Laravel 5.2 中创建一个继承自 User 的新类吗?

    我对 Laravel 还很陌生 使用的是迄今为止的最新版本 5 2 因此我遇到了以下困境 我知道 Laravel 附带了一个User开箱即用的类 但我想开发一个系统 在其中我可以有另外两种类型的用户 称为Researcher and Adm
  • Haskell 中的 print 是纯函数吗?

    Is print在 Haskell 中是纯函数 为什么或者为什么不 我认为不是 因为它并不总是返回与纯函数应返回的值相同的值 类型的值IO Int并不是真正的Int 它更像是一张纸 上面写着 嘿 Haskell 运行时 请生成一个Int如此
  • Hibernate @OneToMany 注释到底是如何工作的?

    我对 Hibernate 还很陌生 我正在通过教程学习它 我在理解到底如何一对多注释作品 所以我有这两个实体类 Student代表一个学生并且Guide代表指导学生的人 因此 每个学生都与一名向导相关联 但一名向导可以跟随多个学生 我想要一
  • uncss 错误:C.UTF-8:不是有效的语言标签

    嗨 我正在尝试使用UNCSS https github com giakki uncss第一次从 CSS 中删除未使用的样式 我收到以下错误 Fontconfig 警告 忽略 C UTF 8 不是有效的语言标记 home ubuntu nv
  • Symfony 5.4 Security Bundle,注册后无法登录

    我在 5 4 版本上构建空的新项目 我使用这些命令来构建项目 composer create project symfony skeleton 5 4 testapp54 cd testapp54 composer require weba
  • 无法在cordova项目中安装插件

    我面临一个大问题 Unable to install the phonegap plugins在我的科尔多瓦项目中 实际上昨天它仍然工作正常 现在 每当我尝试在我的 cordova 项目中使用 CLI 添加任何 cordova 插件时 我收
  • 如何使用css网格制作一个垄断板?

    I want to create a monopoly board like There are following features in the board 角是方形的 比其他盒子大 每行的文本都面向特定的角度 我的基本 html 结构
  • 通过 SSLStream 发送数据时出现数据包碎片

    当使用 SSLStream 将 大 数据块 1 兆 发送到 已通过身份验证的 客户端时 我看到的数据包碎片 分解是FAR比使用普通 NetworkStream 时更大 在客户端上使用异步读取 即 BeginRead 会重复调用 ReadCa