繁体   English   中英

TCP数据包大小

[英]TCP Packet size

我试图将TCP数据包从客户端发送到服务器,我希望能够选择数据包的大小。 我所关注的问题是,如果我不放置Sleep(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. 
        }

如果我使用sleep(45)可以工作,但是要花数年才能完成,而Im应该测量时间,所以这样做是不正确的。 如果我走低一点然后进入Sleep(45),则我的网卡将点燃数据包大小并将其设置为1514。

有谁有清楚的主意怎么办? 我只能假设它可能与网卡缓冲区有关。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM