admin管理员组

文章数量:1571760

TCP连接上的吞吐量可以通过发送和接收应用程序、TCP的发送和接收实现以及TCP对等体之间的传输路径来限制。在本文我将介绍TCP接收窗口及其对TCP吞吐量的影响、TCP窗口扩展的使用以及Windows Vista和Windows Server 2008中新的接收窗口自动调整功能,这些功能可优化接收数据的TCP吞吐量。

什么是TCP接收窗口

在介绍TCP接收窗口前,让我们回顾一下TCP连接具有的一些重要特性。

  • 首先,它们是两个应用层协议之间的逻辑点对点电路连接。TCP不提供一对多广播传输服务,它只提供一对一传输服务。
  • 第二,TCP连接是面向连接的。在传输数据之前,两个应用层进程必须使用TCP连接建立进程正式协商TCP连接。类似地,在使用TCP连接终止过程协商之后,TCP连接被正式关闭。
  • 第三,对TCP连接上发送的可靠数据进行排序,并且期望从接收端得到肯定的确认。如果没有接收到肯定确认,则重发该段。在接收端处,丢弃重复的报文,并且以适当的顺序将无序到达的段排序。
  • 第四,TCP连接是全双工的。对于每个TCP对等体,TCP连接由两个逻辑管道组成:输出管道和输入管道。TCP报头包含输出数据的序列号和输入数据的确认( ACK )。
  • 此外,TCP将通过传入和传出逻辑管道发送的数据视为连续字节流。每个TCP报头中的序列号和确认号是沿字节边界定义的。TCP不关心字节流中的记录或消息边界。应用层协议必须提供对传入字节流的正确解析。

为了限制发送端任何一次可以发送的数据量,并为接收端提供流量控制,TCP对等体使用一个窗口,这个窗口是接收端允许发送端发送的字节流上的数据跨度。发送方只能发送位于窗口内的字节流的字节。窗口沿发送方的出站字节流和接收方的入站字节流滑动,因此又称为TCP滑动窗口。

对于给定的逻辑管道(全双工TCP连接的一个方向),发送方维护发送窗口,接收方维护接收窗口。当传输中没有数据或ACK段时,将匹配逻辑管道的发送和接收窗口。换句话说,允许发送方发送的出站字节流中的数据跨度与接收方能够接收的入站字节流中的数据跨度相匹配。图1说明了这种发送和接收关系。

为了指示接收窗口的大小,TCP报头包含16位窗口字段。当接收方获得数据时,它将向发送方发送回指示成功接收字节的ACKs。在每个ACK中,“窗口”字段记录接收窗口中剩余的字节数。当应用程序发送、确认和检索数据时,发送和接收窗口都会向右滑动。“接收”窗口是控制从发送方到接收方的未确认数据传输量的窗口。

因为接收窗口中可能有应用程序尚未检索到的数据和已接收但未确认的数据,所以TCP接收窗口具有额外的结构,如图2所示。

本文标签: 原理窗口TCPWindowsAuto