计网-UDP

UDP

什么是UDP?

UDP:User Datagram Protocal 用户数据报。

  • UDP是无连接的
    通信前不需要建立连接,通信结束也无需释放连接。

  • UDP是不可靠的
    它是尽最大努力交付,不能确保每一个数据报都送达。

  • UDP没有拥塞控制
    UDP始终以恒定的速率发送数据,并不会根据网络拥塞情况对发送速率作调整。这种方式有利有弊。
    弊端:网络拥塞时有些报文可能会丢失,因此UDP不可靠。
    优点:有些使用场景允许报文丢失,如:直播、语音通话,但对实时性要求很高,此时UDP还是很有用武之地的。

  • UDP支持一对一、一对多、多对多、多对一通信(单播、多播、广播)
    而TCP只支持一对一通信。

  • UDP首部开销小,只有8字节。
    而TCP头部至少由20字节,相比于TCP要高效很多。

UDP的报文结构

在这里插入图片描述
UDP首部只有4个字段,每个字段占用两个字节。

  • 报文长度
    表示 UDP 数据报长度,包含 UDP 报文头和数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8,最大长度为 65535 字节。
  • 校验和:
    校验和字段用来校验报文段在传输的过程中是否出现了差错

UDP伪首部

在这里插入图片描述
什么是伪首部?
在 TCP或 UDP 的数据报中,在数据报首部前面增加源 IP 地址、目的 IP 地址、IP 分组的协议字段、TCP 或 UDP 数据报的总长度等共12字节,所构成的扩展首部结构就是伪首部。

为什么要有伪首部?
此伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验数据报的正确性
具体怎么校验过程:
将UDP伪首部、首部、数据每16位一组进行二进制反码求和,再将求和结果求反码,填入校验和字段

udp怎么实现可靠传输?

参考
怎么实现可靠传输?

传输层无法保证数据的可靠传输,但是可以通过应用层来实现。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,而是转移到了应用层。

最简单的方式是在应用层模仿传输层TCP的可靠性传输。

可靠UDP的简单设计如下:
1、添加seq/ack机制,确保数据发送到对端
2、添加发送和接收缓冲区
3、添加超时重传机制。
发送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小分配seq。数据到达接收端后接收端放入缓存,并发送一个ack=x的包,表示对方已经收到了数据。发送端收到了ack包后,删除缓冲区对应的数据。时间到后,定时任务检查是否需要重传数据。

猜你喜欢

转载自blog.csdn.net/qq_40337086/article/details/122978717