这个问题表明 Node.js Net 模块不处理 ip-fragmentation: Node.js how to handle packet fragmentation with net.Server
我几乎无法想象这是真的,但我找不到任何有关此的文档(如果不难找到有关此的信息,请原谅我:-))。这是真的吗?
如果没有:谢谢,这对我来说是真正安全的一天:-)。
如果是真的:如果我不知道整个数据报有多大,如何处理这个问题?
情况:我有一个与嵌入式系统(Wiznet W5500)的 TCP 连接。MSS(最大段大小,主要等于 MTU - 40)将设置为 536,数据包的大小可变,可能超过 4kb。所以数据包会分多段发送。是否会在收到分段后触发“on data”事件,还是仅在收到整个包裹时触发?
附带问题:数据段(关于 Wiznet 在 MSS 寄存器的解释中所说的)equel 是 ip-fragment 对吗?因此,如果我必须发送 4000 字节(即有效负载)并且 MSS 设置为 536,我将连续收到:
segment1: 536bytes payload
segment2: 536bytes payload
segment3: 536bytes payload
segment4: 536bytes payload
segment5: 536bytes payload
segment6: 536bytes payload
segment7: 536bytes payload
segment8: 248bytes payload
可能仅在第 8 段之后触发“数据参数”事件,“数据参数”是否包含整个包是否会在每个单独接收的段之后触发“on data”事件?
在继续处理之前,我怎样才能 100% 确定我得到了整个包裹?我想到的解决方案:
- 数据包的前 2 个字节是整个长度的字节长度,我不断连接接收到的数据,直到接收到尽可能多的字节。如果我收到超过包大小,我会假设这些连续的字节是后续数据包的开始。
我确实相信这个“解决方案”有点棘手,我希望它不是必需的。
提前致谢!如果缺少任何信息:对不起,请随时询问:-)。