UDP协议

作者: wayyyy | 来源:发表于2017-10-11 20:22 被阅读0次

    UDP协议是一个简单的面向数据报的运输层协议。进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。
    这与面向字节流协议的TCP不同,应用层产生的全体数据与真正发送的单个IP数据报可能没什么关系。

    特点
    • UDP是无连接的
      不需要建立连接,也不需要在最后释放连接,因此减少了开销和发送数据之前的时延。

    • UDP使用尽最大努力交付

    • UDP是面向报文
      进程的每一个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这个与面向字节流的协议不同,如TCP, 应用程序产生的全体数据与真正发送的单个IP数据报没有什么联系。

    • UDP没有拥塞控制
      因此网络出现拥塞不会使源主机的发送速率降低。这对某些实时应用很重要。(例如IP电话,实时视频会议)要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据。

    • UDP支持一对一,一对多,多对一和多对多的交互通信
      而TCP因为建立连接,只能支持1对1,所以TCP不提供广播或多播服务

    • UDP首部开销很小
      只有8字节,比TCP的20字节的首部要短。

    UDP报文格式
    UDP报文格式.png
    • 源端口
      源端口号,标记发送进程。

    • 目的端口
      目的端口号,标记接收进程。

    • 长度
      UDP报文长度(首部+数据),其最小值是8(仅含首部)。UDP首部长度固定为8,所以减去8,则得到数据部分的起始地址。

    • 检验和
      包括UDP首部和数据部分,IP首部的检验和只覆盖IP的首部。
      同时UDP和TCP的检验和都会覆盖首部和数据,但UDP检验和是可选的,TCP检验和是必需的。
      其次,TCP和UDP的检验和都包括12字节的伪首部。

      检验和.png
    IP分片

    IP层要发送一份数据报时,要查询接口的MTU,并将IP数据报长度与其比较,如果需要则要进行分片。分片可以发生在原始发送端主机上面,也可以发生在中间路由器上。

    当IP数据报被分片后,每一片都成为一个独立的分组,具有自己的IP首部,任何运输层首部只会出现在第1片数据报分片中。并在选择路由时与其他分组独立。当数据报的这些片到达目的端时,可能会发生失序,但是在IP首部中有足够多的信息让接收端能正确组装这些数据报片。

    尽管IP分片过程是透明的,但即使只丢失一片数据也要重传整个数据报,因为IP层没有超时重传机制。由更高层来负责超时和重传(TCP 有超时和重传机制,但UDP没有)。当来自TCP报文段的某一片丢失了后,TCP超时后会重发整个TCP报文段,该报文段对应于一份IP数据报,没有办法只重传数据报中的一个数据报片。

    以太网上,数据帧的最大长度是1500字节,其中1472字节给数据(1500 - IP首部为20字节 - UDP首部为8字节)。

    IP报文.png

    现在假定我们发送一个数据内容为1473长度的报文,则会发生IP分片。

    IP分片.png
    ICMP不可达差错

    发生ICMP不可达差错的一种情况就是:当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特。
    如果某个程序需要判断到达目的端的路途中最小MTU是多少(路径MTU发现机制)。那么这个差错就可以被程序利用。

    这种情况下的ICMP不可达差错报文格式如图所示:

    相关文章

      网友评论

          本文标题:UDP协议

          本文链接:https://www.haomeiwen.com/subject/szliyxtx.html