第十章 用户数据报协议和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 ... 
随机推荐
- 第26章 	FMC—扩展外部SDRAM—零死角玩转STM32-F429系列
			第26章 FMC—扩展外部SDRAM 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ... 
- js日期转换Fri Oct 31 18:00:00 UTC+0800 2008转换为yyyy-mm-dd
			Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d ... 
- JavaEE 面试题总结
			一. JDBC 4 1. Java中访问数据库的步骤 4 2. Statement,PreparedStatement,CallableStatement的功能.特点. 4 3. 如何利用JDBC的A ... 
- EL 和 JSTL 的使用
			EL Express Language 表达式语言 就是把<% 这里可以写java语言 %> 这种jsp的写法简化变为${ }的方式 例如 action="${pageConte ... 
- 【赛时总结】 ◇赛时·III◇ AtCoder ABC-099
			◆赛时·III◆ ABC-099 ■唠叨■ 不要问我为什么先给ABC-100写了博客再写的ABC-099-- 莫名觉得这次比赛特别简单--虽然我并没有参加比赛,只是之后再补做的.QwQ ■试题& ... 
- 精读《setState 做了什么》
			1 引言 setState 是 React 框架最常用的命令,它是用来更新状态的,这也是 React 框架划时代的功能. 但是 setState 函数是 react 包导出的,他们又是如何与 reac ... 
- ethereum(以太坊)(十二)--应用(一)__集资(构造函数/映射)
			pragma solidity ^0.4.4; contract funder{ //0xca35b7d915458ef540ade6068dfe2f44e8fa733c //0x14723a09ac ... 
- php-安装与配置-未完待续2
			一,准备工作 在入门指引中,我们已经知道PHP的3个应用领域,不同的场景,需要安装的东西是不同的.具体如下: 服务器端脚本,在通常情况下,需要三样东西:PHP 自身.一个 web 服务器和一个 web ... 
- 编辑工具_vi
			vi/vim平时经常会用到,但是一直没有时间系统的整理下,今天看到了一篇不错的介绍文章.引用下,就当做笔记了,但是不晓得该怎么填引用路径,如有侵权请告知,补上引用路径 01. vi 简介 1.1 学习 ... 
- Open source cryptocurrency exchange
			Peatio: https://github.com/peatio/peatio ViaBTC: https://github.com/viabtc/viabtc_exchange_server 
