第十章 用户数据报协议和IP分片
用户数据报协议和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分片的更多相关文章
- TCP/IP 笔记 - 用户数据报协议和IP分片
		
关于本章中的IP分片部分,参考第五章IP分片头部知识点.需要注意的是,TCP有超时重传,UDP的超时重传则依赖上层应用程序实现. 用户数据报协议(UDP) UDP是一个简单的面向无连接.不可靠的数据报 ...
 - UDP用户数据报协议和IP分组
		
UDP总体的封装格式例如以下: 以下是8字节UDP首部: 当IP层依据协议字段把UDP报文向上传送到UDP模块后,UDP模块再依据port号将数据发送到对应的进程中,以此实现进程到进程间的通信. 16 ...
 - 第11章   UDP:用户数据报协-----读书笔记
		
1.分片应用程序只关心IP数据报的长度,如果它超过MTU值,那么就要对数据包进行分片. 2.UDP首部字段图: (16位源端口号+16位目端口号+16位UDP长度+16位UDP校验和+数据) 3.UD ...
 - TCP/IP 协议难点之一—— IP分片
		
1 IP协议简单介绍 就个人而言,网络中,抛开网络安全加密这些,就只单单讨论协议本身,比较难的有三个地方: IP分片与重组 TCP滑动窗口与TCP状态的改变 TCP定时器 其实协议本身根据<TC ...
 - tcp/ip分片
		
from http://blog.csdn.net/cumirror/article/details/5071234 前段时间要做一个关于网络嗅探的程序,里面要重组IP分片,TCP分片. 但做的时候忽 ...
 - TCP/IP具体解释--UDP数据报中的IP分片
		
1.UDP首部 2.UDP分片 在第二章,讲链路层是,提到过以太网.刨除数据帧帧头.最多传输的长度为1500.也就是说,假设一个ip数据报,长度大于1500,则须要分片. 分片方法: 在ip头中3位标 ...
 - IP分片
		
物理网络层一般要限制每次发送数据帧的最大长度.任何时候IP层接受到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU(最大传输单元:Maximum Transm ...
 - UDP与IP分片
		
一.引言  UDP是简单的面向数据报的运输层协议.UDP不提供可靠性:它负责把应用程序传给IP层的数据发送出去,不保证能导到目的地. 二.UDP首部  端口号表示发送进程和接受进程.由于IP层已经 ...
 - DPDK IP分片及重组库(学习笔记)
		
1 前置知识学习 1.1 MTU MTU是最大传输单元( Maximum Transmission Unit)的缩写,指一个接口无需分片所能发送的数据包的最大字节数. MTU范围在46 ~ 1500 ...
 
随机推荐
- 实现接口Controller定义控制器
			
实现接口Controller定义控制器 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求并将其转换为一个模型.在Spring MVC中一个控制器可以包含 ...
 - javaweb基础(35)_jdbc处理oracl大数据
			
一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...
 - Java中的逻辑运算符短路效应
			
在Java中逻辑运算符&& 和 ||,它们都存在短路效应. 对于a && b,只有当a和b同时为true时,整个表达式才为true(在java中,首先运算表达式a,如果 ...
 - Unexpected token o in JSON at position 1
			
ajax返回的数据已经是object格式,无需再使用“var newjsonObj = JSON.parse(jsonObj)” 进行转换.
 - springboot整合activiti报错[processes/]不存在解决方案
			
springboot整合activiti时,启动抛异常 nested exception is java.io.FileNotFoundException: class path resource [ ...
 - MySQL(mariadb)主从复制模式与复制过滤
			
在前一篇文章<mysql多实例与复制应用>中只对mysql的复制做了简单的介绍,本篇内容专门介绍一下mysql的复制. MySQL复制 mysql复制是指将主数据库的DDL和DML操作通过 ...
 - mongodb多个查询语句
			
db.getCollection('costitems').find({"created":{"$gte":ISODate("2019-01-02T0 ...
 - React路由-进阶篇
			
路由进阶 1.多级路由,和之前的思想一样,在子路由里面继续写Route,继续挂载组件,就可以实现多级路由 比如这样:class Food extends Component{ render() { r ...
 - tcl之控制流-for
 - swoole中swoole_timer_tick回调函数使用对象方法
			
swoole_timer_tick的回调函数无法使用类似于array($this, 'method')来调用对象方法,所以我用一下方法变通了一下来调用 swoole_timer_tick(1000, ...