zoukankan      html  css  js  c++  java
  • 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应答时只保留最近传送目的端的数据报。
  • 相关阅读:
    RHEL7基本命令
    RHEL7VIM编辑器
    hello world
    配置mysql允许远程连接
    c#利用HttpWebRequest获取网页源代码
    C++局部变量详解(笔试题)
    c语言文件常用的操作
    Cocos2dx v3.1 初识(一)
    创建钩子(Hook)
    Extjs4.2.0 Form 的使用
  • 原文地址:https://www.cnblogs.com/mofei004/p/9240468.html
Copyright © 2011-2022 走看看