面向无连接的传输UDP协议

面向无连接的传输: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的某种实现知识丢弃受损的报文段;其他实现是将受损的报文段交给应用程序并给出警告。

猜你喜欢

转载自839299993.iteye.com/blog/2215535