UDP:用户数据报

11.1 引言

  • 简单的面向数据报的运输层协议:进程的每个输出操作产生一个UDP数据报,并组装成一份待发送的IP数据报;
  • 不提供可靠性,不保证能达到目的地;
  • IP数据报分片;

11.2UDP首部

  • TCP与UDP的端口号是相互独立的。
  • UDP长度指的是UDP首部和UDP数据的直接长度,最小为8字节,即数据量为0;
  • UDP数据报长度是全长减去IP首部的长度

11.3UDP校验和

  • 检验范围包括首部和数据
  • 检验和是可选的
  • 根据16bit校验和算法,由于校验数据个数可能为奇数个,因此计算是可能会增加一个填充字节;但此字节可能不会被传送
  • UDP和TCP数据报都包含一个12字节的伪首部

11.5IP分片

  • 发送IP报文前,会先查询对应接口的MTU。大于MTU将分片
  • 每次分片后,在下一站就进行组装,整个传输过程中,可能会多次分片
  • 标志字段有一个比特称为“部分片“位。如果置1,IP将不会分片。反而会丢弃,并发送一个ICMP差错报文
  • 分片的IP数据报到达时,可能是失序的
  • IP协议没有超时重传,由更高级协议实现
  • 如果传输过程中丢失一包IP报文,整个报文都将重传,因为起始端无法知道数据报是如何分片的
  • 分片时,拆分的范围是UDP首部和UDP数据报,即UDP首部只在第一个分组中出现

11.6ICMP不可达差错(需要分片)

  • 当路由器收到一份需要分片的数据报,而IP首部又设置了不分片(DF)的标识比特,此时将产生ICMP不可达差错报文(需要分片)
  • 此差错报文可以用来判断到达目的端路途中最小MTU是多少,即路径MTU发现机制

11.7用Traceroute确定路径MTU

  • 基本原理:发送已知长度的IP报文,通过检查收到的ICMP“不能分片”差错来判断整个路径中的最小MTU;当收到差错时,减小分组长度,知道到达目的端口。

11.9UDP和ARP之间的交互作用

  首先,清除arp缓存。arp -a

  • 当发送一个会被分为6组的IP数据报时,每个IP数据报片都会发送一个ARP请求
  • 在收到ARP请求的回复后,只发送最后一个数据报片,大多数实现都是这样的

  其次,超时后,并未收到ICMP差错报文,原因有:

  • Berkeley派生的实现从不产生该差错,只是在定时器溢出是将该报文片丢弃
  • 并未收到包含UDP首部的偏移量为0的第一 个数据报片,则不要求产生ICMP差错,原因是没有运输层首部,无法去人哪个进程发送的数据报

11.10最大UDP数据报长度

  • UDP编程接口允许应用程序制定每次返回的最大字节数。
  • TCP已应用程序读操作时所允许的长度来发送数据,因此,不会发生数据丢失

11.11ICMP源站抑制差错

  当一个系统接收数据报的速度比起处理速度比其处理速度快时,可能产生这个差错。

  协议提出路由器不应该产生源站抑制差错报文。因其会消耗网络带宽,对于拥塞来说是一种无效而不公平的调整。

  • BSD实现通常忽略接收到的源站抑制报文,因为当收到此报文时,可能造成此报文的进程已经终止了

UDP协议如果希望知道接收端是否收到数据,可在应用程序中建立一些应答机制。

11.12UDP服务器的设计

  • 客户IP地址及端口号:应用收到UDP数据报是,操作系统必须告诉它是谁发送了这份消息,即源IP地址和端口号。
  • 目的IP地址:一些应用需要知道数据报是发送给谁的。即目的源IP。
  • UDP输入队列:UDP接收队列有可能能溢出,溢出直接丢弃,没有其他类似源站抑制处理。此队列是FIFO的。
  • 限制本地IP地址:大多数UDP服务器在创建UDP端点时都使其本地IP具有通配符的特点。即如果UDP数据报目的地为服务端口,那么本地任何接口均可接收它。
  • 限制远端IP地址:允许UDP端点对远端地址进行限制。
  • 每个端口有多个接收者:多个端点可使用同一个IP地址和端口号。如果目的IP地址和端口号处有多个端点时,就行每个端点传送一根数据报复制。

小结:

  • UDP想用户进程提供的服务位于IP成之上,包括端口号和可选的校验和。
  • ICMP不可达差错,它是新路径MTU发现功能的一部分。
  • ICMP源站抑制差错报文,处理速度慢于接收速度。 
  • 等待ARP应答时只保留最近传送目的端的数据报。

猜你喜欢

转载自www.cnblogs.com/mofei004/p/9240468.html