我计划通过 UDP(视频流)发送大量数据,并且我认为系统中需要检测接口何时达到最大上传带宽。
我知道当我刷新套接字中的输出数据时,它会阻塞,直到缓冲区清空,但是,为什么套接字会被阻塞?发送超过上传带宽是这些限制之一?我的意思是,例如,我通过套接字立即发送 100 Kb 的数据;上传速度为 10 Kb/s 会导致套接字在 10 秒内阻塞?还是它会刷新到另一个接口(比如说路由器),然后它会返回,尽管数据没有发送到互联网?
请记住,我们正在讨论 UDP,因此没有 ACK。
答案1
这是您的服务器带宽和路由器带宽。您的服务器将以最快的速度发送数据,直到其接口的线路上为止(当服务器上的套接字缓冲区已满时,UDP 会阻塞)。
据我所知,一旦路由器的缓冲区已满,它就会丢弃多余的数据包(具体如何选择取决于路由器操作系统)。您的应用程序需要正确处理丢失的数据包或实现某种逻辑来控制数据包流(如果数据包丢失,则没有反馈 - UDP 是不可靠运输)。
连续传输协议如果这是可以接受的选择,那么可能是更好的选择。
答案2
如果您与路由器之间的带宽为 10Kb/s,那么套接字确实会被阻塞一段时间,这段时间是将电信号发送到“下一跳”设备的时间。如果您的 Internet 连接限制为 10Kb/s,那么您的套接字将很快被释放,但路由器必须自己处理下一个对等点,因此当您的套接字被清空时,它的套接字将很忙。