zoukankan      html  css  js  c++  java
  • UDP用户数据报协议和IP分组

    UDP总体的封装格式例如以下:


    以下是8字节UDP首部:


    当IP层依据协议字段把UDP报文向上传送到UDP模块后,UDP模块再依据port号将数据发送到对应的进程中,以此实现进程到进程间的通信。

    16位UDP长度代表UDP首部和UDP数据的总字节数。长度最小能够为8,即数据段不包括实际内容。

    下面是抓包结果:


    不同于TCP,UDP协议的接收方在接收数据后不会返回不论什么确认信号,发送方仅仅管发,至于有没有成功到达,一概无论。而且在開始发送之前也不会进行不论什么通信。

    当UDP报文的长度大于MTU时,IP层就须要进行分片了。下面介绍IP层分片。

    物理网络层一般要限制每次发送数据帧的最大长度,这个最大长度称为最大传输单元(MTU)。IP层在发送一个IP数据报之前须要询问下一跳接口的MTU大小,假设待发送的IP数据报大小大于MTU,则须要进行分片。所以,分片既能够发生在原始发送端主机上,也能够发生在中间路由器上。但数据报的重组仅仅在终于目的端进行。无论是分片还是重载,都是在IP层进行的,对上层来说这些操作是透明的。

    IP首部中的下列字段为数据的分片和重组提供了信息:
    • 16位标识。唯一地标识主机发送的每一份数据报,通常每发送一份报文它的值就加1。注意,一个数据报分片后的各个分组中,标识字段是同样的,即表示同一个IP数据报
    • 3位标志。指导重组的一些标记。比如:
      • 一个bit作为“很多其它的片”位,表示接下来还有很多其它兴许分组。
      • 一个bit作为“不分片”位,表示不正确数据报进行分片。
    • 13位片偏移。该片偏移原始数据报開始处的位置。
    IP数据报分片后成为一个个的分组,这些分组都拥有各自的IP首部,路由选择时也是相互独立的。它们到达目的端时有可能会发生失序,但利用各自的IP首部中的信息,全然可以又一次恢复成原始的IP数据报。这里须要注意,不论什么运输层首部仅仅出如今第一片数据中

    比如要发送1473字节的用户数据,那么总的IP数据报长度 = 20字节IP首部 + 8字节UDP首部 + 1473字节用户数据 = 1501字节,超过了以太网规定的1500字节的MTU,所以须要进行分片,例如以下图所看到的:


    注意上图,分组1中包括了UDP首部信息,而兴许分组并不包括UDP首部。

    參考:
    《TCP/IP具体解释》第11章。
  • 相关阅读:
    Ant
    责任链模式
    日志logback
    知识点
    三个实例演示 Java Thread Dump 日志分析
    IDEA运行编译后配置文件无法找到,或配置文件修改后无效的问题
    IDEA创建MAVEN WEB工程
    多线程源码分析ThreadPoolExecutor
    解决
    微博关系服务与Redis的故事
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4020909.html
Copyright © 2011-2022 走看看