1

作为一个个人项目,我正在尝试使用 C 来设计一个网络时间同步协议。真正让我烦恼的一件事是我完全不知道我的内核将如何缓冲我的 udp 数据包。我想确保数据包会在我想要的时候准确发送,而不是被缓冲到某个块大小或其他什么。我还想知道缓冲区是否可以确保数据报之间的划分,因为我已经看到了这样做的方法。我已经阅读了大量的Beej's Guide to Network Programming,但我没有找到任何可以帮助我的东西。

编辑:我了解 UDP 本身是如何工作的。我只是询问内核套接字接口的属性。

4

1 回答 1

-1

如果数据包顺序和/或所有数据包的接收是一个问题,那么您需要实现一个协议,即发送方将发送一个数据包,它会等待直到收到 ACK 的数据包(接收确认)返回从接收器。如果发送方在合理的时间内没有收到 ACK 数据包,它将重新发送相同的数据包。此外,在数据包的数据中,您可以包含一个数据包 ID,一个整数,每个发送的数据包都会递增;使用此 ID,您可以避免数据包重复。这就是 UDP 数据包的大致流动方式。

UDP不是面向连接的,服务器和客户端之间没有连接,客户端发送数据包,服务器接收它们,没有任何保证他们到达那里,也没有按照发送的顺序到达。对于面向连接的协议,考虑使用 TCP。

于 2013-07-21T12:30:23.500 回答