为什么udp流设置1316字节

简介: 为什么udp流设置1316字节

当我们在用udp推流时经常会看到pkt_size=1316,如下:

ffmpeg -re -i westLife.mp4 -f mpegts udp://127.0.0.1:5000?pkt_size=1316

上述命令中pkt_size=1316是什么意思,它是指udp发送音视频流时,每个udp包所含有的有效负载的大小。

在代码中设置如下:

AVDictionary*dic = NULL;

av_dict_set(&dic, “pkt_size”, “1316”, 0); //Maximum UDP packet size


那么大小为什么是1316呢,以太网的MTU(Maximum Transmission Unit)通常是1500 bytes,因此,最好控制发送报文长度在1500 bytes以下,以TS over UDP场景为例,通常每个TS包大小为188 bytes,因此,每个UDP包中最大可包含TS包的数目为floor((1500 – 8 -20 )/ 188) = 7,即有效数据为188 * 7 = 1316bytes,8和20分别为UDP包头和IP包头的长度。


补充:

MTU(Maximum Transmission Unit)网络上传送的最大数据包大小。


MTU的单位是字节byte,主流网络是以太网(Ethernet)MTU是1500,以太网的相关网络设备MTU是1500。


MTU其实属于OSI参考模型第2层(数据链路层),目的是限定【MAC帧中数据部分(payload)的大小】的值,会影响到【第3层的整个IP封包的大小】,此大小包括IP数据包的包头;而最终IP数据包是要放进MAC帧。


28字节的大小,是 【IP包头的20字节】+ 【ICMP的包头8字节】。


1500 bytes (Ethernet mtu) – 20 byte (IP header) – 8 byte (ICMP header) = 1472 byte

ping -s 1472 -M do 192.168.100.79


如下:

PING 192.168.100.79 (192.168.100.79) 1472(1500) bytes of data.
1480 bytes from 192.168.100.79: icmp_seq=1 ttl=64 time=0.196 ms
1480 bytes from 192.168.100.79: icmp_seq=2 ttl=64 time=0.208 ms
^C
--- 192.168.100.79 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1032ms
rtt min/avg/max/mdev = 0.196/0.202/0.208/0.006 ms
ping -s 1473 -M do 192.168.100.79
PING 192.168.100.79 (192.168.100.79) 1473(1501) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- 192.168.100.79 ping statistics ---
5 packets transmitted, 0 received, +5 errors, 100% packet loss, time 4099ms


8daa430084e846b4922373ff627677ab.png


thxchtb3wcn3k_d11fc1ff3db9431d8ad7575e9297ae48.png

相关文章
|
网络协议 安全 网络安全
【UDP】——为什么 UDP 数据包不能超过 512 个字节
一开始了解的是 DNS 服务使用的是 UDP 协议,后面看到 DNS 服务主要使用 UDP 协议,在少数情况(传输的数据超过 512 个字节)下也会使用 TCP 协议,因为 UDP 数据包不能超过 512 个字节。那问题来了,为什么 UDP 数据包不能超过 512 个字节呢?
2969 0
【UDP】——为什么 UDP 数据包不能超过 512 个字节
|
缓存 网络协议 算法
【web】TCP/UDP协议详解(字节二面:TCP三次握手、四次挥手)
本文介绍了计算机网络UDP/TCP协议格式和特点、重点介绍保证TCP可靠性的 确认应答机制(数据编码+超时重传)、连接管理机制(TCP三次握手、四次挥手)、流量控制机制、拥塞控制机制、快重传、延时应答、捎带应答机制等。
200 0
|
算法 Windows 数据安全/隐私保护
|
网络协议 Linux
UDP socket 设置为的非阻塞模式
UDP socket 设置为的非阻塞模式 Len = recvfrom(SocketFD, szRecvBuf, sizeof(szRecvBuf), MSG_DONTWAIT, (struct sockaddr *)&SockAddr,&ScokAddrLen);UDP socket 设置为的阻塞...
3086 0
|
2月前
|
存储 网络协议 算法
UDP 协议和 TCP 协议
本文介绍了UDP和TCP协议的基本结构与特性。UDP协议具有简单的报文结构,包括报头和载荷,报头由源端口、目的端口、报文长度和校验和组成。UDP使用CRC校验和来检测传输错误。相比之下,TCP协议提供更可靠的传输服务,其结构复杂,包含序列号、确认序号和标志位等字段。TCP通过确认应答和超时重传来保证数据传输的可靠性,并采用三次握手建立连接,四次挥手断开连接,确保通信的稳定性和完整性。
83 1
UDP 协议和 TCP 协议
|
9天前
|
网络协议 算法 网络性能优化
|
3天前
|
缓存 负载均衡 网络协议
面试:TCP、UDP如何解决丢包问题
TCP、UDP如何解决丢包问题。TCP:基于数据块传输/数据分片、对失序数据包重新排序以及去重、流量控制(滑动窗口)、拥塞控制、自主重传ARQ;UDP:程序执行后马上开始监听、控制报文大小、每个分割块的长度小于MTU
|
19天前
|
网络协议 前端开发 物联网
TCP和UDP区别?
本文首发于微信公众号“前端徐徐”,详细介绍了TCP和UDP两种传输层协议的核心概念、连接性和握手过程、数据传输和可靠性、延迟和效率、应用场景及头部开销。TCP面向连接、可靠、有序,适用于网页浏览、文件传输等;UDP无连接、低延迟、高效,适用于实时音视频传输、在线游戏等。
31 1
TCP和UDP区别?
|
11天前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
38 10
|
21天前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
26 1