文章目录
UDP服务端丢包-包丢在什么地方?
分析到UDP主要丢包原因
承接文章:UDP服务端丢包-发送频率过高导致丢包
我们分析到UDP主要丢包原因
发送方丢UDP包
网络过程中丢UDP包
接收方丢UDP包,发送频率过高导致丢包,主要会造成接收方自身丢包。
我们知道了,丢包问题从三个维度去看,但是具体的,我们如何判断是哪个维度丢的包呢?
linux 系统接收网络报文的过程
- 首先网络报文通过物理网线发送到网卡
- 网络驱动程序会把网络中的报文读出来放到 ring buffer 中,这个过程使用 DMA(Direct Memory Access),不需要 CPU 参与
- 内核从 ring buffer 中读取报文进行处理,执行 IP 和 TCP/UDP 层的逻辑,最后把报文放到应用程序的 socket buffer 中
- 应用程序从 socket buffer 中读取报文进行处理
在接收 UDP 报文的过程中,图中任何一个过程都可能会主动或者被动地把报文丢弃,因此丢包可能发生在网卡和驱动,也可能发生在系统和应用。
对于 UDP 来说,如果有少量的丢包很可能是预期的行为,比如丢包率(丢包数量/接收报文