传输层(2)-UDP协议

来源:互联网 发布:淘宝服装卡片祝福语 编辑:程序博客网 时间:2024/05/19 20:22

概念
UDP(用户数据报协议)是一种无连接不可靠全双工的基于报文段端到端传输层协议,具有简单的差错控制机制,不具有流量控制和拥塞控制

特点
●无连接:不需要建立连接和释放连接;各个数据报相互独立;数据报没有编号
●不可靠:数据报有可能丢失
●全双工:数据可以在两个方向上同时传输
●报文段:UDP由于是无连接的,所以不能实现数据流的传输,UDP将发送进程每次交付的足够少的数据封装到数据报
●端到端:UDP通过端口区分不同的进程,实现进程间传输数据,每个进程只使用一个端口,即使需要和多个进程通信
●传输层:UDP相对于IP协议只是增加了进程间的通信,位于传输层
●差错控制:通过检验和字段校验,如果数据出错则丢弃

应用场景
UDP协议简单,不需要建立连接,额外开销小。如果发送进程每次发送的报文短且不关心数据可靠性,又注重传输速度,可以使用UDP协议。

报文格式
这里写图片描述

●源端口号:源主机上进程使用的端口号,16位
●目的端口号:目的主机上进程使用的端口号,16位
●总长度:数据报的总长度,16位,最大为65535,
●检验和:对数据报首部和数据部分进行校验

差错控制
UDP通过检验和对首部和数据进行校验,不过在校验时,需要使用增加12个字节的伪首部,伪首部即不向下传递也不向上传递,仅仅用于校验。
含有伪首部的首部结构如下
这里写图片描述

发送方在发送报文时可以选择是否计算检验和,如果不计算,那么检验和字段全部填入0,如果计算需要通过以下步骤计算检验和:首先将数据划分为长为16的段(检验和字段全零),然后将所有段进行相加,最高位溢出的数据加到最低位;最后将得到的和按位取反。如果最后计算出的检验和为全零,则对检验和再次取反,检验和字段实际填入的值为全1。接收方将所有分段(包含检验和)相加,然后按位取反,如果为全零,则数据没有发生错误,否则数据出错
具体计算过程如下
这里写图片描述

封装与解封
封装:发送进程将需要发送的报文连同数据长度以及一对套接字地址,交给UDP,UDP将添加首部后再交给IP,IP再加上首部传给数据链路层封装成帧,最后传给物理层
解封:目的主机收到报文后,物理层将信号转换为比特,传给数据链路层,数据链路层进行检查,若无差错,剥去首部和尾部将数据报传给IP,IP检查数据是否有错,若无差错,则剥去首部将数据报以及发送方和接收方的IP地址交给UDP,UDP对报文进行检查,若无差错,则将数据传给接收进程
具体过程如下
这里写图片描述

复用和分用
当发送端有多个进程需要发送数据,但只有一个UDP,此时需要复用,实现进程与UDP多对一的关系
接收端只有一个UDP,但有多个进程需要接收数据,此时需要分用,实现UDP与进程一对多的关系

0 0
原创粉丝点击