繁体   English   中英

Linux如何缓冲数据报套接字?

[英]How does Linux buffer datagram sockets?

作为一个个人项目,我正在尝试使用C设计网络时间同步协议。真正令我着迷的是我对内核如何缓冲udp数据包一无所知。 我想确保数据包将在我希望的时间准确发送,并且不会被缓冲到特定的块大小或其他大小。 我还想知道缓冲区是否可以确保数据报之间的划分,正如我所见过的那样。 我已经阅读了很多《 Beej的网络编程指南》 ,但是我没有找到任何可以帮助我的东西。

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

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

UDP不是面向连接的,服务器与客户端之间没有连接,客户端发送数据包而服务器接收了它们,但不能保证它们到达那里或到达它们发送的顺序。 对于面向连接的协议,请考虑使用TCP。

暂无
暂无

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

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