1、UDP首部



2、UDP分片



在第二章,讲链路层是,提到过以太网。刨除数据帧帧头。最多传输的长度为1500。也就是说,假设一个ip数据报,长度大于1500,则须要分片。
分片方法:
  1. 在ip头中3位标志,13位片偏移,这俩东西就是用来分片的。
  2. 3位标志中:一个很多其他的片标识。除了最后一个分片,其他分片都要有这个标识,另一个不分片标识,假设置上。则即便IP数据报再长。也不分片。可是会将该IP数据报丢弃,并发送一个ICMP差错报文给发送端。
  3. 13位片偏移:用于表示相对于起始的偏移量,就是个offset。
  4. 每一个分片都有一个独立的IP头,20个字节。

  5. IP的分片和组装都是在IP层完毕的,其对UDP/TCP网络层是透明的。
  6. 假设在传输过程中,某个分片丢失,则须要重传整个IP数据报。不能单独传递某个分片,这主要是,假设是中间某个路由器做的分片,起始端也不知道怎样分片的,所以仅仅能重传整个IP数据报。

  7. 至于重不重传。

    则仅仅能有网络层来决定。TCP会丢包重传,可是UDP则不会,IP层是没有丢包重传机制的。

  8. 传输单元,IP层叫IP数据报,链路层叫分组

IP报分片例如以下图所看到的,注意,仅仅有第一个分片有UDP头,可是每一个分片都有IP首部。


3、ICMP不可达差错(须要分片)



假设在IP首部设置了不可分片标志。可是达到MTU上限,必须分片。则会丢弃该IP报,返回ICMP不可达差错。

U D P长度字段指的是U D P首部和U D P数据的字节长度。该字段的最小值为8字节(发送一

份0字节的U D P数据报是O K)。

这个U D P长度是有冗余的。

I P数据报长度指的是数据报全长

(图3 - 1),因此U D P数据报长度是全长减去I P首部的长度

Host Requirements RFC声明,U D P检验和选项在默认条件下是打开的。

它还声明,

假设发送端已经计算了检验和,那么接收端必须检验接收到的检验和(如接收到检验

和不为0)。可是。很多系统没有遵守这一点,仅仅是在出口检验和选项被打开时才验证

接收到的检验和。



IP分片
     物理网络层一般要限制每次发送数据帧的最大长度。不论什么时候I P层接收到一份要发送的I P数据报时,它要推断向本地哪个接口发送数据(选路),并查询该接口获得其M T U。I P把M T U与数据报长度进行比較。假设须要则进行分片。分片能够发生在原始发送端主机上。也能够发生在中间路由器上。把一份I
P数据报分片以后,仅仅有到达目的地才进行又一次组装(这里的又一次组装与其它网
络协议不同。它们要求在下一站就进行进行又一次组装。而不是在终于的目的地)。又一次组装由

目的端的I P层来完毕。其目的是使分片和又一次组装过程对运输层(T C P和U D P)是透明的,

除了某些可能的越级操作外。已经分片过的数据报有可能会再次进行分片(可能不止一次)。

I P首部中包括的数据为分片和又一次组装提供了足够的信息。

对于发送端发送的每份I P数据报来说,

其标识字段都包括一个唯一值。该值在数据报分片时被拷贝到每一个片中(我们如今已经看到

这个字段的用途)。标志字段用当中一个比特来表示“很多其它的片”。

除了最后一片外。其它每

个组成数据报的片都要把该比特置1。

片偏移字段指的是该片偏移原始数据报開始处的位置。

另外,当数据报被分片后。每一个片的总长度值要改为该片的长度值。

最后,标志字段中有一个比特称作“不分片”位。

假设将这一比特置1,I P将不正确数据报

进行分片。相反把数据报丢弃并发送一个I C M P差错报文(“须要进行分片但设置了不分片比

特”,见图6 - 3)给起始端。

在下一节我们将看到出现这个差错的样例。

当I P数据报被分片后,每一片都成为一个分组,具有自己的I P首部。并在选择路由时与

其它分组独立。这样,当数据报的这些片到达目的端时有可能会失序。可是在I P首部中有足

够的信息让接收端能正确组装这些数据报片。

虽然I P分片过程看起来是透明的,但有一点让人不想使用它:即使仅仅丢失一片数据也要重

传整个数据报。

为什么会发生这样的情况呢?由于I P层本身没有超时重传的机制——由更高层来

负责超时和重传(T C P有超时和重传机制,但U D P没有。

一些U D P应用程序本身也运行超时和

重传)。当来自T C P报文段的某一片丢失后,T C P在超时后会重发整个T C P报文段,该报文段对

应于一份I P数据报。没有办法仅仅重传数据报中的一个数据报片。其实。假设对数据报分片的

是中间路由器。而不是起始端系统,那么起始端系统就无法知道数据报是怎样被分片的。就这

个原因,常常要避免分片。





前两份U D P数据报(第1行和第2行)能装入以太网数据帧,没有被分片。可是相应于写

1 4 7 3字节的I P数据报长度为1 5 0 1,就必须进行分片(第3行和第4行)。同理。写1 4 7 4字节产生

的数据报长度为1 5 0 2,它也须要进行分片(第5行和第6行)。

当I P数据报被分片后,t c p d u m p打印出其它的信息。首先,frag 26304(第3行和第4

行)和frag 26313(第5行和第6行)指的是I P首部中标识字段的值。

分片信息中的下一个数字。即第3行中位于冒号和@号之间的1 4 8 0,是除I P首部外的片长。

两份数据报第一片的长度均为1 4 8 0:U D P首部占8字节。用户数据占1 4 7 2字节(加上I P首部的

2 0字节分组长度正好为1 5 0 0字节)。第1份数据报的第2片(第4行)仅仅包括1字节数据—剩下

的用户数据。第2份数据报的第2片(第6行)包括剩下的2字节用户数据。

在分片时,除最后一片外,其它每一片中的数据部分(除I P首部外的其余部分)必须是8

字节的整数倍。在本例中,1 4 8 0是8的整数倍。

位于@符号后的数字是从数据报開始处计算的片偏移值。两份数据报第1片的偏移值均为0(第3行

和第5行),第2片的偏移值为1 4 8 0(第4行和第6行)。跟在偏移值后面的加号相应于I P首部中3 bit标志

字段中的“很多其它片”比特。

设置这一比特的目的是让接收端知道在什么时候完毕全部的分片组装。

最后。注意第4行和第6行(不是第1片)省略了协议名(U D P)、源port号和目的port号。

协议名是能够打印出来的。由于它在I P首部并被拷贝到各个片中。

可是,port号在U D P首部,

仅仅能在第1片中被发现。



发送的第3份数据报(用户数据为1 4 7 3字节)分片情况如图11 - 8所看到的。

须要重申的是。任

何运输层首部仅仅出如今第1片数据中。



另外须要解释几个术语:I P数据报是指I P层端到端的传输单元(在分片之前和又一次组装

之后)。分组是指在I P层和链路层之间传送的数据单元。

一个分组能够是一个完整的I P数据报。

也能够是I P数据报的一个分片。



理论上,I P数据报的最大长度是6 5 5 3 5字节。这是由I P首部(图3 - 1)1 6比特总长度字段所

限制的。

去除2 0字节的I P首部和8个字节的U D P首部。U D P数据报中用户数据的最长长度为

6 5 5 0 7字节。可是,大多数实现所提供的长度比这个最大值小。

TCP/IP具体解释--UDP数据报中的IP分片的更多相关文章

  1. TCP 流模式与UDP数据报模式(转)

    TCP流模式与UDP数据报模式http://blog.csdn.net/s3olo/article/details/7914717 数据报(datagram)通常是指起始点和目的地都使用无连接网络服务 ...

  2. MAC帧格式、IPV4数据报格式、TCP报文格式、UDP数据报格式

    1.MAC帧格式 类型:2字节,指出数据域中携带的数据应交给哪些协议实体处理 校验码:校验数据段(采用32位CRC冗余校验方式进行校验) 2.IPV4数据报 版本:IP协议版本,这里为4 首部长度:占 ...

  3. IP数据报中如果不分片,分片标志值是什么?

    过了好久才解决这个简单的问题,罪过罪过- 答案:如果IP数据报不分片,分片标志DF(Don't Fragment)会被设置为1.分片标志MF(More Fragment)设置为0. 下面是详细解释: ...

  4. 《TCP/IP具体解释卷2:实现》笔记--UDP:用户数据报协议

    用户数据报协议.即UDP,是一个面向数据报的简单运输层协议:进程的每次输出操作仅仅产生一个UDP数据报,从而发送 一个IP数据报. 进程通过创建一个Internet域内的SOCK_DGRAM类型的插口 ...

  5. TCP/UDP通信中server和client是如何知道对方IP地址的

    在TCP通信中 client是主动连接的一方,client对server的IP的地址提前已知的.如果是未知则是没办法通信的. server是在accpet返回的时候知道的,因为数据包中包含客户端的IP ...

  6. LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址

    在接受到UDP包后,有时候我们需要根据所接收到得UDP包,获取它的路由目的IP地址和头标识目的地址. (一)主要的步骤: 在setsockopt中设置IP_PKTINFO,然后通过recvmsg来获取 ...

  7. 《TCP/IP具体解释卷2:实现》笔记--IP的分片和重装

    IP首部内有三个字段实现分片和重装:标识字段(ip_id).标志字段(ip_off的3个高位比特)和偏移字段(ip_off的13个低位 比特).标志字段由3个1bit标志组成.比特0是保留的必须为0, ...

  8. (转) 在linux网络UDP通信中,关于客户端是否绑定的理解

    最近在做一个实例,是用RTSP协议完成.服务器已经有了,只需要把客户端做好就行了,在做的过程中发现了一些问题,就是关于UDP客户端是否绑定的问题. 也许大家在书上看到的大多都是说UDP客户端不需要绑定 ...

  9. TCP/IP具体解释--TCP/UDP优化设置总结& MTU的相关介绍

    首先要看TCP/IP协议,涉及到四层:链路层,网络层.传输层,应用层. 当中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应 ...

随机推荐

  1. 基于.net的通用内存缓存模型组件

    谈到缓存,我们自然而然就会想到缓存的好处,比如: 降低高并发数据读取的系统压力:静态数据访问.动态数据访问 存储预处理数据,提升系统响应速度和TPS 降低高并发数据写入的系统压力 提升系统可用性,后台 ...

  2. ML神器:sklearn的快速使用

    传统的机器学习任务从开始到建模的一般流程是:获取数据 -> 数据预处理 -> 训练建模 -> 模型评估 -> 预测,分类.本文我们将依据传统机器学习的流程,看看在每一步流程中都 ...

  3. 【转】使用PowerDesigner的建模创建升级管理数据库

    使用PowerDesigner的建模创建升级管理数据库 PowerDesigner是一种著名的CASE建摸工具,最开始为数据库建模设计,即物理模型(Physical Data Model)用于生成数据 ...

  4. APP后台API文档管理对接(APP后台框架五)

    这一章还是总结点API管理工具,也大都是组件来的,关于spring-rest-doc 以为很不错,其实还是有点局限性的: 1,每一个接口文档,都要自己手动设置文档的展示: 2,每一个接口就独立一个文档 ...

  5. Maven 整合 SSH 框架

    前面的一系列文章中,我们总结了三大框架:Struts2,Hibernate,Spring 的基本知识.本篇就姑且尝试着使用 Maven 这个项目构建工具来将这三个框架整合一起.说到这里,如果有对 Ma ...

  6. React+Redux实现追书神器网页版

    引言 由于现在做的react-native项目没有使用到redux等框架,写了一段时间想深入学习react,有个想法想做个demo练手下,那时候其实还没想好要做哪一个类型的,也看了些动漫的,小说阅读, ...

  7. 企业级应用TOMCAT

    第1章 Tomcat 1.1 Tomcat简介 Tomcat是一个免开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不多的场合下被普遍使用,是开发调试JSP程序的首选,另 ...

  8. Winform远程更新代码

    本软件具备以下形: 1.通过http形式在客户端更新winform代码文件 2.在服务端通过软件生成xml配置文件,客户端通过比对xml配置文件来更新代码文件. 服务端: 在服务器上建立一个IIS发布 ...

  9. 自己动手编写IOC框架(三)

    刚写博客浏览量第一天就有1000多人次,给了我很大的鼓舞决定熬夜再写一篇.对于前两篇来说无非就是使用dtd验证xml,然后解析xml,和IOC的核心还是差的很远,相信很多小伙伴们都感觉看得不过瘾了,这 ...

  10. mysql 系统性浅聊 myisam 存储引擎【原创】

    >>思维导图 >>介绍 mysql中的存储引擎都是以插件的形式存在,目前用的最多存储引擎就是innodb和myisam.MySQL5.5.5以后(包括5.5.5)默认使用Inn ...