第一章UDP数据的封装与拆装2.1UDP封装的基本内容[4]收到应用层提交的数据后,将其分段,并在每个分段前封装一个UDP头,最终的IP包是在UDP头之前再添加IP头形成的。IP用协议号17标识UDP。由于功能简单,UDP头相对于TCP头简化了很多,UDP头包含以下字段:1.源端口:16位的源端口号,含义与TCP相同2.目的端口:16的目的端口号,含义与TCP相同3.长度:16位的长度字段,表明包括UDP头和数据在内的整个UDP数据报的长度,单位为字节。4.检验和:16位的错误检查字段,基于部分IP头信息、UDP头和载荷数据的内容计算得到,用于检测传输过程中出现的错误。2.2UDP的封装与拆装[10]要从进程将报文发送到另一个进程,UDP协议就要将报文进行封装和拆装,如下(图16):UDP端口号(源、目的)IP地址(源、目的)物理网络地址(源、目的)MAC地址封装应用程序来自应用程序的报文UDP数据IP数据帧数剧UDP首部IP首部帧首部拆装图16封装:当进程有报文要通过UDP发送时,它就将此报文连同一对插口地址以及数据的长度传递给UDP。UDP收到数据后就加上UDP首部。然后UDP就将这用户数据报连同插口地址一起传递给IP。IP加上自己的首部,在协议字段使用值17,指出这数据是从UDP协议来的。这个IP数据报在传递给数据链路层。数据链路层收到IP数据报后,加上自己的首部(可能还有尾部),再传递给物理层。物理层将这些比特编码为电信号或光信号将其发送到远程的机器上。拆装:当这个报文到达目的只及时,物理层对信号解码,将其变应用程序来自应用程序的报文UDP数据UDP首部UDP数据IP首部帧数剧帧首部为比特,传递给数据链路层。数据链路层使用其首部(和尾部)检查数据。若无差错,则剥去首部和尾部,并将数据报传递给IP,IP软件进行它的检查。若无差错,就剥去首部,将用户数据报连同发送端和接收端的IP地址一起传递给UDP,UDP使用检验和对整个用户数据报进行检查。若无差错,则剥去首部,将应用数据连同发送端的插口地址一起传递给接收进程。在需要回答收到的报文时,就应将发送端的插口地址传递给进程。2.3UDP封装的应用[14]网络安全协议IPSec是目前适用于所有Internet通信的新一代安全技术标准,它可以“无缝”的为IP引入安全特性,并为数据提供身份认证,完整性检验,抗重播攻击以及加密等级制,网络地址转换NAT和IPSec与NAT一直都有矛盾,NAT进行地址映射的时候要对IP包进行修改,然而对于IPSec报文,这些信息是无法修改的,所以普通的IPSec报文无法穿越NAT设备,这是一个急需解决的问题,也是目前研究的一个难点。目前解决IPSec与NAT不兼容问题的思路中,UDP封装法是比较好的一种方案,我们需要一个不用对NAT设备位置进行控制的“主动”地解决方法,用UDP协议封装IPSec数据包可以满足这个要求。2.3.1因特网工程任务组的UDP封装格式[14]UDP封装的核心思想是把IPSec信包装入一个UDP/IP分组,然后让NAT去修改附加的UDP/IP分组,在IETF的一个草案中,提出了一种封装的方法,并给出了数据包的封装格式,其中前8字节为标准的UDP包头,源端口与目的端口采用与IKE相同的值,校验和为0.非IKE标志位全0的8个字节,以与发起者的IKE的cookie保持对齐。2.3.2因特网工程任务组UDP封装法中存在的问题[14]经过分析,IETFUDP封装法方案在解决兼容性方面仍然存在着几个问题:1.在IPSec中,进入的安全关联SA由三个参数确定,即地址、协议、安全参数索引SPI。若采用NAPT,在外部主机上面会有多个地址相同,SPI不同的SA。在处理进入数据包的时候,可以采用SPI值的不同来定位SA,而在处理外出数据包的时候,就不可能从多个有相同地址的外出SA中选择正确地SA了。2.若NAT网关为NAPT,发往内部各主机数据包的UDP封装的目的端口号都为500,这样一来,NATP就无法分解各个数据包究竟应该发送到内部的哪一台主机3.从外部主机向NAT网关内的主机发送数据时,需要用该主机的私网IP地址为目的地址来定位SA,因此对于进入外部主机的数据包必须将其源地址恢复成私网的IP地址后传递给上层协议,如果不对进入数据包的源地址进行处理,会导致在发送相应数据包时无法正确定位相应的SA对于以上缺陷,现在已经有了一些解决方案,比如设计NAT-T模块以及NAT模块,利用NAT-T模块进行UDP封装和解封装,利用NAT模块进行私网公网地址的转换2.3.3改进UDP封装方法改进的UDP封装方法是针对原有UDP封装方法的缺陷而设计的,它能够克服原有方案的缺点,更好的解决IPSec与NAT的冲突问题。改进UDP封装方法的封装格式为了正确定位安全关联,改进的UDP封装方案将主机自身的IP地址一同进行封装,从NAT网关内部发往NAT网管外部的数据包,在经过UDP解封装后,其源地址更改为原始IP地址,因此目标主机的IP层以上的各层会认为通讯对方的IP地址为内部主机的原始IP地址,他发送的数据包也将以该原始IP地址为目的地址,然而此原始IP地址为一个非法的IP地址,要想正确发送这个数据包,必须在IPSec处理完成后进行UDP封装,将其目的地址更改为与原始IP对应的合法IP地址,并将UDP包头中的目的端口号设置为与此原始IP地址相对应的端口号。因此需要将这些合法地址以及端口信息添加到安全策略库中,这个任务可有改进后的IKE来完成。2.3.4改进方案中的几个关键问题[14]1.用UDP包封装AH/ESP有助于解决NAPT阻碍AH/ESP的问题,在静态或者动态NAT存在的情况下,这种封装有时没有必要,某些情况下是否用UDP封装IPSec通信由是否存在NAPT而非NAT来确定,如果AH/ESP可以通过NAT则没有必要再加一层UDP包头来浪费带宽。NAT检测不仅要确定NAT存在的地址,也要确定NAT的类型,尤其应该能够区分NAPT2.对于动态NAT和NAPT,地址变换是动态的,这使对方的通信实体识别发生困难,在动态NAT和NAPT存在时,Keep-alive消息是维持NAT映射表以解决密钥更新问题所必要的。3.经过NAT变换之后,IKE发起放的源地址经过NAT变换会发生变化,而IKE的响应方在IKE第二阶段协商之前必须知道IKE发起方经过NAT变换之前的源地址。IPSec交互双方需要知道双方的原始地址以重新计算TCP校验和或者AHICV总结:UDP协议被广泛的使用在对网络数据传输实时性很高而对数据准确性要求不是非常高的场合,而当今网络传输物理介质的高速提升(光纤)也降低了数据包丢失的几率。当网络状态很好的时候,UDP协议的这两个缺点又可以很大程度上被克服。因此,UDP协议现在被广泛运用在很多UDP协议应用中,主要用来支持那些需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。参考文献:1.杭州华三通信技术有限公司.路由交换技术第1册(上册)清华大学出版社2011,072.牛瑛霞.TCP在移动环境下的性能及其改善.电信工程技术与标准化,2003,093.金庆华.TCP/IP传输层协议剖析.计算机与现代化,1998,014.贾刚,钟亦平,张世永.UDP数据流对TCP流影响的分析和模拟[J].计算机工程,2003,075.王亚军.一种轻量级的TCP/IP协议栈LwIP在嵌入式系统中的应用[J].计算机时代,2008,056.都沁萍.解析TCP与UDP协议及其异同.电脑知识与技术,2004,057.梁莉.TCP/IP传输层协议比较.成都师范高等专科学校学报,2003,048.王超.基于混合TCP-UDP的HTTP协议实现方法.单片机与嵌入式系统应用,2003,029.赖滇.基于UDP的防火墙穿透技术研究与实现.信息安全与通信保密,2006,0810.芦东听,张华强,王陈基于UDP的可靠数据传递技术研究?计算机工程,2003,0211.时曦,苏思妮,陈笑容.多点UDP互连的透明代理.计算机科学,2001,1212.张野,杨明,朱涛江,左钦文.UDP协议改进及其在嵌入式核辐射监测系统中的应用[A].2009全国计算机网络与通信学术会议论文集[C].200913.齐德琼,万春江.利用增强型UDP协议构建高效FTP传输机制[A].2009中国电影电视技术学会影视技术文集[C].201014.孙光辉王丽娟.一种改进的UDP封装法在网络安全协议与地址冲突中的应用[计算机教学与教育信息化]