您的位置:首页 > 理论基础 > 计算机网络

UDP协议的应用

2016-07-21 10:26 190 查看
TCP与UDP:

1、面向有连接(TCP):

在发送数据之前,需要在收发主机之间连接一条通信线路。在面向有连接的方式下,必须在通信传输前后,专门进行建立和断开连接的处理。TCP 不提供广播或多播服务,由于 TCP 要提供可靠的、面向连接的传输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。

2、面向无连接(UDP):

面向无连接型则不要求建立和断开连接,发送端可于任何时候自由发送数据。接收端也永远不知道自己会在何时从哪里收到数据,接收端在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。

UDP是一种无连接的、不可靠的传输层协议,在完成进程到进程的通信中提供了有限的差错检验功能,设计比较简单的UDP协议的目的是希望以最小的开销来达到网络环境中的进程通信目的。

UDP协议是英文User Datagram Protocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间高速传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP不失为一项非常实用和可行的网络传输层协议。UDP协议不提供端到端的确认和重传功能,它不保证信息包一定能到达目的地,因此称为不可靠协议。UDP使用IP协议作为数据传输机制的底层协议。

UDP用户数据报传输过程中的封装与拆封:



                                                                            图1 UDP数据报封装与拆封

UDP数据报格式:

UDP报文称为一个用户数据报,它分为两部分:头部和数据区。报文头部中包含有源端口和目的端口、报文长度以及UDP检验和。

源端口和目的端口(端口是用来指明数据的来源(应用程序)以及数据发往的目的地(同样是应用程序))字段包含了16比特的UDP协议端口号,它使得多个应用程序可以多路复用同一个传输层协议及UDP协议,仅通过端口号来区分不同的应用程序。

长度(length)字段记录了该UDP数据包的总长度(以字节为单位),包括8字节的UDP头和其后的数据部分。最小值是8(报文头的长度),最大值为65535字节。

UDP校验和(Checksum)的内容超出了UDP数据报文本身的范围,实际上,它的值是通过计算UDP数据报及一个伪包头而得到的。校验和的计算方法与通用的一样,都是累加求和。


                                                                                               图2 UDP数据报格式

UDP检验和的检验范围:


                                                                                    图3 UDP检验和范围

伪首部并非TCP&UDP数据报中实际的有效成分。伪首部是一个虚拟的数据结构,其中的信息是从数据报所在IP分组头的分组头中提取的,既不向下传送也不向上递交,而仅仅是为计算校验和。

这样的校验和,既校验了TCP&UDP用户数据的源端口号和目的端口号以及TCP&UDP用户数据报的数据部分,又检验了IP数据报的源IP地址(数据源设备)和目的地址。伪报头保证TCP&UDP数据单元到达正确的目的地址。

因此,伪报头中包含IP地址并且作为计算校验和需要考虑的一部分。最终目的端根据伪报头和数据单元计算校验和以验证通信数据在传输过程中没有改变而且到达了正确的目的地址。

UDP数据报在IP报文中的封装:


                                               图4 UDP封装

如图所示,在IP数据报中UDP数据报存放于IP首部之后,UDP首部占据了8个字节,之后为UDP数据。

IP数据报是基于IP的网络中最基本的数据单元形式,在国际互联网络中的众多中间节点路由器,可以识别并转发该种数据报,提供给IP数据报最优的路径选择。具体的IP数据报格式如图5所示:

                                                                               图5 IP数据报格式

IP数据报严格划分为多个字段,并且规定了相应字段的内容:

1)协议版本:4位,表示该IP数据报所采用的具体版本类型,确定是IPv4还是IPv6,目前我们使用的是IPv4版本;

2)首部长度:4位,可表示的最大数值是15个单位(一个单位是4个字节),首部长度的最小值为5;

3)服务类型字段:TOS字段,8位,其中第0位至第2位组合表示优先级别第3位至第5位分别表示时延、吞吐量、可靠性,第6为表示最小费用的路由,第7位保留未用;

4)总长度字段:16位,指的是整个IP数据报的长度,是以字节为单位的,这要区别于首部长度的单位定义,利用首部长度和该字段可以计算出实际的数据内容的起始位置和长度。IP数据报最长可达65535字节,但大多数的网络在传输时都需要对其进行分片,主机也要求不能接收超过576字节的数据报;
IP发送模块完成IP协议功能,该模块接收来自传输层的数据单元,然后打包为IP数据报向下层发送。如果待发送的IP数据报的数据长度超过1480个字节,IP发送模块将对该数据报进行分片,其中最后一帧数据长度介于1到1480个字节。一旦前一帧发送完毕,紧接着发送下一帧。

5)标识字段:16位,唯一标识主机发送的每一份数据报,
a1e9
通常每发送一份报文它的值就会加1,用于区分不同的分组,便于分片后的重装;

6)标志字段:FLAG字段,3位,其中第1位表示是否允许分片,第2位表示是否最后一段报文;

7)生存时间字段:英文缩写为TTL,  8位,设置数据报的生存时间,表示IP数据报最多可以经过的路由器的个数,每经过一个路由器转发数据报,数据报的TTL值就会减1, TTL的初始值由源主机设置,通常设为32或64;

8)协议字段:IP协议利用该字段对多个IP数据报进行分用,区分是哪一个协议向IP协议传送的字段;协议字段对应的协议如表1所示。



           表1   协议值

10)首部校验和:16位,根据IP首部计算的检验和码,对一个IP首部进行校验,如果发现数据出现差错,IP就丢弃该数据报,但不产生差错报文,而由上层协议去发现丢失的数据报并进行重传

11)源IP地址和目的IP地址:均为32位,分别表示数据源主机的IP地址和数据目的主机的IP地址;

12)任选项:是数据报中的一个可变长的可选信息,该字段一直都以犯位为界限在必要的时候插入值为0的填充字节,保证IP首部始终是32位的整数倍。

IP分片:

在TCP/IP分层中,数据链路层用MTU(Maximum Transmission Unit,最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头,如以太网的MTU为1500字节,实际上数据帧的最大长度为1512字节,其中以太网数据帧的帧头为12字节。当发送的IP数据报的大小超过了MTU时,IP层就需要对数据进行分片,否则数据将无法发送成功。

IP分片发生在IP层,不仅源端主机会进行分片,中间的路由器也有可能分片,因为不同的网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据报再次进行分片。而分片数据的重组只会发生在目的端的IP层。

在IP首部有4个字节是用于分片的,如下图所示。前16位是IP数据报的标识,同一个数据报的各个分片的标识是一样的,目的端会根据这个标识来判断IP分片是否属于同一个IP数据报。中间3位是标志位,其中有1位用来表示是否有更多的分片,如果是最后一个分片,该标志位为0,否则为1。后面13位表示分片在原始数据的偏移,这里的原始数据是IP层收到的传输的TCP或UDP数据,不包含IP首部。



需要注意的,在分片的数据中,传输层的首部只会出现在第一个分片中,如下图所示。因为传输层的数据格式对IP层是透明的,传输层的首部只有在传输层才会有它的作用,IP层不知道也不需要保证在每个分片中都有传输层首部。所以,在网络上传输的数据包是有可能没有传输层首部的。需要注意的,在分片的数据中,传输层的首部只会出现在第一个分片中,如下图所示。因为传输层的数据格式对IP层是透明的,传输层的首部只有在传输层才会有它的作用,IP层不知道也不需要保证在每个分片中都有传输层首部。所以,在网络上传输的数据包是有可能没有传输层首部的。



避免IP分片:

在网络编程中,我们要避免出现IP分片,那么为什么要避免呢?原因是IP层是没有超时重传机制的,如果IP层对一个数据包进行了分片,只要有一个分片丢失了,只能依赖于传输层进行重传,结果是所有的分片都要重传一遍,这个代价有点大。由此可见,IP分片会大大降低传输层传送数据的成功率,所以我们要避免IP分片。

对于UDP包,我们需要在应用层去限制每个包的大小,一般不要超过1472字节,即以太网MTU(1500)—UDP首部(8)—IP首部(20)。

对于TCP数据,应用层就不需要考虑这个问题了,因为传输层已经帮我们做了。在建立连接的三次握手的过程中,连接双方会相互通告MSS(Maximum Segment Size,最大报文段长度),MSS一般是MTU—IP首部(20)—TCP首部(20),每次发送的TCP数据都不会超过双方MSS的最小值,所以就保证了IP数据报不会超过MTU,避免了IP分片。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# udp 网络应用 通信