网工 udp

  1. udp 协议的特点:
    • 无需事先建立连接(和对方打招呼)也不管网络连通性
    • 包丢了就丢了,不保证网络包的顺序到达
    • 不管网络环境是否拥塞,完全听众上层应用
  2. udp 的使用场景
    • 网络环境好,不易丢包(或者说对丢包不敏感的应用)
    • 不需要一对一沟通,适用广播或者多播的协议。例:dhcp 、vxlan,使用D类地址组播IGMP 协议
  3. 基于 udp 的使用场景
    • QUIC Quick UDP Internet Connections 协议(快速 UDP 互联网连接)是 Google 提出的一种基于 UDP 改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。
    • 大多数流媒体协议
    • 采用自定义的可靠 UDP 协议,自定义重传策略,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成的影响。
    • IOT 物联网:推出了物联网通信协议 Thread,就是基于 UDP 协议的。
    • 移动流量上网的数据面对的协议 GTP-U 是基于 UDP 的。因为移动网络协议比较复杂,而 GTP 协议本身就包含复杂的手机上线下线的通信协议。

TCP面向字节流与UDP面向报文的区别

UDP(用户数据报协议)面向报文,TCP(传输控制协议)面向字节流,它们的区别如下:

一、数据传输单位

  • UDP面向报文
    • UDP把应用层交下来的数据添加首部后,就直接交付给IP层,既不合并,也不拆分,而是保留这些报文的边界。
    • 例如,应用层一次性传递1000字节的数据给UDP,UDP就会把这1000字节当作一个整体(一个报文)发送出去,在接收端也会一次性收到1000字节的完整数据。
    • 如果应用层传的报文大小超过了网络MTU(最大传输单元),则在IP层会进行分片,但对于UDP来说,它本身不关心也不知道IP层的分片操作。
  • TCP面向字节流
    • TCP把应用层交下来的数据看成一连串无结构的字节流,它不保留报文的边界。
    • 例如,应用层先后发送了两个1000字节的数据,TCP可能会根据当前的网络状况和自身的拥塞控制机制,把这2000字节数据划分成多个小的数据段进行发送,也可能会把它们合并成一个较大的数据段发送。
    • 在接收端,接收方的TCP把收到的数据放入接收缓冲区,应用程序可以根据自己的需求,在合适的时候从缓冲区读取任意数量的字节,因此接收方读取数据的次数和每次读取的数据量都是不确定的。

二、传输可靠性

  • UDP面向报文
    • UDP是不可靠的传输协议,它没有像TCP那样的确认、重传、拥塞控制等机制来保证报文的可靠传输。
    • 发送方UDP将报文发送出去后,并不关心报文是否正确到达接收方,也不会因为网络拥塞等原因而调整发送速率。
    • 因此,UDP适用于对实时性要求高、但对数据准确性要求相对较低的场景,如视频会议、直播等。
  • TCP面向字节流
    • TCP是可靠的传输协议,通过序列号、确认应答、超时重传、滑动窗口、拥塞控制等机制来保证数据的可靠传输和有序到达。
    • 对于发送的每一个字节的数据,都有相应的序列号进行标识,接收方会对接收到的数据进行确认应答,发送方如果在一定时间内没有收到确认,就会重传数据。
    • 这些机制确保了TCP能够在各种网络环境下,尽可能准确地将数据按序传输到接收方,适用于对数据准确性要求高的场景,如文件传输、电子邮件等。

三、数据处理方式

  • UDP面向报文
    • UDP的应用程序必须选择合适大小的报文。如果报文过大,在IP层分片后,若其中一个分片丢失,就会导致整个报文的丢失;如果报文过小,则会降低网络传输效率。
    • 由于UDP一次交付一个完整的报文,因此接收方的UDP在向上交付数据时,交付给应用层的也是一个完整的报文。应用程序需要根据报文的边界来识别不同的报文数据。
  • TCP面向字节流
    • 应用程序不必考虑数据的大小和边界问题,它只需关注从接收缓冲区读取数据的逻辑。
    • 例如,应用程序可以先读取一部分数据进行处理,然后再根据需要继续读取剩余数据,而不必关心这些数据在原始字节流中的位置和边界。
    • TCP的接收方会根据序列号将乱序到达的数据重新排序,然后放入接收缓冲区供应用程序读取。