路径MTU发现
TCP的路径MTU发现按照如下方式进行:
在建立连接时,TCP使用输出接口或对端声明的MSS中的最小MTU作为起始的报文段大小。路径MTU发现不 允许TCP超过对端声明的MSS,如果对端没有指定一个MSS,默认为536。
所有的TCP发送的IP数据报都被设置了DF比特,不可分片,如果中间路径的MTU小于这个值就会发送一个
ICMP差错报文,表示“不可分片”。发送端收到这个差错报文后减小MTU的大小后重新发送。
默认情况下每10分钟后会尝试使用一个较大的MTU值发送数据。
分组并不是越大越好,大的分组每经过一个路由的时间都会增加,但是传输量会减少
而小分组每经过一个路由的时间会减少,但是传输量会增加。
而这些跟网络(分组首部负荷),路由器(选路的决定),和主机(协议处理和设备中断)
长肥管道
我们把一个连接的容量表示为:
capacity(b) = bandwidth(b/s) * round-trip-time(s)
并称之为带宽延迟乘积,也可称它为两端的管道大小,当这个乘积变得越来越大时,TCP的某些局限性就会暴露出来。
具有大的带宽延迟乘积的网络被称为长肥网络(Long Fat Network,即LFN)。一个运行在LFN上的TCP连接被称为长肥管道。管道可以被水平拉长(一个长的RTT),或者被垂直拉高(较高的带宽),或向两个方向拉升,使用长肥管道会遇到多种问题:
1)TCP首部中窗口大小为16bit,从而将窗口大小限制为65535字节内,但是现在的网络需要一个更大的窗口来提供最大的吞吐量
2)一个长肥网络LFN内的分组丢失会使吞吐量急剧减少。如果只有一个报文段丢失,需要用快速恢复算法来避免管道被耗尽(如果管道被耗尽了,慢启动会渐渐填满,但这个过程需要经过多个RTT)
3)许多TCP实现对每个窗口的RTT仅进行一次测量,他们并不对每个报文段进行RTT测量,在一个长肥网络上需要更好的RTT测量机制
4)TCP对每个字节数据使用一个32bit无符号的序号来进行标识。如果在网络中有一个被延迟一段时间的报文段,它所在的网络连接已被释放,而一个新的连接在这两个主机之间又建立了,怎么才能防止专业的报文段再次出现呢?
IP首部中定义了TTL,最大上限是255跳或者是255秒。TCP定义了MSL推荐值为2分钟,也有许多实现为30秒,序号是32bit,也就是传输了2^32个字节后会被重用,如果一个包含序号N字节数据的报文段在网络上被延迟并在仍然有效时又出现,会发生什么情况?这里主要取决于网速是否够快,如果是一个千兆网络,只需要34秒序号就会发生回绕(也就是序号从0开始一直增加到2^32之后又回到了0),这里会使用一个时间戳的方式来解决这个问题。
窗口扩大选项
TCP首部仍然使用16bit不做修改,通过定义一个选项来扩大完成的
这是一个移位标记,0表示没有扩大,1表示扩大2^1倍,也就是2倍。
这个选项只能出现在SYN报文段中
如果这个值为14,则表示65535 * 2^14 字节
如果一方发送一个非0的窗口扩大因子,但没有从另一端接收一个窗口扩大选项,就将移位技术器设置为0,这就允许较新的系统能够与较旧的、不理解新选项的系统进行互操作。
这里可以看到接收方的SYN报文段中,有一个窗口扩大选项,被设置为7。
时间戳选项
时间戳是一个单调递增的值。由于接收方只需要回显收到的内容,因此不需要关注时间戳单元是什么。这个选项不需要再两个主机之间进行任何形式的时钟同步。
BSD系统在启动时将时间戳设置为0,之后每经过500毫秒将时间戳时钟加1。
为了减少任意一端维持的状态数量,对于每个连接只保持一个时间戳的数值。更新这个数值的算法非常简单:
1)TCP跟踪下一个ACK中将要发送的时间戳的值(一个名为tsrecent的变量)以及最后发送的ACK中确认序号(一个名为lastack的变量)。这个序号就是接收方期望的序号。
2)当一个包含有字节号lastack的报文段达到时,则该报文段中的时间戳被保存在tsrecent中。
3)无论何时发送一个时间戳选项,tsrencent就作为时间戳回显应答字段被发送,而序号字段被保存在lastack中。
这个算法能处理下面两种情况:
1)如果ACK被接收方延迟,则作为回显值的时间戳值应该对应于最早被确认的报文段。如发送了1~1024和1025~2048字节的报文段达到,接收方产生一个2049的ACK来对它进行确认。此时ACK中的时间戳应该是1~1024报文段中的时间戳。因为发送方在进行重传超时时间的计算时,必须将延迟的ACK也考虑在内。
2)如果一个受到的报文段虽然在窗口范围内但同时又是失序,这就表明前面的报文段已经丢失。当那个丢失的报文段达到时,它的时间戳(而不是失序报文段的时间戳)将被回显。
假设有1~1024报文段A
1025~2048报文段B
2049~4072报文段C
如果达到接收方的顺序为A,C,B。那么接收方返回的时间戳ACK应该是对A回复1(报文段A的时间戳),
之后是报文段2(回显的时间戳还是报文段A的),之后是正常的回显报文段C。
PAWS:防止回绕的序号
32bit的序号在一个带宽很大RTT很长的连接内可能会出现回绕,当旧的报文段A没有及时达到,此时发送方又重传了这个报文段标记为B,那么A的时间戳就是1,B的时间戳是2。
当接收方收到2后,一段时间(可能A只是被中间路由延迟了)报文段A又达到了,此时发现最新的时间戳比A要大,于是将A报文段丢弃。
PAWS算法不需要再发送方和接收方中间进行任何形式的时间同步。接收方所需要的就是时间戳的值应该单调自增,并且每个窗口至少增加1。
T/TCP;为事务用的TCP扩展
TCP的扩展,但因为存在安全性问题,并没有成为标准,也没有被应用。
TCP的性能
下面这些实际限制适用于任何的实际情况
1)不能比最慢的链接运行得更快
2)不能比最慢的机器的内存运行的更快
3)不能够比接收方提供的窗口大小除以往返时间所得结果运行的更快(这就是带宽延迟乘积公式)。
参考:
...
相关推荐
第24章 TCP的未来和性能 256 第25章 SNMP:简单网络管理协议 270 第26章 Telnet和Rlogin:远程登录 293 第27章 FTP:文件传送协议 316 第28章 SMTP:简单邮件传送协议 332 第29章 网络文件系统 347 第30章 其他的TCP...
第24章 TCP的未来和性能 256 第25章 SNMP:简单网络管理协议 270 第26章 Telnet和Rlogin:远程登录 293 第27章 FTP:文件传送协议 316 第28章 SMTP:简单邮件传送协议 332 第29章 网络文件系统 347 第30章 其他的TCP...
tcpcopy可以用于实时和离线回放领域,并且tcpcopy支持mysql协议的复制,开源二年以来,功能上越来越完善。 如果你对上线没有信心,如果你的单元测试不够充分,如果你对新系统不够有把握,如果你对未来的请求压力...
TCP/IP和Internet 8 2.1 一段历史 8 2.1.1 ARPANET 8 2.1.2 TCP/IP 9 2.1.3 国家科学基金会(NSF) 9 2.1.4 当今的Internet 12 2.2 RFC和标准化过程 12 2.2.1 获得RFC 13 2.2.2 RFC索引 13...
01TCP-IP基础视频教程概述.wmv 02TCPP基础视频教程 Datalink Layer. wm 03TCPP基础视频教程IPwm 04TCP-IP基础视频教程ARP.wm 05TCP-IP基础视频教程ICMP.Wmv ...18TCPP基础视频教程tcp的未来和性能wmv
第2章 TCP/IP和Internet 8 2.1 一段历史 8 2.1.1 ARPANET 8 2.1.2 TCP/IP 9 2.1.3 国家科学基金会(NSF) 9 2.1.4 当今的Internet 12 2.2 RFC和标准化过程 12 2.2.1 获得RFC 13 2.2.2 RFC索引 13 2.2.3 有关RFC的幽默 ...
第2章 TCP/IP和Internet 8 2.1 一段历史 8 2.1.1 ARPANET 8 2.1.2 TCP/IP 9 2.1.3 国家科学基金会(NSF) 9 2.1.4 当今的Internet 12 2.2 RFC和标准化过程 12 2.2.1 获得RFC 13 2.2.2 RFC索引 13 2.2.3 有关RFC的幽默 ...
第24章 TCP的未来和性能 256 24.1 引言 256 24.2 路径MTU发现 256 24.2.1 一个例子 257 24.2.2 大分组还是小分组 258 24.3 长肥管道 259 24.4 窗口扩大选项 262 24.5 时间戳选项 263 24.6 PAWS:防止回绕的序号 265 ...
第24章 TCP的未来和性能 256 24.1 引言 256 24.2 路径MTU发现 256 24.2.1 一个例子 257 24.2.2 大分组还是小分组 258 24.3 长肥管道 259 24.4 窗口扩大选项 262 24.5 时间戳选项 263 24.6 PAWS:防止回绕的序号 265 ...
第24章 TCP的未来和性能 第25章 SNMP:简单网络管理协议 第26章 Telnet和Rlogin:远程登录 第27章 FTP:文件传送协议 第28章 SMTP:简单邮件传送协议 第29章 网络文件系统 第30章 其他的TCP/IP应用程序 附录A ...
第24章 TCP的未来和性能 256 第25章 SNMP:简单网络管理协议 270 第26章 Telnet和Rlogin:远程登录 293 第27章 FTP:文件传送协议 316 第28章 SMTP:简单邮件传送协议 332 第29章 网络文件系统 347 第30章 其他的TCP...
第24章 TCP的未来和性能 256 24.1 引言 256 24.2 路径MTU发现 256 24.2.1 一个例子 257 24.2.2 大分组还是小分组 258 24.3 长肥管道 259 24.4 窗口扩大选项 262 24.5 时间戳选项 263 24.6 PAWS:防止回绕的序号 265 ...
第24章 TCP的未来和性能 256 24.1 引言 256 24.2 路径MTU发现 256 24.2.1 一个例子 257 24.2.2 大分组还是小分组 258 24.3 长肥管道 259 24.4 窗口扩大选项 262 24.5 时间戳选项 263 24.6 PAWS:防止回绕的序号 265 ...
第24章 TCP的未来和性能 256 24.1 引言 256 24.2 路径MTU发现 256 24.2.1 一个例子 257 24.2.2 大分组还是小分组 258 24.3 长肥管道 259 24.4 窗口扩大选项 262 24.5 时间戳选项 263 24.6 PAWS:防止回绕的序号 265 ...
第24章 TCP的未来和性能 第25章 SNMP:简单网络管理协议 第26章 Telnet和Rlogin:远程登录 第27章 FTP:文件传送协议 第28章 SMTP:简单邮件传送协议 第29章 网络文件系统 第30章 其他的TCP/IP应用程序 附录A ...
第24章 TCP的未来和性能 256 24.1 引言 256 24.2 路径MTU发现 256 24.2.1 一个例子 257 24.2.2 大分组还是小分组 258 24.3 长肥管道 259 24.4 窗口扩大选项 262 24.5 时间戳选项 263 24.6 PAWS:防止回绕的序号 265 ...
tcpcopy可以用于实时和离线回放领域,并且tcpcopy支持mysql协议的复制,开源二年以来,功能上越来越完善。 如果你对上线没有信心,如果你的单元测试不够充分,如果你对新系统不够有把握,如果你对未来的请求压力...
第24章 TCP的未来和性能 256 24.1 引言 256 24.2 路径MTU发现 256 24.2.1 一个例子 257 24.2.2 大分组还是小分组 258 24.3 长肥管道 259 24.4 窗口扩大选项 262 24.5 时间戳选项 263 24.6 PAWS:...