在测试UDP数据传输的过程中,发现客户端上传的数据有不完整现象,发现有时出现一个数据包分了两次接收的情况。
目前客户端(以下称为终端)采用GPRS方式以UDP协议传输。
对于此问题的分析,要追溯到TCP/IP 四层模型(以下为自底向上)
链路层-->网络层-->传输层-->应用层
UDP与TCP一样,属于传输层协议,而链路层有个MTU(最大传输单元)
【
因特网协议允许IP分片,这样就可以将数据包分成足够小的片段以通过那些最大传输单元小于该数据包原始大小的链路了。这一分片过程发生在网络层,传输层是 OSI 模型中最重要的一层,这里是根据窗口控制传输,而非MTU。传输协议同时进行流量控制或是基于接收方可接收数据的快慢程度规定适当的发送速率。除此之外,传输层按照网络能处理的最大尺寸将较长的数据包进行强制分割。例如,以太网无法接收大于1500字节的数据包。发送方节点的传输层将数据分割成较小的数据片,同时对每一数据片安排一序列号,以便数据到达接收方节点的传输层时,能以正确的顺序重组,该过程即被称为排序。它使用的是将分组发送到链路上的网络接口的最大传输单元的值。原始分组的分片都被加上了标记,这样目的主机的TCP层就能将分组重组成原始的数据包了。
】
以太网的数据