是发送/接收数据包缓冲区是相同的预分配内存

问题描述

| 我有一个Windows应用程序,它消耗大量传入的udp流量,并发送少量的udp数据包“保持活动”消息。我看到传入和传出的邮件都有少量下降。令我惊讶的是,少量的传出数据正在掉落,因此我使用netMon捕获了数据包,并看到它们都是通过服务器发送出去的,只有3个发送的帧到达了Linux服务器。 我想知道以下内容: 1. NetMon是否是sock_buffer上的克隆,因此数据可能会被丢弃在数据包缓冲区中,而实际上并未从服务器发送? 2.发送和接收的数据包缓冲存储器是否相同(即,如果接收数据包缓冲器使用了所有预先分配的缓冲存储器,这会导致少量传出流量导致数据包丢失)吗?     

解决方法

第一件事:发送和接收数据包缓冲区具有单独的内存。 第二件事:NetMon在较低的网络层而不是套接字层上工作。 第三件事:请记住,UDP是不可靠的协议,您不能确保从一端发送的所有数据包都会在另一端收到。如果需要可靠性,则应考虑使用TCP或其他一些可靠的协议。 顺便说一下,发送者和接收者都在同一局域网或互联网上?它们如何连接?如果您可以描述它,那么也许有人可以提出其他建议来进一步调试问题。