TCP路径MTU发现

路径MTU

当在同一个网络上的两台主机互相通信时,该网络的MTU是非常重要的。当时如果两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的MTU。重要的不是两台主机所在网络的MTU,而是两台通信主机路径中的最小MTU,称为路径MTU;

两台主机之间的路径MTU不一定是个常数,它取决于当时所选的路由,而选路不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此路径MTU在两个方向上不一定是一致的;

路径MTU发现

路径MTU发现通过在IP首部中设置”不要分片(DF)”标志,来发现当前路径上的路由器是否需要对正在发送的IP数据报进行分片。当设置了DF标志位,而其长度又超过了MTU,那么路由器将返回一个ICMP差错;

TCP路径MTU发现按照以下方式进行:在连接建立时,TCP使用输出接口或者对端声明的MSS中的最小值MTU作为起始的报文段大小。路径MTU发现不允许TCP超过对端声明的MSS。如果对端没有指定MSS,则默认536;

一旦选定了起始报文段的大小,在该连接上的所有被TCP发送的IP数据报都将被设置DF标志。如果某个中间路由器需要对一个设置了DF标志的数据报进行分片,它就丢弃这个数据报,并产生一个CIMP”不能分片”差错;

如果收到这个ICMP差错,TCP就减少段大小并进行重传。如果路由器产生的是一个较新的该类ICMP差错,则报文段大小被设置为下一跳的MTU减去IP和TCP首部长度。如果是一个较旧的该类ICMP差错,则必须尝试下一个可能的最小MTU。当由这个ICMP差错引起的重传发生时,拥塞窗口需要不断变化,但要启动慢启动;

由于路由可以动态变化,因此在最后一次减少路径MTU的一段时间以后,可以尝试使用一个较大的值(直到等于对端声明的MSS或者输出接口MTU的最小值);

在对非本地目的地,默认的MSS通常为536字节,路径MTU发现可以避免在通过MTU小于576的中间链路进行分片。对于本地目的主机,也可以避免在中间链路的MTU小于端点网络的情况下进行分片。但为了能使路径MTU更加有用和充分利用MTU大于576的广域网,一个实现必须停止使用为非本地目的制定的536的MTU默认值。MSS的一个较好的选择是输出接口的MTU(当然要减去IP和TCP首部大小);

文章来源:<TCP/IP详解>

原文地址:https://www.cnblogs.com/wanpengcoder/p/11750582.html

时间: 2024-10-20 02:15:11

TCP路径MTU发现的相关文章

MTU的概念,什么是路径MTU? MTU发现机制,TraceRoute(了解)

1.MTU的概念 MTU即Maximum Transmission Unit 最大传输单元.它是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位). 2.路径MTU      路径MTU是指一条因特网传输路径中,从源地址到目的地址所经过的"路径"上的所有IP跳的最大传输单元的最小值. 或者从另外一个角度来看,就是无需进行分片处理就能穿过这条"路径"的最大传输单元的最大值. 3.路径MTU的发现方法 这是确定两个IP主机之间路径最大传输单元的技术,其目

IP分片和TCP分片 MTU和MSS

前期对分片分段概念有点不清晰,看到一篇好文,mark 本文转自:http://blog.csdn.net/keyouan2008/archive/2010/08/27/5843388.aspx 1,MTU(Maximum Transmission Unit,MTU),最大传输单元 (1)以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492个字节.链路层的这个特性称作MTU.不同类型的网络大多数都有一个上限.如果IP层有一个数据要传,且数据的长度比链路层的MTU还大,那么

TCP缓冲区大小及限制

TCP输出 下图展示了应用进程写数据到TCP套接口的过程. 每一个TCP套接口有一个发送缓冲区,我们可以用SO_SNDBUF套接口选项来改变这个缓冲区的大小.当应用程序调用write时,内核从应用程序进程的缓冲区中拷贝所有数据到套接口的发送缓冲区.如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用程序的缓冲区大于套接口发送缓冲区,或是套接口发送缓冲区还有其他数据),应用进程将被挂起(睡眠).这里假设套接口是阻塞的,它是通常的缺省设置(还有非阻塞的套接口).内核将不从write系统调用返回,

图解TCP/IP第五版 -- 目录

很多年前买过<TCP/IP详解>3卷,当时可能根本没看,也可能是看了又忘了,没有留下什么印象,当时的书也当做废品卖了. 卖书时的感觉貌似是,买了太多的书,基本都没看,搬家搬来搬去的麻烦,不如从网上看些资料来的直接,三箱子书都卖了,有很多书都是当年颇有名的,书的范围也很广. 单说语言层面,其实当时没有理解语言的精髓,甚至把开发工具的熟练使用当做学会语言,现在还记得的,买过的有各种<开发人员指南>:Delphi.C++Builder.VB.ASP.JBuilder.C#:现在想来也是不

TCP/IP-UDP

We read the world wrong but say that it deceives us. "我们看错了世界,却说世界欺骗了我们" 参考资料:TCP/IP入门经典 (第五版)  TCP/IP详解 卷一:协议 一.简介 UDP(用户数据报协议),是一个简单的面向数据报的传输层协议,进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报.它在协议栈中的位置如下 特点:UDP是一个面向数据报的协议,所以它不提供可靠性:它把应用程序传给IP层的数据发送出去,

《TCP/IP详解卷2:实现》笔记--IP的分片和重装

IP首部内有三个字段实现分片和重装:标识字段(ip_id).标志字段(ip_off的3个高位比特)和偏移字段(ip_off的13个低位 比特).标志字段由3个1bit标志组成.比特0是保留的必须为0,:比特1是"不分片"(DF)标志:比特2是"更多分片"(MF)标志. Net/3中,标志和偏移字段结合起来,由ip_off访问,如下图所示: ip_off的其他13bit指出在原始数据报内分片的位置,以8字节为单位计算.因此,除最后一个分片外,其他的分片都希望是一个 8

TCP/IP图解

网络基础知识 ISO 7层模型(P36) 应用层: 表示层: 会话层: 传输层: 网络层: 数据链路层: 物理层: 吞吐量和传输速度:主机之间的传输速度,称为吞吐量,单位bps 中继器(物理层):连接两个相同的媒介 集线器(P56):也可以看作是多个中继器 自学式网桥(数据链路层):能够判断报文是否发送给相邻的网段 3层路由器 4-7层交换机 分组交换:将数据分成若干个进行传输的方式.其中, 广播: 默认路由: 环路路由 全双工 半双工 网络层 网络标识 主机标识 子网掩码 网络地址 IP地址

读书笔记——《图解TCP/IP》(2/4)

经典摘抄 第三章 数据链路 1.实际的通信媒介之间处理的却是电压的高低.光的闪灭以及电波的强弱等信号. 2.数据链路层的相关技术:MAC寻址.介质共享.非公有网络.分组交换.环路检测.VLAN等 3.数据链路层被视为网络传输中的最小单位. 4.以太网.FDDI和ATM的不同 以太网与FDDI不仅包含OSI参考模型的第二层数据链路层,也规定了第一层物理层的规格. 而ATM中孩子包含了第三层网络层的一部分功能. 5.网络拓扑:网络的连接和构成的形态. 6.MAC地址长48比特. 7.从通信介质的使用

图解TCP/IP第五版 -- 文件夹

非常多年前买过<TCP/IP具体解释>3卷,当时可能根本没看,也可能是看了又忘了,没有留下什么印象,当时的书也当做废品卖了. 卖书时的感觉貌似是.买了太多的书,基本都没看,搬家搬来搬去的麻烦,不如从网上看些资料来的直接.三箱子书都卖了.有非常多书都是当年颇有名的,书的范围也非常广. 单说语言层面,事实上当时没有理解语言的精髓,甚至把开发工具的熟练使用当做学会语言.如今还记得的,买过的有各种<开发者指南>:Delphi.C++Builder.VB.ASP.JBuilder.C#:如今