【发布时间】:2017-05-28 01:55:26
【问题描述】:
这个问题表明 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
'on data' 事件是否仅在第 8 段之后触发,“data 参数”是否包含整个包,或者可能发生在每个单独接收的段之后触发 'on data' 事件?
在继续处理之前,我怎样才能 100% 确保我得到了整个包裹? 我想到的解决方案:
- 数据包的前2个字节是整个长度的字节长度,我一直连接接收到的数据,直到我收到尽可能多的字节。如果我收到的数据超过包的大小,我会假设这些连续的字节是后续数据包的开始。
我确实认为这个“解决方案”有些棘手,我希望它不是必需的。
提前致谢!如果缺少任何信息:对不起,请随时询问:-)。
【问题讨论】:
-
很遗憾,我仍然没有找到答案。我会尽快发布答案,以便其他人可以获利。
标签: node.js ip ip-fragmentation