SOCK_DGRAM用于UDP套接字

所有数据包的长度均为22 bytes(即64 including headers)

client.c

...
    no_of_packets--;
    sprintf(buf, "#:!0 rem");
    sprintf(buf, format , buf);
    sprintf(buf_aux, "#: 0 rem");
    sprintf(buf_aux, format , buf_aux);
    buf[MAX_LINE-1] = '\0';
    buf_aux[MAX_LINE-1] = '\0';
    len = strlen(buf) + 1;
    send(s, buf, len, 0);
    while (no_of_packets-- > 1) {
        nanosleep(&T, NULL);
        send(s, buf, len, 0);
    }
    send(s, buf_aux, len, 0);

server.c
...
while(1) {
        if (len = recv(s, buf, sizeof(buf), 0)){
            // do nothing
        }
}


当我打开Wireshark来查看发送的数据包之间的平均延迟时,

我可以看到以下内容:
  • 最小延迟:0.000006795秒=> 6微秒
  • 最大延迟:0.000 260 952秒=> 260微秒
  • 但是我想每512纳秒(即0.512微秒)发送数据包。

  • 最佳答案

    在Linux上,您可以使用内核旁路网络堆栈(例如PF_RING ZC (Zero Copy))和在隔离的内核上运行的FIFO实时线程来做到这一点:

  • 填充数据包以发送到网卡缓冲区。
  • 忙于等待下一个时间点。
  • 将准备好的数据包发送到线路中。
  • 转到1.

  • 您可能还会发现Understanding PCIe performance for end host networking白皮书很有用。

    08-06 21:03