004::每天五分钟入门TCP/IP协议栈::IP协议之16位总长度字段引出的MTU值问题

要理解MTU以及实际生产环境中的MTU问题,就得搞清楚三个问题:
IP数据报包含什么内容;
数据进入协议栈的封装过程;
MTU具体代表含义;

首先要理解一个过程:
数据进入协议栈的封装过程!

数据从发送主机发送出去之前,在主机的协议栈中会经历上述图中的几个封装过程。
本次以TCP数据的封装过程为例,用户数据往下封装。
当数据封装了TCP首部后,数据在协议栈中就被称为TCP段;
当TCP段数据封装了IP首部之后的数据,称为IP数据报。
也就是说:IP数据报由几部分组成:IP首部+TCP首部+用户数据

其次要理解一个重要词:
IP数据报!
从上述封装过程可以看出,IP数据报是由几部分组成的。
从IP首部角度看,IP首部字段中的16位总长度字段,表示的就是:IP数据报的大小,并非整个数据包的大小,IP数据报需要再封装了以太网首部和尾部才能称为一个完整的数据包。

最后要理解一个重要的词:
MTU!
MTU即为:最大传输单元,是链路层的一个概念
路径MTU即为两台主机之间传输数据的路径的最大MTU。
从总长度字段为16位,可以得出理论的最大字段长度为:2的16次方=65535字节,这个值即为所谓的超通道。
但是因为MTU的存在,IP数据报是不可能无限大的。主机之间发送数据的最大MTU取决于路径中的最大MTU中的最小MTU值。
从总长度字段中的值减去IP首部长度值,即为用户数据的长度和IP数据报中数据内容的起始位置。
当IP数据报被分片之后,该总长度字段对应的值会发生变化。

现在的协议栈中使用的基本都是以太网协议,
在以太网中,不包含以太网帧头部和尾部的MTU的最大值是1500字节,最小是46字节。
这就是说:
**标准的以太网帧长度的下限是:64字节(包含了IP首部/帧头部/帧尾部)
标准的以太网帧长度的上限是:1518字节(包含了IP首部/帧头部/帧尾部)

这最小最大值,是由于最初的以太网协议,使用的是CSMA/CD即为载波监听多路访问冲突检测协议等因素,在一个时间内只能由一台主机的数据在以太网中传输,当在以太网中传输的帧太大或太小,都会导致最初的以太网传输效率不是最高的。
当帧太小,传输是有延迟,帧太小,传输很快就完成了,当传输过程中发生了冲突,但是发送者却认为数据已经成功发送,这种情况是没办法接受的。所以,帧不能太小。

当帧太大,机会导致有主机占用传输线路时间较长,那些对于延迟敏感的应用是没办法接受的。
所以有了帧的上限和下限。

>当数据超过了MTU限定的长度,此时就会进行分片。
>分片发生在网络层,对IP数据报进行分片。
>与分片相关字段,后续会讲解。
>主机之间的路径MTU基本都不是固定的,因为出去互联网后,会有多种的负载均衡策略,数据走的路径,经过的设备会经常变化,导致了路径MTU是不一样的。
>还有一个巨型帧的问题,基本上巨型帧只会存在于IDC内部。巨型帧基本上都是讲大于9000字节的数据,例如NFS文件系统,将系统需要用到的接口如交换机端口/网卡接口等的MTU值设置大一些,这样可以传输的数据帧可以更大,可以提高文件系统传输文件的效率。正常情况下不需要修改接口的MTU值。

原文地址:http://blog.51cto.com/mangguostudy/2109349

时间: 2024-10-13 16:03:32

004::每天五分钟入门TCP/IP协议栈::IP协议之16位总长度字段引出的MTU值问题的相关文章

003::每天五分钟入门TCP/IP协议栈::IP协议之TOS字段说明

从IP首部看ToS的位置:ToS即为服务类型,只有当网络设备能够支持(能够识别IP首部中的ToS字段)识别ToS字段时,这给字段设置才有意义.否则都是空谈. 先说具体字段的意义:Tos字段长度为8bit前3bit字段:为优选权子字段,现在已经废弃,这个字段默认值是000,从wireshark抓包结果看,表示的是: 大部分IP首部中的ToS字段的8bit字段中,前三个子字段默认值是000,默认填充为000.但是在一些特定的场景,例如OSPF协议中网络设备之间交互OSPF相关数据,该字段是有用的:

Angular2的五分钟入门在Windows下的实现

Angular2的五分钟入门在Windows下的实现 官网提供的是在linux的步骤,而实际直接拿这些步骤在windows下也可以实现,但唯一就是无法 --watch TypeScript文件,那就是扯蛋,改一下代码就要重新编译,谁受得了. 那么我来尝试一下直接使用Gulp来搭建. 一.创建项目 虽然Angular2允许我们使用TypeScript.Dart.ES5.ES6来写代码,但是出于Angular2也拥抱TypeScript,那么变成我们唯一最好的选择也是TypeScript. 首先创建

angularjs2.0 五分钟入门教程之typescript版本

貌似没看到一个中文的讲解ng2入门五分钟教程,所以亲自整理了下整个入门教程的步骤,希望对后来者学习有所帮助.PS:我在win7中码的. 新建一个project目录,以下所有操作都在这个目录下进行. 1.安装tsd编译typescript代码命令工具 $ npm install -g [email protected]^0.6.0 2.安装angular2,es6-promiserx,rx,rx-lite $ tsd install angular2 es6-promise rx rx-lite

TCP/IP协议栈--IP首部选项字段的分析

IP输入函数(ipintr)将在验证分组格式(检验和,长度等)之后.确定分组是否到达目的地之前,对选项进行处理. 这表明分组所 遇到的每一个路由器以及终于的目的主机都对要分组的选项进行处理. IP分组内能够包括某些在分组被转发或被接收之前处理的可选字段.IP实现能够用随意顺序处理选项.标准IP首部之后最多可跟 40字节的选项. 1.选项格式 IP选项字段可能包括0个或多个单独选项.选项有两种类型,单字节和多字节.如图所看到的: 全部选项都以1字节类型type字段開始. 在多字节选项中,类型字段后

TCP/IP协议栈--IP选项处理

IP输入函数(ipintr)将在验证分组格式(检验和,长度等)之后,确定分组是否到达目的地之前,对选项进行处理.这表明分组所 遇到的每个路由器以及最终的目的主机都对要分组的选项进行处理. IP分组内可以包含某些在分组被转发或被接收之前处理的可选字段.IP实现可以用任意顺序处理选项.标准IP首部之后最多可跟 40字节的选项. 1.选项格式 IP选项字段可能包含0个或多个单独选项.选项有两种类型,单字节和多字节.如图所示: 所有选项都以1字节类型type字段开始.在多字节选项中,类型字段后面紧接着一

逐步深入TCP/IP协议栈

一.关于应用层用户数据的历程,见下图: TCP/IP数据包的封装 过程:应用层将数据通过协议栈逐层向下传递,其下的每层接到来自上层的数据时,根据每层的协议都要在其数据 的前端添加首部信息进行封装.不同的协议层对数据包有不同的称谓,在传输层叫做数据段,在网络层叫做数据报, 在链路层叫做数据帧.在经过链路层时,数据已经封装成帧并递交给物理层的传输介质上,到达目标主机后,同理每 层协议在逐层剥掉其首部,最后递交给目标主机应用层的数据与源主机发送的数据一致. 注:对于有效数据称之为"有效载荷"

浅谈TCP IP协议栈(四)IP协议解析

通过之前的网络层基础知识,IP地址以及路由器的简介,大家应该对于TCP/IP有一个大致的了解,在脑海里应该对于网络的几个基础概念有个大概的了解,简单点说整个协议栈就是在做一件事,规定网络报文(网络传输中的数据报)的发送和接收,而整个协议栈内的协议,也是可以分为之前介绍过的链路层->网络层->传输层->应用层,在这每一层中都有很多不同的协议,但是最常用的协议,每一层就是一到两种,所以想学协议,先从每一层最常见,最常用的开始学起: 链路层--以太网.VLAN 网络层--IP协议 传输层--T

【转】TCP/IP协议栈及OSI参考模型详解

OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设备间的兼容性和标准接口: 促进标准化工作: 结构上可以分隔: 易于实现和维护. 20世纪60年代以来,计算机网络得到了飞速增长.各大厂商为了在数据通信网络领域占据主导地    位,纷纷推出了各自的网络架构体系和标准,如IBM公司的SNA,Novell IPX/SPX协议,Apple公司的AppleT

TCP/IP协议栈及OSI参考模型详解

OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设备间的兼容性和标准接口: 促进标准化工作: 结构上可以分隔: 易于实现和维护. 20世纪60年代以来,计算机网络得到了飞速增长.各大厂商为了在数据通信网络领域占据主导地    位,纷纷推出了各自的网络架构体系和标准,如IBM公司的SNA,Novell IPX/SPX协议,Apple公司的AppleT