UDP协议

UDP是一个简单的面向数据报的传输层协议,UDP不提供可靠性。

UDP首部

111587193737_.pic.jpg

  • 端口号表示发送进程和接受进程,IP层根据其首部中协议字段指定将数据报分配给TCP还是UDP,TCP端口号由TCP查看,UDP端口号由UDP查看。TCP端口号和UDP端口号是相互独立的,也就是说可以在同一端口号上拥有TCP和UDP请求。(有协议为TCP和UDP使用相同端口号)。
  • UDP长度字段包含首部和数据的字节长度。(冗余,IP首部中数据报长度字段指的是IP数据报全长,减去IP首部长度就是UDP数据报长度)
  • UDP校验和字段是覆盖首部(包括一个伪首部)和数据部分的,IP首部校验和字段只覆盖IP首部。UDP的校验和是可选的,TCP是必须的。

UDP数据报的长度可以为奇数字节,但是校验和算法把若干16bit字相加,可能需要在后面填充字节0,只是为了计算校验和,并不会被和UDP数据报一起传送。其次,UDP数据报和TCP段都包含一个12字节的伪首部,只是为了计算校验和而存在的。伪首部包含IP首部一些字段,目的是让UDP两次检查数据是否已经正确到达目的地。

计算过程:

  1. 首先校验和字段置0。
  2. 每16bit进行二进制反码求和。(如果产生进位将高16位再与低16相加)

如果校验和计算结果为0,则存入全1(65535)(应该为了区分初始为0)。如果传送的校验和为0,说明发送端没有计算校验和。

121587197258_.pic.jpg

如果发送端没有计算校验和,而接收端却去验证了校验和,发现差错后UDP数据报就要被悄悄丢弃。不产生任何差错报文。


参考

[1] TCP/IP详解卷1

results matching ""

    No results matching ""