用户数据报协议和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. ubuntu 报错E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unav E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process us

    1.配置xshell,查看虚拟机中ubuntu中网络ip ifconfig 报错 Command 'ifconfig' not found, but can be installed with: su ...

  2. 开发者不容错过的10款免费JavaScript游戏引擎

    摘要:使用HTML5.JavaScript可以帮助开发者开发出各种与众不同的游戏及游戏特效,比如3D动画.Canvas等.本文介绍10款被广泛使用的基于HTML5的JavaScript游戏引擎. 在G ...

  3. HttpWebRequest类之基本定义

    HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程 ...

  4. js最佳实践

    JavaScript使用windows对象的open()方法来创建新的浏览器窗口,这个方法有三个参数:windows.open(url,name,features) 参数一:url:是想在新窗口里打开 ...

  5. scrollHeight, scrollTop, clientHeight

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. HTML第一章:初始HTML

    设置ws字体大小:左上角file-->Settings--->在搜索框中输入font 网页的第一行一定是<!DOCTYPE html>:网页声明,代表这个页面是h5页面html ...

  7. 破解weblogic(数据库)密码

    破解weblogic(数据库)密码所需步骤 注意:本例子本人以本地weblogic为列,必须已经安装weblogic 1.需要问题件 1>.数据源配置文件HKS***-****-jdbc.xml ...

  8. 3.4.2 Undefined类型【JavaScript高级程序设计第三版】

    Undefined 类型只有一个值,即特殊的 undefined.在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined,例如: var message; alert(me ...

  9. python学习之数据类型与运算符号

    python版本:3.6 python编辑器:pycharm 最新版本 整理成代码如下: #!/usr/bin/env python #-*- coding: utf-8 -*- # 数学操作符 pr ...

  10. P1414 又是毕业季II (数学?

    题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌.1000多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定 ...