用户数据报协议和IP分片

UDP是一种保留消息边界的简单的面向数据报的传输层协议。它仅提供差错检测。只是检测,而不是纠正,它只是把应用程序传给IP层的数据发送出去,但是并不会保证数据能够完好无损的到达目的地。

下图是UDP数据报的封装。


UDP头部

端口号就如同邮箱一样,用来辨别发送和接受进程。端口号长16比特。

UDP头部如图所示:

  • 源端口号(可选),如果发送方并不要求回复,则置0
  • 目的端口号,帮助分离IP层进入的数据
  • 长度,UDP数据报的长度(包过头部和数据)
  • 校验和

IP层根据协议头部可以将IP数据报分离到特定的传输协议。正因为如此,不同传输协议是独立的,即可以使用相同的端口号而不会引起冲突。

校验和字段是端到端的,是对包含了IP头部中的源和目的IP地址字段的UDP伪头部计算得到的,伪头部的目的是用于校验和的计算,他不会被发送出去。

UDP伪头部和头部的格式如图:

伪头部包含了IP头部的源和目的地址,以及协议或下一个头部字段。目的是让UDP层验证数据是不是到达真正的目的地,由于有了这样的结构,当该数据报经过一个NAT时候,不仅仅IP层头部的校验和要被修改,并且UDP伪头部的校验和也要被修改。


UDP-Lite

背景:有些应用程序可以容忍在发送和接收的数据里引入的比的差错。

为了避免建议连接的开销,或者为了使用广播或组播地址,这类程序会选择使用UDP。而UDP-Lit提供了部分校验和来解决这个问题。

其头部如下表示:

校验和覆盖范围字段表示被校验和覆盖的字节数。值为0表示整个数据包都被覆盖。由于整个头部总是要被覆盖的,所以值位1~7是无效的!


IP分片

为了保持IP数据报抽象与链路层细节的一致和分离,IP引入了分片和重组。

  • IPv4的分片可以在发送主机和端到端路径上的路由器进行
  • IPv6只允许源主机进行分片

重组只能发生在IP数据报到达最终目的地的时候。原因很显然,不同分片可能会经过不同的路径到达目的地,在路径上的路由器只能看到分片的一个子集,显然无法重组。


分片由IPV4头部中的标识,分片偏移,和更多分片字段控制。

  • 标识,由原始发送方设置,在目的地依据标识区分组
  • 分片偏移,表示分片中数据的第一个字节在原数据报的偏移量(8个字节为单位
  • 更多分片(MF),0表示最后一个分片,否则为1。

偏移的具体内容如下图所示:

第二个数据报偏移为185*8=1480=第一个分片负载,即在第一个分片零偏移的基础上偏移了185个单位。

当TCP报文段的一个分片丢失了,TCP会重传整个报文段,而重传一个分片是不可能的,因为在路径路由器可以分片数据报,源主机是不清楚数据报如何被分片的。

  • 具有更大偏移量的分片要比第一个分片更优先投递,这样有利于接收主机确定所需的缓存空间最大值
  • 收到任何一个分片,IP层就启动计时器,超时即丢弃数据报。
  • UDP数据报长度有限,满额数据报并不能很好的被投递
    • 本地协议实现的限制
    • 接受应用程序并没有做好准备接收处理这么大的数据报

第十章 用户数据报协议和IP分片的更多相关文章

  1. TCP/IP 笔记 - 用户数据报协议和IP分片

    关于本章中的IP分片部分,参考第五章IP分片头部知识点.需要注意的是,TCP有超时重传,UDP的超时重传则依赖上层应用程序实现. 用户数据报协议(UDP) UDP是一个简单的面向无连接.不可靠的数据报 ...

  2. UDP用户数据报协议和IP分组

    UDP总体的封装格式例如以下: 以下是8字节UDP首部: 当IP层依据协议字段把UDP报文向上传送到UDP模块后,UDP模块再依据port号将数据发送到对应的进程中,以此实现进程到进程间的通信. 16 ...

  3. 第11章 UDP:用户数据报协-----读书笔记

    1.分片应用程序只关心IP数据报的长度,如果它超过MTU值,那么就要对数据包进行分片. 2.UDP首部字段图: (16位源端口号+16位目端口号+16位UDP长度+16位UDP校验和+数据) 3.UD ...

  4. TCP/IP 协议难点之一—— IP分片

    1 IP协议简单介绍 就个人而言,网络中,抛开网络安全加密这些,就只单单讨论协议本身,比较难的有三个地方: IP分片与重组 TCP滑动窗口与TCP状态的改变 TCP定时器 其实协议本身根据<TC ...

  5. tcp/ip分片

    from http://blog.csdn.net/cumirror/article/details/5071234 前段时间要做一个关于网络嗅探的程序,里面要重组IP分片,TCP分片. 但做的时候忽 ...

  6. TCP/IP具体解释--UDP数据报中的IP分片

    1.UDP首部 2.UDP分片 在第二章,讲链路层是,提到过以太网.刨除数据帧帧头.最多传输的长度为1500.也就是说,假设一个ip数据报,长度大于1500,则须要分片. 分片方法: 在ip头中3位标 ...

  7. IP分片

    物理网络层一般要限制每次发送数据帧的最大长度.任何时候IP层接受到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU(最大传输单元:Maximum Transm ...

  8. UDP与IP分片

    一.引言  UDP是简单的面向数据报的运输层协议.UDP不提供可靠性:它负责把应用程序传给IP层的数据发送出去,不保证能导到目的地. 二.UDP首部  端口号表示发送进程和接受进程.由于IP层已经 ...

  9. DPDK IP分片及重组库(学习笔记)

    1 前置知识学习 1.1 MTU MTU是最大传输单元( Maximum Transmission Unit)的缩写,指一个接口无需分片所能发送的数据包的最大字节数.  MTU范围在46 ~ 1500 ...

随机推荐

  1. 大白话讲解BP算法(转载)

    最近在看深度学习的东西,一开始看的吴恩达的UFLDL教程,有中文版就直接看了,后来发现有些地方总是不是很明确,又去看英文版,然后又找了些资料看,才发现,中文版的译者在翻译的时候会对省略的公式推导过程进 ...

  2. 设置禁止网络连接后,jdbc如何连接到数据库

    设置禁止网络连接,可在my.ini文件中添加如下两行 skip-networking enable-named-pipe 可以通过 SHOW VARIABLES LIKE '%skip_ne%' 来查 ...

  3. Java 单词 day seven

    Constructor Constructor Constructor Constructor Constructor Constructor Constructor Constructor Cons ...

  4. Excel文档数据转成Plist文件

    有时候我们需要导入大量数据到App中静态数据,但数据又是存在Excel中,怎么办? 第一,复制数据粘贴到一个.txt文本文档中 第二,就是撸代码了 比如,我需要导入的数据表有2列字段,name和bar ...

  5. jquery 操作css 尺寸

    .height() 获取元素集合中的第一个元素的当前计算高度值,或设置每一个匹配元素的高度值. .height() 获取匹配元素集合中的第一个元素的当前计算高度值. 这个方法不接受参数. $(wind ...

  6. LeetCode46. Permutations

    Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3] O ...

  7. 谈谈两种标准库类型---string和vector

    两种最重要的标准库---string和vector string和vector是两种最重要的标准库类型,string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列. 一.标准库 ...

  8. 关于Mysql唯一索引的操作方法(添加删除)

    首先我们查看一下News数据表的索引信息      使用命令 show index from ‘数据表名称’; 目前数据表中仅有一个主键索引 继续,我们给news表添加两个唯一索引(两种方法) 方法一 ...

  9. 使用union all 命令之后如何对hive表格进行去重

    业务场景大概是这样的,这里由两个hive表格,tableA 和 tableB, 格式内容都是这样的: uid cate1 cate2 在hive QL中,我们知道union有着自动去重的功能,但是那是 ...

  10. MAC下MySQL初始密码忘记修改初始密码

    解决MAC下MySQL忘记初始密码的方法分享给大家,供大家参考,具体内容如下 第一步: 点击系统偏好设置->最下边点MySQL,在弹出页面中,点击stop MySQL Servier,输入密码关 ...