00:00
熟悉网络编程的,尤其搞实时音视频聊天技术的同学们都有个约定俗成的主观论调,一提起up和TCP,马上想到的是upp没有TCP可靠,但upp肯定比TCE高效。说到upp比TP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟。Upp报文格式如图所示,一元端口16BITS发送端的端口2目的端口16BITS及接收端的端口三长度16BITS upp数据包总的大小包头加数据单位字节四校验值16BITS错误检查码基于算法计算此up数据包是否损坏。每个Up socket都有一个接收缓冲区,但没有发送缓冲区。
01:00
从概念上来说就是只要有数据就发,不管对方是否可以正确接收,所以不缓冲不需要发送缓冲区。Up虽然有接收缓冲区,但当套接口接收缓冲区满时,新来的数据报无法进入接收缓冲区,此数据报就被丢弃。因为Up是没有流量控制的,快的发送者可以很容易的就淹没慢的接收者,导致接收方的up丢弃数据报。而且如果在传输过程中,一次传输被分成多个分片,传输中有一个小分片丢失,那接输端最终会舍弃整个文件,导致传输失败,这就是up不可靠的原因。逐步分析,Linux手册中有设置up发送缓冲区相关属性,也明确提到了s buffer的概念,那这是否意味着UDP是有发送缓冲区的吗?我们再看一下unix network programming书中所述。
02:00
书中的描述很清楚了,Up是没有发送缓冲区的,因为up是不可靠的,它不必像TP一样需要一个实质的发送buffer,而且真正upp写成功返回其实是传递到了链路层的output q中。Upp包最佳传输大小与分片数据链路层最大传输单元是1500字节m tu要想IP层不分包,那么upp数据包的最大大小应该是1500字节,IP头20字节,Upp头8字节等于1472字节。我们知道udpb是不可靠的传输协议,为了减少up up包丢失的风险,我们最好能控制up up包在IP层协议的传输过程中不要被切割,分片分的越多。虽然在传输层都是一次send,一次rack Lee, 但在传输过程中会传输。
03:00
而此,那么丢包的概论就越大。Up PE丢包的原因,1、upp缓冲区满,2、up PE缓冲区过小或文件过大,3、2缓存过7次,接收端处理时间过长,5、发送的包巨大,6、发送的包频率太快,7、局域网内不丢包供网上丢包。Upp丢包的解决方案,1、从发送端解决延迟发送,2、从接收端解决数据接收与数据处理项分离,3、从接收端解决修改接收缓存大小。UD致命性缺点,UD是无连接的面向消息的数据传输协议,与TP相比有两个致命的缺点,1、数据包容易丢失,2、数据。
04:00
颇无序。解决方案1,回复加重发加编号机制。解决方案2,冗于传输。解决方3 rap p回到正题,相信很多同学都认为upp无连接,无需重传和处理确认up PE肯定比较高效。然而UDP在大多情况下并不一定比TCP高效。影响Upp高效因素有以下三点,Due无法智能利用空闲带宽,导致资源利用率低,2、up无法动态调整发包,3、改进up的成本较高。
我来说两句