首页 > 代码库 > UDP协议总结
UDP协议总结
说明:本文仅供学习交流,转载请标明出处,欢迎转载!
本文是如下参考文献的相关总结:
[1] 《TCP/IP详解 卷1:协议》
[2] 《TCP/IP协议族 第4版》
[3] 《计算机网络 第5版》
用户数据报协议的英文缩写为UDP,UDP是一种无连接且不可靠的运输层协议,UDP没有流量控制和拥塞控制,除了检验和之外,没有其他的差错控制。
I.UDP数据报
UDP数据报由UDP首部和数据组成,其中UDP首部包含8B,源端口号和目的端口号用于标识源进程和目的进程,总长度指的是首部和数据部分的总长度,检验和用于检测UDP用户数据报在传输过程中是否发生错误。UDP接收上层应用层的报文后,加上UDP首部后,原封不动地交给IP层,所以UDP一次交付一个完整的报文,至于分片,则由IP层来控制,所以应用层必须交付给UDP合适大小的报文。
II.UDP复用与分用
UDP复用:在发送方,不同的应用层进程都可以使用UDP协议传送数据。(多对一)
UDP分用:在接收方,传输层在去掉UDP首部后能够将这些数据正确交付到目的应用层进程。(一对多)
NOTICE:源点的运输层执行的是复用,终点的运输层执行的是分用
III.端口号
如果说IP地址可以标识主机,那么端口号则可以标识主机上的进程,UDP套接字=(IP地址:端口号)。
知名端口号:由ICANN指派和控制,这些端口号指派给了TCP/IP最重要的一些应用程序。例如:FTP:21,Telnet:23,SMTP:25,DNS:53,TFTP:69,HTTP:80,SNMP:161,SNMP(trap):162
注册端口号:ICANN既不指派也不控制,但这些端口号必须在ICANN注册以防止重复。
临时端口号:在客户进程运行时才动态选择。当服务器进程收到客户进程的报文后,根据该端口号,把数据发送给客户进程。通信结束后,该客户端口号消失,以便其他客户进程使用。
IV.UDP检验和
我们知道,IP检验和只是IP数据报的首部参与运算,而TCP,UDP,ICMP,IGMP,RIP等的首部和数据部分都参与检验和运算,而对于传输层的UDP而言,同样是首部和数据部分均参与检验和的运算,但是UDP的检验和运算有如下两个特点:
1.若UDP数据报的数据部分是奇数个字节,则需要采用零比特填充法填充好,即在数据部分的最后面填充若干个0,使得方便16为检验和的计算,这些0仅供检验,不会参与传送。
2.在检验和时,要在UDP数据报之前增加12B的伪首部,伪首部参与检验和运算。伪首部既不向下传送,也不向上提交,仅供检验。
伪首部之所以“伪”,是因为它并不是UDP首部的一部分,只是在检验和时,临时添加到UDP用户数据报前面,得到一个临时的UDP用户数据报。
notice:
1). 如果是TCP,则协议字段的值是6;
2).伪首部是IP首部的一部分,包含32位源IP地址、32位目的IP地址、8位协议,16位UDP长度。伪首部的作用在于让UDP检查数据是否到达目的地,具体而言是:a.通过目的IP地址来判断该数据报是不是发送给本机。b.协议字段,UDP可以判断IP有没有把不应该传给UDP(如需传给TCP)的数据传给UDP;
3) 在求解检验和的过程中,先将UDP数据报划分成许多16位的序列,然后将各位取反后求和(相当于异或运算,因为采用不进位机制),并将求和后的结果再取反,存入检验和字段中,所以整个过程出现两次取反的现象。
4)UDP的检验和是可选的,而TCP的检验和是必需的。
5)UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证,其目的是为了发现UDP首部和数据部分在发送端过程中是否发生任何改变。
6)根据3),如果第一次取反后求和的结果为0,则再取反后结果为全1,,则存入检验和字段的值为全1;如果传送的检验和为0,说明发送端没有计算检验和,因为在计算前该字段的值被填入全0。
V.UDP的应用
UDP相对TCP而言,最大的优点是数据报短,传输速率快,适合于对数据传输完整性要求不是高的服务的实时性服务。具体应用如下:(就是针对应用层协议)
1)UDP适用于只要求简单的请求-响应通信的进程:DNS(注意:HTTP使用的是TCP,FTP使用的是TCP,因为FTP需要传输大量的数据));
2)UDP适用于本身具有内部流量控制和差错控制机制的进程:TFTP;
3)UDP适用于管理进程:SNMP,BOOTP,DHCP,NFS;
4)UDP适用于多播。
5)UDP适用于路由更新:RIP;
6)UDP适用于实时应用:IP电话、流式多媒体通信(注意:SMTP使用的是TCP,因为邮件强调的是数据的完整性,而非实时性)
点点滴滴:
1.UDP是一种面向无连接的不可靠运输层协议。“不可靠”是因为UDP把数据发送出去,并不保证它们能到达目的地。在传输数据之前不需要建立连接,接收方在收到UDP报文后,不需要提供确认机制;如果数据发生错误或丢失,UDP不提供超时重传机制,UDP使用尽最大努力交付。
2.UDP是面向报文的,发送方的UDP对应用程序(位于应用层)交下来的报文,在添加首部后就向下交付给IP层。
3.UDP不提供拥塞控制和流量控制,仅提供校验和的差错检验。(流量控制是针对两个端点,而拥塞控制是针对真个网络,是一个综合性的控制)
4.UDP支持一对一、一对多、多对一、多对多的交互通信。
5.UDP的校验和计算过程中加入了伪首部和0填充位。