html tool

2020年7月6日星期一

转:udp 校验和介绍

转: https://blog.csdn.net/limanjihe/article/details/85270291

关于udp传输的不可靠性,用过这个的人都知道会丢包。具体细节可能就不清楚了,经过我的理解和总结,有以下两点:

1)udp包的大小可以达到64k,但实际上mtu大小只有1k多,如果直接发一个超过mtu大小的包,就会在协议层被分片,这样的问题是,如果只要有一个分片在传输中出错了即校验不正确(这是较容易发生的),整个传输的udp包就被丢弃。注意是整个而不是单个分片。这就是为什么发送udp包通常也是1k多大小的原因,rtp是在udp之上的协议,也考虑了这个问题。
[popexizhi:
linux 查mtu  :cat /sys/class/net/${network}/mtu
winodws 查mtu:
管理员权限cmd
netsh interface ipv4 show subinterfaces 按下回车键查看当前的mtu 值;
看pope的虚拟机默认都是1500,windows和linux都是,但是看lo是
cat /sys/class/net/lo/mtu 
65536

windows:
 MTU  MediaSenseState   传入字节  传出字节      接口
------  ---------------  ---------  ---------  -------------
4294967295                1          0   14790933  Loopback Pseudo-Interface 1
  1500                5          0          0  VPN - VPN Client
  1500                1  219020484  106550520  以太网
  1500                1       9512     797253  VMware Network Adapter VMnet1
  1500                1       9512     796170  VMware Network Adapter VMnet8
  1500                5          0          0  以太网 2

]

2)实际上收到的数据都是经过校验的,不存在传错的问题,即在应用层调用udp传输时,不会出现发送了"ABCD",收到的却是"ABED"的情况,只有丢包或乱序的问题。而udp接收缓冲区过小也是造成丢包的原因,适当增大udp缓冲区能够降低丢包率。

[popexizhi:
原文后面详细讲解了,如何校验的,pope没有细看。
]

没有评论:

发表评论