面向无连接的传输:UDP协议
上次我们简单的介绍了一下传输层以及相关协议,这次我们就来详细的研究一下UDP,研究一下该协议是怎么工作,具有哪些功能。
最开始还是关于UDP的定义,首先看来自百度百科的:
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。
UDP协议全称是用户数据报协议[1] ,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
这段时间在网上查了一下关于UDP的资料,有人把UDP比作IP协议的傀儡,因为UDP也是不可靠传输,也只是尽力而为服务,而且值得注意的是,使用UDP时,在发送报文段之前,发送方和接收方的运输层实体之间没有握手。正因为如此,UDP才被称为无连接的。关于这个比喻更加详细的信息的话,大家可以看看这个:http://www.cnblogs.com/vamei/archive/2012/12/05/2798208.html
正因为如此,我们在选择传输层协议的时候,一定注意选择正确的,适宜的协议,关于选择协议时有一下几个建议:
1.是否需要连接建立;
2.是否需要从连接状态中获取参数;
3.分组的首部开销。(每个TCP报文段都有20字节的首部开销,而UDP仅有8字节的开销)
流行的因特网应用及其下面的运输协议:
应用 |
应用层协议 |
运输层协议 |
电子邮件 |
SMTP |
TCP |
远程终端访问 |
Telnet |
TCP |
Web |
HTTP |
TCP |
文件传输 |
FTP |
TCP |
远程文件服务器 |
NFS |
通常UDP |
流式多媒体 |
通常专用 |
UDP或TCP |
因特网电话 |
通常专用 |
UDP或TCP |
网络管理 |
SNMP |
通常UDP |
路由选择协议 |
RIP |
通常UDP |
名字转换 |
DNS |
通常UDP |
UDP报文结构:
UDP首部字段中只有4个字段,每个字段由两个字节组成,故UDP首部长度应为64bit(即一开始所说的8个字节)。
长度字段就如同它的名称一样相当于整个UDP报文段的字节数。
而检验和则提供了差错检测的功能。
那么在UDP首部中唯一值得注意的就是UDP检验和的计算。
UDP检验和的具体计算步骤是:发送方对报文段中的所有16bit字的和进行反码运算,求和时遇到的任何一处都被回卷。
回卷及时将超出16位的数字1与后16位数字相加。
比方说一共有3个16bit的字:
0110011001100000
0101010101010101
1000111100001100
那么前两个之和是:
0110011001100000+0101010101010101=1011101110110101
再将其与第三个相加,得出:
1011101110110101+1000111100001100=0100101011000010
由于最后一次相加有溢出,我们就把它回卷,因此最后一个就可以得出以上的结果,那么在接收方我们将以上的4个16bit字(包括检验和)全部加在一起,如果没有出现差错就应该是1111111111111111。
虽然根据UDP的检验和,UDP提供了相应的差错检测,但它对差错恢复无能无力。UDP的某种实现知识丢弃受损的报文段;其他实现是将受损的报文段交给应用程序并给出警告。