udp的一些简单记录

UDP首部字段如下图所示



UDP是无连接的传输协议,
为什么有了面向连接的可靠数据传输协议TCP,还要有UDP呢?
1 应用层可以高度控制要发送的数据 和发送的时间。 这里解释一下,难道tcp不可以吗? tcp也可以,通过设置 TCP_NODELAY 选项来取消nagle算法,nagle算法是tcp用来拥塞控制的算法,这里就不多扯了,看官可以自行去百度一下。


2无需建立连接,很明显TCP发送数据,需要先进行三次握手,这得耗费一些时间和资源。这是DNS建立在UDP之上而不是TCP最重要的原因。


3无连接状态,TCP需要维护一大堆的连接状态,包括接收,发送缓存,拥塞控制参数,序号,确认号等。而UDP则不维护连接状态,这可以让主机给更多的用户提供服务。


4首部分组小,TCP 首部20个字节,加上实际情况中选项的12个字节,32个字节。 而UDP只有短短的8个字节。大大减少了首部的开销。


对于首部的几个字段,简单解释下,源端口号,目的端口号,分别是源主机发送消息的端口号,和目的主机接收消息的端口号。

长度是指该udp报文段的整个的长度,即首部+数据的长度,这点跟TCP首部的长度字段不同,TCP首部的长度字段指的是该TCP报文段的首部的长度。长度字段占了2个字节,因此这也限定了一个UDP报文段的最大的长度,2的16次方-1,6W多字节,如果你从应用层发送的数据长度-8(UDP首部长度)大于这个长度,将会发送失败。

检验和,提供差错检测,怎么个检测法呢,检验和字段的值是报文段中所有的16比特字相加得到的值取反(求和过程中有溢出都丢掉不要),最后检验和字段和数据字段相加若不是得到16个1,则出错了。


UDP虽然不提供可靠数据传输服务,但是我们可以在应用层,做一些处理,使我们的应用实现可靠的数据传输,如在应用层上做确认与重传的机制。


你可能感兴趣的:(网络,UDP)