美文网首页UDP
UDP丢包原因总结

UDP丢包原因总结

作者: 小怪兽狂殴奥特曼 | 来源:发表于2018-05-08 10:56 被阅读2285次

丢包检查方法

  • 给每个UDP包编号,对比收发端的接收到的包。对于UDP协议层上的包,例如RTP包,可以从RTP包中读出包的序列号进行判断。
  • 抓包。发送端和接收端分别抓包。linux下可以使用tcpdump,windows下使用wireshark。
  • linux下,可以使用watch netstat -su查看丢包统计。主要看RcvbufErrors和SndbufErrors。如果两个统计项的数字都在不断增加,表明网卡有丢包。

发送方丢包

发送的包太大

发送的包比64K大会导致UDP协议sendto返回错误。
发送的包比MTU大,UDP包在接收端容易丢包,可查看接收端的网卡统计。可考虑把包切分到MTU一下再发送。

发包速度太快

发包速度太快的话,可能有两个问题:1.接收端来不及接收导致接收端丢包。2.发送端网卡处理不过来。这个时候sendto没有返回错误,但是用netstat查看会发现SndbufErrors不断上升,有可能是网卡的输出队列太小导致。可以考虑使用ifconfig命令把txqueuelen设置大一些。

UDP包流量太大

同一个端口发送的数据量太大时会导致网卡丢包,这个时候可以用netstat查看会发现SndbufErrors不断上升。sendto会返回-1.这个时候可以考虑增大/proc/sys/net/core/wmem_max的值。
这种情况尤其是同时给多个客户端发送音视频数据时导致。笔者曾经遇到过这么一次情况。一个端口向8个客户端发送视频流时,网卡流量大概400M/s,sendto会返回-1,errno 11.程序里也调用setsockopt设置了发送缓冲区为60M,然而还是会丢包。后来将系统参数/proc/sys/net/core/wmem_max设到60M才解决问题。

接收端丢包

接收缓冲区太小

接收缓冲区小于发送客户端的包的大小,或者接收客户端recvfrom速度太慢,导致接收缓冲区满丢弃数据。前一种问题,可以考虑增大接收缓冲区。后一种问题,可以考虑将接收操作和业务处理操作分离到不同的线程来处理。

相关文章

  • UDP丢包原因总结

    丢包检查方法 给每个UDP包编号,对比收发端的接收到的包。对于UDP协议层上的包,例如RTP包,可以从RTP包中读...

  • UDP丢包的原因

    检查方法: 发送数据打log,接受数据打log 原因: 发送打包太大 发送速度太快,for循环打话,速度是相当快的...

  • 黏包的处理

    socket通讯时,tcp不会丢包,会黏包;udp不会黏包,会丢包 tcp发生黏包的原因有二: 1、当一个数据发送...

  • LWIP UDP偶发丢包问题

    RTTHREAD LWIP实现UDP通讯,使用得socket通讯偶发UDP丢包,用Wireshark监控通讯数据,...

  • udp丢包分析

    test

  • 网络编程-黏包

    注意:只有TCP有粘包现象,UDP永远不会粘包 黏包的原因一: udp接受一个数据包的代码ret, addr = ...

  • 【tcp/udp】tcp/udp/icmp丢包分析

    一、 Linux 系统接收网络报文的过程 Linux 系统接收网络报文的过程: 首先网络报文通过物理网线发送到网卡...

  • 关于android 实现udp 过程

    注意 :udp存在丢包问题 也不能保证每次发包都能接收到 UDP通信步骤: 1、建立连接的IP地址和端口号,IP即...

  • 两种丢包处理策略:丢包重传 和 FEC(前向纠错)

    两种丢包处理策略 为了保证实时性,通常适应UDP协议来针对RTP数据进行传输,而UDP无法保证数据传输的质量,所以...

  • 《趣谈网络协议》10-12章 day02

    tcp和udp协议的区别,两者设计的初衷是基于两个不同的假设。 udp假设网络的状况一定是“好的”,超时和丢包都不...

网友评论

    本文标题:UDP丢包原因总结

    本文链接:https://www.haomeiwen.com/subject/wvyirftx.html