UDP协议

Feb 18, 2020

0x01、UDP协议分析

UDP(用户数据报协议 User Datagram Protocol): 是一个简单的面向数据报的通信协议,位于OSI模型的传输层。在RFC 768中被规范。为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验字段。

许多关键的互联网应用程序使用UDP,包括:

  • 域名系统(DNS),其中查询阶段必须快速,并且只包含单个请求,后跟单个回复数据包;
  • 动态主机配置协议(DHCP),用于动态分配IP地址;
  • 简单网络管理协议(SNMP);
  • 路由信息协议(RIP)。

UDP报头共4个字段(每个字段占2个字节)8字节。在IPv4中,“来源连接端口”和“校验和”是可选字段。在IPv6中,只有来源连接端口是可选字段。

报文长度:UDP报头和数据总共占用的长度(最小8字节)

校验和:如下图

  1. 把伪头部添加到UDP上;
  2. 计算初始时是需要将检验和字段添零的;
  3. 把所有位划分为16位(2字节)的字(不足后面补0)
  4. 把所有16位的字相加,如果遇到进位,则将高于16字节的进位部分的值加到最低位上。
  5. 将所有字相加得到的结果应该为一个16位的数,将该数取反则可以得到检验和checksum。

伪头部


0x02、 UDP示例(ip4)

  • 来源地址:c0a8 10d7
  • 目的地址:c0a8 10e4
  • 全零 协议名 UDP报文长度:0011 0012
  • 来源端口 目标端口:aa43 270f
  • 报文长度 检验和:0012 0000
  • 数据:6865 6c6c 6f20 776f 7264
  • 检验和:ffffffffffff5da5
  • rec msg: hello word

客户端服务端代码

关键计算函数checkSum

udpnetworkudp

[算法] 二叉树

Wireshark

comments powered by Disqus