【TCP/IP详解 卷一:协议】第二十四章 TCP的未来与性能
来到了TCP的最后一个章节,未来与性能。在当时(1991年)的未来,如今已经部分变为现实,部分就只是历史中的实验。
主要内容:
- 路径MTU的发现与TCP的结合。
- 长肥管道 和 高速千兆比网络。
- 窗口扩大选项。
- 时间戳选项 和 PAWS算法。
- T/TCP。
- TCP的性能。
24.1 前言
本章讨论TCP的一些修改建议,这些建议 可以使TCP在高速率环境中获得最大的吞吐量。使用路径MTU发现机制可以增加吞吐量。
长肥管道:带宽时延乘积很大的网络。以及TCP在这些网络上面的局限性。为了处理长肥管道,增加了两个选项:
- 窗口扩大选项(增大TCP的最大窗口)
- 时间戳选项(更加精确的计算RTT,防止序号回绕)
这些新选项允许TCP实现能够向后兼容。
以及现在被遗忘的T/TCP,TCP事务协议。
24.2 路径MTU发现
其实本质上并没有与之前我们介绍的路径MTU有什么区别,这是在 当前两个主机之间的路径上任何网络的最小MTU。
MSS:网络允许传输数据的最大值
MTU = MSS + 数据报头的长度
路径MTU发现 在IP首部中 设置了DF(不要分片),如果中间的路由器需要对IP数据报进行分片,将返回一个ICMP不可达差错,通过这个差错可以确定路径MTU。
具体实现
连接建立的时候,TCP使用输出端口或者对端声明的MSS中的最小MTU作为起始的报文段大小。路径MTU不允许TCP超过 对端声明的MSS。如果对端没有声明,则默认536.
一旦选定了报文段的大小,所有被TCP发送的IP数据报 都将被设置为DF。
如果中间的某个路由器需要对它进行分片,那么就丢弃该报文段,并且返回一个ICMP不可达差错报文。
收到这个报文之后,TCP就减小报文段的长度进行重传。
- 如果这个ICMP报文和之前的报文类似(旧的ICMP),也就是说 之前减小的报文段还不足以通过发送ICMP报文的路由器,TCP就继续尝试下一个可能的最小MTU。
- 如果这个ICMP报文是 路由器产生的较新的ICMP差错(路由发生了变化),那么报文段的大小就被设置为 下一跳的MTU减去IP和TCP的首部长度。
当这个重传发生的时候,拥塞窗口不变,但是需要进行慢启动。
由于路由是动态变化的,因此在最后一次减小报文段大小的一段时间之后,可以尝试使用一个较大的值,但是不能超过 min{对端声明的MSS,输出接口MTU的最小值}。
主要作用:
避免IP数据报进行分片,因为即使丢弃了其中的一片数据,都会导致TCP进行重传,降低了传输性能。
24.3 长肥管道
当带宽时延乘积越来越大的时候,TCP的局限性就会暴露出来。
具有大的 带宽时延乘积 的网络,叫做长肥网络,即LFN。而一个 运行在LFN上的TCP连接 称为长肥管道。它可以被水平拉长(长的RTT),也可以被拉宽(较高的带宽)。
TCP在长肥管道下有以下问题:
(1)需要一个更大的窗口来提供更大的吞吐量。由后面的 窗口扩大选项 改良。
(2)在一个长肥管道LFN中的分组丢失 会使吞吐量急剧减少:如果只有一个报文段丢失,可以利用 快速恢复和快速重传算法 避免管道的耗尽;但是如果有多个分组丢失也会典型的让管道耗尽。可以使用慢启动填满,但是这需要几个RTT的时间。
(3)在长肥管道上,需要更好的 RTT测量机制。由 时间戳选项 改良。
(4)怎么样避免在一个MSL时间内避免 序号回绕:序号空间是有限的,在使用完之后会发生重用,迟到报文段会使数据发生差错。由 PAWS算法 改良。
千兆比网络
在千兆比网络的速率下,时延限制占据了主要的地位,而带宽不再成为限制。
但是时延主要取决于光速,而光速是不可能减小的,这个固定时延带来了一些不便。
24.4 窗口扩大选项
窗口扩大选项 使得TCP的窗口定义从 16bit 增加到 32bit。但是这不是通过修改首部长度来实现的:首部仍然为16bit,通过一个选项定义实现扩大操作。
通过这个选项(移位计数器)的值(连接的时候一般为0 或者 14),对传递的窗口值进行移位的操作,得到真正的窗口值。
这个选项只能出现在SYN报文段中。
为了使用这个扩大选项,连接的两端 必须在它们的SYN报文段中发送这个选项,两边的扩大因子可以不同。
如果主动建立的一方 没有收到另外一方的窗口扩大选项,则把发送和接收的 移位计数器置为0.
TCP根据接收缓存的大小主动选择移位计数。
24.5 时间戳选项
长肥管道需要更为精确的 RTT测量机制。
时间戳选项 使每个发送方在每个报文段中,放置一个时间戳值。接收方在确认中返回这个数值,从而允许 发送方为 每一个收到的ACK计算RTT。(必须说,是收到的ACK而不是每一个报文段,因为 接收端TCP通常用一个ACK确认多个报文段)
包含这个选项的TCP首部,从20bit 增加到 32bit。
时间戳是一个单调递增的值,RFC推荐在 1ms到1s 之间将时间戳的值+1.
与窗口扩大选项类似,需要在 SYN报文段中指定该选项。
关于时间戳算法的准确实现,参考教材的P264,具体两点:
(1)如果ACK被接收方延迟,那么作为回显的 时间戳值 应该是 最早被确认的数据报。
比如 1-1024 和 1025-2048 字节 的报文段到达,每一个都有一个时间戳选项,那么回显的是 1-1024 的时间戳值。
(2)如果收到的报文段乱序,说明前面的报文段丢失。当丢失的报文段到达时,它的时间戳将被回显。
比如有三个数据报按以下顺序接收:1-1024,2049-4072,1025-2048. 在 1025-2048 到达之后,那么返回的ACK带有 1-1024 的时间戳(正常的),1-1024 的时间戳(代表不正常的,重复的失序报文段),还有 1025-2048 的时间戳(丢失的回显)。
这会使 RTT估计过高,但是总比 RTT估计过低好。
无论怎样,回显 2049-4072 会导致RTT的估计出现大的偏差。
24.6 PAWS 防止回绕的序号
PAWS 防止序号的回绕,假定了报文段丢失和重新出现的时间小于 MSL的时间,否则这个迟到的报文段 在TTL到期的时候 被丢弃。
时间戳可以避免这个情况:它是单调递增的,并且每个窗口必须加1.
对比时间戳就可以发现 重新出现的迟到报文段了(时间戳比前面的数据小),有效地防止了数据的紊乱。
24.7 T/TCP
以小结的内容对其进行一个概述。
为事务用的TCP扩展,即T/TCP,允许一个 client/server 的 请求-应答 序列在通常的情况之下只使用三个报文段来完成。它避免三次握手,并缩短了TIME_WAIT状态,其方法是为每个主机高速缓存少量的信息:这些信息曾用于建立一个连接。它还包含数据报文段中使用 FIN 和 SYN 标志。
这只是一种试验性的协议。因为存在安全性问题,并没有成为标准,也没有被应用。
24.8 TCP的性能
教材中对在 10Mb/s的以太网 上计算能够观察到的TCP最大的吞吐量 做了一个计算。
实际的限制:
1.不能比最慢的链路运行更快
2.不能比最慢的机器的内存运行的更快
3.不能比 通告窗口/往返时间RTT 更快(带宽时延公式的变形,求出带宽)
TCP的最高运行速率 的真正上限是由TCP的窗口大小决定的。许多协议的性能问题 在于实现中的缺陷,而不在于协议固有的一些限制。
2016/8/20
【TCP/IP详解 卷一:协议】第二十四章 TCP的未来与性能的更多相关文章
- TCP/IP详解 卷一(第十四章 DNS:域名系统)
域名系统(DNS Domain Name System)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息. 从应用角度上看,对DNS的访问时通过 ...
- TCP/IP详解 卷一(第十九章 TCP的交互数据流)
TCP需要同时处理两类数据:块数据.交互数据. 本章将以Rlogin应用为例观察交互数据的传输过程. 交互式输入 首先观察在一个Rlogin连接上键入一个交互命令时所产生的数据流(每键入一个交互按键都 ...
- TCP/IP详解 卷一(第十二章 广播和多播)
广播和多播仅应用于UDP. 广播指的是一个主机向网上的所有其他主机发送帧,而 多播仅发送给属于多播组的多个主机. 为了弄清广播和多播,需要了解主机对由信道传送过来帧的过滤过程 1.首先,网卡查看由信道 ...
- TCP/IP详解 卷1 第十九章 TCP的交互数据流
19.1 引言 成块数据:比如ftp.电子邮件.Usenet新闻 交互数据:Telnet.Rlogin 成块数据的报文段基本上都是满长度(full-size)的,而交互数据小的多(Telnet和Rlo ...
- TCP/IP详解 卷一(第二章 链路层)
在TCP/IP协议族中,链路层主要有三个目的: 1.为IP模块发送和接收IP数据报 2.为ARP模块发送ARP请求和接收ARP应答 3.为RARP请求和接收RARP应答 TCP/IP支持多种不同的链路 ...
- TCP/IP详解 卷一(第二十章 TCP的成块数据流)
本章将介绍TCP所使用的被称为滑动窗口协议的一种流量控制方法. 该协议允许发送方在停止并等待确认前可以连续发送多个分组,这样就可以加速数据的传输. 滑动窗口 下图用可视化的方法显示了滑动窗口协议 我们 ...
- TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)
建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...
- 【TCP/IP详解 卷一:协议】第二章:链路层
2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...
- 『TCP/IP详解——卷一:协议』读书笔记——10
2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...
- 『TCP/IP详解——卷一:协议』读书笔记——01
从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...
随机推荐
- Sql Server 2016 Always On集群搭建
第一步,配置好windows环境 第二步 (配置内容较多--需单写) 需要做windows集群 安装WSFC集群组件 直接在Windows服务器管理工具中,增加功能模块,集群故障转移模块 并增加节点 ...
- POJ1860:Currency Exchange(BF)
http://poj.org/problem?id=1860 Description Several currency exchange points are working in our city. ...
- [LeetCode] 255. Verify Preorder Sequence in Binary Search Tree_Medium tag: Preorder Traversal, tree
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...
- 7.7 Models -- Working with Records
Modifying Attributes 1. 一旦一条record被加载,你可以开始改变它的属性.在Ember.js对象中属性的行为就像正常的属性.作出改变就像设置你想要改变的属性一样简单: var ...
- VMWARE安装centos6 http://www.centoscn.com/image-text/setup/2013/0816/1263.html
http://www.centoscn.com/image-text/setup/2013/0816/1263.html
- 20155334 2016-2017-2 《Java程序设计》第八周学习总结
20155334 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第十四章:NIO与NIO2 NIO的定义: InputStream.OutputStream ...
- 数组相同的key组成新的数组
function dataFunc (data){ var b = {}; $.each(data, function (i,v){ var g = v[key], //将评价人相同的拿出来组成一个新 ...
- linux服务器---配置samba
配置samba使用用户名和密码登录 1.当samba配置文件中的secure设置为user的时候,需要正确的用户名和密码才能登录. root@localhost /]#gedit /etc/samba ...
- IP分片丢失重传
尽管IP分片看起来是是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报.为什么会发生这种情况呢? 因为IP层本身没有超时重传的机制——由更高层来负责超时和重传(TCP有超时 ...
- jQuery 是javascript的一个库(常用插件、处理器)
jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery就是javascript的一个库,把我 ...