• 【网络协议】UDP


    UDP协议与TCP协议都是传输层协议,应用层把数据拷贝到传输层,后续动作由下层自行决定。

    UDP协议端格式

    16位 UDP 长度 , 表示整个数据报 (UDP 首部 +UDP 数据 ) 的最大长度 ;(也就是65535字节)
    如果校验和出错 , 就会直接丢弃 ;

    UDP的特点(相对于TCP)

    无连接 : 知道对端的 IP 和端口号就直接进行传输 , 不需要建立连接 ;
    不可靠 : 没有确认机制 , 没有重传机制 ; 如果因为网络故障该段无法发到对方 , UDP 协议层也不会给应用层返回任何错误信息;
    面向数据报 : 不能够灵活的控制读写数据的次数和数量 ;

    面向数据报

    应用层交给 UDP 多长的报文 , UDP 原样发送 , 既不会拆分 , 也不会合并 ;
    UDP 传输 100 个字节的数据 :
    如果发送端调用一次 sendto, 发送 100 个字节 , 那么接收端也必须调用对应的一次 recvfrom, 接收 100 个字节; 而不能循环调用 10 recvfrom, 每次接收 10 个字节 ;

    UDP的缓冲区

    UDP 没有真正意义上的 发送缓冲区 . 调用 sendto 会直接交给内核 , 由内核将数据传给网络层协议进行后续的传输动作;
    UDP 具有接收缓冲区 . 但是这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致 ; 如果缓冲区满了, 再到达的 UDP 数据就会被丢弃 ;
    UDP socket 既能读 , 也能写 , 这个概念叫做 全双工。

    UDP使用注意事项

    我们注意到 , UDP 协议首部中有一个 16 位的最大长度 . 也就是说一个 UDP 能传输的数据最大长度是 64K( 包含 UDP 首部).
    然而 64K 在当今的互联网环境下 , 是一个非常小的数字 .
    如果我们需要传输的数据超过 64K, 就需要在应用层手动的分包 , 多次发送 , 并在接收端手动拼装 ;

    基于UDP的应用层协议

    NFS: 网络文件系统
    TFTP: 简单文件传输协议
    DHCP: 动态主机配置协议
    BOOTP: 启动协议 ( 用于无盘设备启动 )
    DNS: 域名解析协议(也可以使用TCP)
    当然 , 也包括你自己写 UDP 程序时自定义的应用层协议 ;
    问题1:报头和有效载荷如何分离,如何交付?
    报头有16位报文长度,减去8字节固定报头长度就是有效载荷。
  • 相关阅读:
    Maven的详细安装步骤说明
    9/5 二维费用背包+基环树+01变型背包
    uni-app 之 解决u-button始终居中问题
    华为云应用魔方 AppCube 创建问卷调查应用的使用体验
    【Linux】环境变量
    Elasticsearch开启用户验证
    iptables问题
    rk3568 Android 11在系统怎样执行命令获取SN号
    【systrace学习】atrace打开各系统层tag开关的原理
    【DPDK】dpdk样例源码解析之五:dpdk-rss
  • 原文地址:https://blog.csdn.net/zzxz8/article/details/133365226