来到了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的未来与性能的更多相关文章

  1. TCP/IP详解 卷一(第十四章 DNS:域名系统)

    域名系统(DNS Domain Name System)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息. 从应用角度上看,对DNS的访问时通过 ...

  2. TCP/IP详解 卷一(第十九章 TCP的交互数据流)

    TCP需要同时处理两类数据:块数据.交互数据. 本章将以Rlogin应用为例观察交互数据的传输过程. 交互式输入 首先观察在一个Rlogin连接上键入一个交互命令时所产生的数据流(每键入一个交互按键都 ...

  3. TCP/IP详解 卷一(第十二章 广播和多播)

    广播和多播仅应用于UDP. 广播指的是一个主机向网上的所有其他主机发送帧,而 多播仅发送给属于多播组的多个主机. 为了弄清广播和多播,需要了解主机对由信道传送过来帧的过滤过程 1.首先,网卡查看由信道 ...

  4. TCP/IP详解 卷1 第十九章 TCP的交互数据流

    19.1 引言 成块数据:比如ftp.电子邮件.Usenet新闻 交互数据:Telnet.Rlogin 成块数据的报文段基本上都是满长度(full-size)的,而交互数据小的多(Telnet和Rlo ...

  5. TCP/IP详解 卷一(第二章 链路层)

    在TCP/IP协议族中,链路层主要有三个目的: 1.为IP模块发送和接收IP数据报 2.为ARP模块发送ARP请求和接收ARP应答 3.为RARP请求和接收RARP应答 TCP/IP支持多种不同的链路 ...

  6. TCP/IP详解 卷一(第二十章 TCP的成块数据流)

    本章将介绍TCP所使用的被称为滑动窗口协议的一种流量控制方法. 该协议允许发送方在停止并等待确认前可以连续发送多个分组,这样就可以加速数据的传输. 滑动窗口 下图用可视化的方法显示了滑动窗口协议 我们 ...

  7. TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)

    建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...

  8. 【TCP/IP详解 卷一:协议】第二章:链路层

    2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...

  9. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  10. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

随机推荐

  1. 了解Linux的进程与线程

    了解Linux的进程与线程 http://timyang.net/linux/linux-process/ 上周碰到部署在真实服务器上某个应用CPU占用过高的问题,虽然经过tuning, 问题貌似已经 ...

  2. java读取resource目录下的配置文件

    java读取resource目录下的配置文件 1:配置resource目录 下的文件 host: 127.0.0.1 port: 9300 2:读取    / 代表resource目录 InputSt ...

  3. PAT 1045 Favorite Color Stripe[dp][难]

    1045 Favorite Color Stripe (30)(30 分) Eva is trying to make her own color stripe out of a given one. ...

  4. storm并发机制,通信机制,任务提交

    一.storm的并发 (1)Workers(JVMs):在一个物理节点上可以运行一个或多个独立的JVM进程.一个Topology可以包含一个或多个worker(并行的跑在不同的物理机上),所以work ...

  5. C# 如何把dataTable以参数的形式传入 sql 存储过程

    ==================================================-- sql代码 示例:CREATE TYPE dbo.Content AS TABLE( ID i ...

  6. sencha touch调试时Please close other application using ADB: Monitor, DDMS, Eclipse

    1.运行——cmd——  netstat -aon|findstr "5037"  2.打开任务管理器,查看所有进程 显示进程pid(文件-查看)--查找pid=7740的结束.

  7. windows脚本的if语句

  8. LeetCode-MinimumDepthOfBinaryTree

    题目: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the ...

  9. ide vscode安装

    在linux系统中安装VSCode(Visual Studio Code)   在linux系统中安装VSCode(Visual Studio Code) 1.从官网下载压缩包(话说下载下来解压就直接 ...

  10. Trove系列(一)—入门篇

    概述DBaaS是目前云计算服务的重要部分,数据库作为一种特殊的应用程序,在应用中普遍存在.而其独特性不仅在于普遍性,而且其性能对应用的表现是至关重要的.数据库的通用性和重要性使得维护一个健壮的数据库实 ...