在“数据”事件中,为什么数据的大小是1374的倍数?

这只是一个好奇的问题,但我可能会学到一些有用的东西。

用我的Node.js服务器,当我通过net.Server接收数据时,我打印出每个数据“包”的大小(以字节为单位)。

socket.on 'data', (data) -> console.log data.length 

我注意到大部分时间是1374字节。 所有其他时间是1374的倍数。我从约200个数据事件中得出的最高值是17,862。

这个1374号码从哪里来? 为什么数据的长度偶尔会多倍呢?


我最好的猜测是,对于TCP来说,1500字节是以太网中最常见的MTU,126个字节组成了TCP数据包的头部。 Node.js有时可以将这些数据包集合在一起,如果它们足够快地收到这些数据包,这就是为什么有时它们会以倍数来到达。

部分是由于TCP头部本身是20字节。

数据还被服务器库强加的“标题”填充,这是因为你描述的原因:当多个数据包接收在一起时,“聚集”数据。 当数据包快速连续时,所包含的额外信息用于确定正确的数据包顺序并连接返回数据。

这是减less进入每个完整数据集的处理量的常用技术(为什么在三个单独的数据块上运行处理三次,对于较大的现有集可以执行一次),但是在窗口 – 谈判涉及,它可以导致所谓的“愚蠢的窗口症候群”(窗口减less到数据传输的点比头本身小,使传输效率非常低)。 但是,如果您遇到了这个问题,您应该重新考虑您发送和接收数据的方式。

Interesting Posts