TCP数据包大小

时间:2015-12-14 11:44:45

标签: c++ sockets networking tcp packet

我试图从客户端向服务器发送TCP数据包,我希望能够选择数据包的大小。问题是,如果我没有睡眠(45)(毫秒),数据包大小是不正确的。我使用Wireshark来查看数据包的大小。

为了确保你们和我在一起,我会尽可能清楚地解释。

我试过这样做..

首先,我选择要发送的数据量。例如,说1Mb或“1000000ish”字节。我分配了一个有如此多空间的数组。

为了能够发送特定的数据包大小,我已经分配了一个sendbuffer,它包含我想要的数据包的大小(我的情况是64,512,1024和1514字节)。我用信件填写sendbuffer。假设我想用64作为数据包大小发送。

for (int i = 0; i < packetSize; i++){ 
            sendbuf[i] = 'a';
        }

要知道有多少次我必须发送数据包达到1Mb,我就完成了这个数学运算 nrOfTimes =(dataSize / packetSize)。

然后用循环发送它。

for (int i = 0; i < nrOfTimes; i++) {
            rc = send(sConnect, sendbuf, packetSize, 0); //rc and sConnect contains information where to send the data, if you wonder

            Sleep(45); // If i dont use this the packet size gets 1514. 
        }

如果我使用睡眠(45)它的工作,但它需要数年才能完成,我应该测量时间,所以它不正确这样做。如果我低于睡眠(45),那么我的网卡会忽略数据包大小并将其设置为1514大小。

有没有人有一些明确的想法怎么做?我只能假设它可能与网卡缓冲区有关。

1 个答案:

答案 0 :(得分:1)

TCP是一种字节流协议,因此根据离散的字节数据包来考虑传输是不正确的。您可能通过注入45毫秒的延迟来与Nagle algorithm进行交互。