Files
notes_estom/计算机网络/3.2 传输层-UDP.md
2019-10-22 12:39:14 +08:00

2.8 KiB
Raw Permalink Blame History

UDP

1 概述

UDP是一个简单的面向数据报的传输层协议进程的每个输出操作都正好产生一个UDP数据报并组装成一份待发送的IP数据报。因此如果应用程序使用UDP来实现则应用程序几乎是直接与IP打交道UDP只在网络层之上提供了非常有限的服务进程间数据交付和差错检测。

2 UDP的多路复用和多路分解

原理

传输层通过socket来提供多路分解和多路复用并且

  • 每个socket都由唯一的一个标识符
  • 每个报文段由特殊的字段来指示该报文段所要交付的套接字,源端口号和目的端口号就是这种目的的特殊字段

端口号是16比特的数字其大小在0到65536之间。0到1023之间的端口号是知名端口号其使用是受限制的指的是不能随意使用

过程

  1. 主机上的进程创建一个socket并为之申请一个端口号假设主机host1上进程A创建了一个socket并申请到端口号10000主机host2上的进程B创建了一个socket并申请到端口号20000
  2. 主机host1上的进程A想和主机host2上的进程B通信因而它从其与之关联的socket中发送一个数据报并将源端口设置为10000目的端口设置为20000然后将数据报提交给网络层由网络层发送给主机B。
  3. 主机B的网络层收到报文后将传输层数据提交给传输层之后传输层根据报文信息查找对应的socket最简单的查找是根据报文的目地地址和端口号进行查找然后就通过找到的socket将数据体积高给了进程B。

具有相同的目的IP和目的端口那么它们就将通过相同的socket被提交给相同的进程。

3 UDP的数据报格式

UDP数据报格式

  • 端口号用于标识发送进程和接收进程。
  • UDP长度字段指的是UDP首部和UDP数据的字节长度。
  • UDP检验和覆盖UDP首部和UDP数据。

UDP校验过程

UDP设置伪首部用来完成校验过程

  • 首先UDP数据报的长度可以为奇数字节但是检验和算法是把若干个16bit字相加。解决方法是必要时在最后增加填充字节0这只是为了检验和的计算可能增加的填充字节不被传送
  • 其次UDP数据报包含一个12字节长的伪首部它是为了计算检验和而设置的。伪首部包含IP首部一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地。UDP数据报中的伪首部格式如图所示
  • UDP检验和是一个端到端的检验和。它由发送端计算然后由接收端验证。其目的是为了发现UDP首部和数据在发送端到接收端之间发生的任何改动。这就是UDP所提供的差错检测服务也是UDP提供的两个服务之一。