【13】TCP/IP协议族详解-TCP(2)

声明:本博客参考自《TCP/IP详解卷一:协议》

主要介绍TCP不同类型数据的交互方式:成块数据和交互式数据(小数据)

1.交互式数据

交互式数据的工作方式一般是客户端每键入一个按键传送一个字节的数据到服务器,然后服务器再回显客户的输入。流程如下图所示:

这样做,必然会导致网络上的小分组过多,所以大神们提出了各种研究方法。

1.2 延时确认

TCP在接收数据时并不立即发送ACK,相反,它推迟发送,以便将ACK与需要沿该发现发送的数据一起发送。绝大多数系统的延时时间都是200ms。也就是说,TCP将以最大200ms的时延等待是否有数据一起发送。如果有,立即发送。如果没有200ms超时发送ACK。

1.3 Nagle算法

TCP每次发送一个字节的数据,产生小分组(20字节IP头部+20字节TCP头部+1字节数据)在局域网通常没有问题,但是在延时较大的广域网容易出现阻塞问题。

Nagle算法规定一个TCP连接上最多只能有一个未被确认的未完成分组,在该分组的确认到达之前不能发送其它小分组。相反,TCP收集这些少量的分组,并在取人到来时以一个分组发送出去。该算法拥有自适应性:确认到达越快,数据发送得越快。数据到达越慢,分组越少。

但是,有时为了减小系统的延时需要关闭Nagle算法,套接口选项中的TCP_NODELAY可以实现该功能。

2.成块数据

2.1 滑动窗口协议

滑动窗口协议是一种流量控制方式,协议允许发送方在停止等待确认前可以连续发送多个分组。由于发送方不必每个分组停下来等待确认,因此该协议可以加速数据的传输。

其中接收方通告的窗口称为提供的窗口,上图表明,接收方已经确认1,2,3数据,且通告的窗口为6。当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或较小窗口的大小。具体的描述方法如下:

①窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。

②窗口右边沿向右移动时允许发送更多的数据,称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓冲时。

③窗口右边沿向左移动称为收缩。这种情况一般不会发生。

补充:TCP的每一端都有一个接收滑动窗口和发送滑动窗口,这两者是不一样的。

2.2 慢启动

一般TCP建立连接之后,发送方一开始便会向网络中发送多个报文端,直到达到接收方通告的窗口大小为止。这在局域网中是可行的,但是当接收方和发送方之间存在多个路由器和速率较慢的链路时,就有可能出现一些问题。一些路由器必须缓存分组,并有可能耗尽设备内存。这是需要一种称为“慢启动”的算法,对流量进行控制。

慢启动为发送方的TCP增加了一个“拥塞窗口”,记为cwnd。当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为1个报文段(接收端通告的报文段大小)。每收到一个ACK,拥塞窗口增加一个报文段。发送方取拥塞窗口与通告窗口中的最小值最为发送的上限。拥塞窗口是发送方的流量控制,而通告窗口则是接收方使用的流量控制。  

从图中可以看出拥塞窗口是逐渐增大的,每接收到一个ACK都会增大。注意报文段大小为512,图中未标识出来。

2.3 带宽时延乘积

在了解带宽时延乘积之前,先来看看窗口大小和慢启动对成块TCP数据吞吐量的影响。

上图显示了左边的发送发和右边的接收方之间的一个TCP连接上的时间系列。间隔线的上半部分是从左到右的携带数据的报文段,下半部分反向传输的是ACK。

在时间0,发送发处于慢启动状态,只发送一个报文段。经过时间1,2,3,在时间4接收方读取并产生报文的确认。经过时间4,5,6,在时间7,ACK被发送方接收。如是就有了8个时间的RRT(Round-Trip Time)。

当接收到ack1之后,发送方的拥塞窗口大小变为2,在时间8,9发送两个报文段。在时间12和13接收方接收报文产生两个ACK,在时间15,16两个ACK被确认。此时拥塞窗口变为4。

在时间16~19,有四个报文被发送,时间23,这四个报文的第一个ACK到达。4个ACK都到达之后拥塞窗口变为8,并在时间24~31发送8个报文段。在时间31及后续时间,发送方和接收方之间的管道被填满。此时拥塞窗口和通告窗口的变化不会影响数据的发送。

那么通道的容量该如何计算呢?在上图中是8

这就引用带宽时延乘积的概念

这个值取决与两个方面:RTT和带宽。带宽增大其值增大,RTT变长,其值也增大。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值