Sockets 我可以在套接字接收缓冲区中丢失数据报吗?当我使用UDP时,它是如何发生的?
我想在我的C程序中使用可靠传输下的UDP套接字,我想知道更多数据包可能丢失的地方 众所周知,UDP协议是不可靠的。这意味着:Sockets 我可以在套接字接收缓冲区中丢失数据报吗?当我使用UDP时,它是如何发生的?,sockets,networking,udp,ethernet,tcp-ip,Sockets,Networking,Udp,Ethernet,Tcp Ip,我想在我的C程序中使用可靠传输下的UDP套接字,我想知道更多数据包可能丢失的地方 众所周知,UDP协议是不可靠的。这意味着: 如果数据包在任何低级协议中丢失,则不会再次发送 数据包可能在接收缓冲区中丢失,例如,如果接收缓冲区溢出 我对第二种情况感兴趣——它是如何工作的? 在接收缓冲区中,数据报与数据报的大小一起记录, 因为UDP保证了消息边界的保留。当接收缓冲区溢出时,首先删除数据报: 从环形缓冲区(接收缓冲区)的头部读取前8个字节 包含数据报大小 移动环形缓冲区的头部,移动量等于缓冲区的大
- 如果数据包在任何低级协议中丢失,则不会再次发送
- 数据包可能在接收缓冲区中丢失,例如,如果接收缓冲区溢出
否。当数据报到达且接收缓冲区已满时,新数据报将被丢弃。缓冲区的处理根本不会发生。您对操作系统内部结构感兴趣吗?在这种情况下,您需要指定操作系统。这是一个不遵循UDP规范的实现细节。我认为第二种情况应该是不言自明的。如果接收缓冲区已满,它将无法接收新数据包,因此新数据包将被忽略,直到应用程序读取缓冲区以腾出空间容纳新数据包。就这么简单。@usr OS Linux x86_64(例如RedHat6)谢谢!这对任何操作系统都是真的吗,或者通常是真的,但不是必然的?我没有关于不同操作系统的任何信息,但我看不出有任何理由相信任何操作系统会选择以您描述的费力的方式处理输入缓冲区,而他们可以简单地丢弃传入的数据包。