TCP可靠传输的实现和流量控制

一、所谓的流量控制

所谓的流量控制就是让发送方的发送速率不要太快,让接收方来得及接收

设A向B发送数据,在建立时,B告诉A:“我的接收窗口rwnd=400”。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。(TCP的窗口单位是字节,不是报文段)。

二、拥塞控制

在计算机网络中的链路容量,交换节点中的缓存和处理机等,都是网络的资源。在某段时间,若对网路中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞。可以吧拥塞的条件写成如下的关系式:

∑对资源的需求>可用资源

所谓的拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或者链路不致过载。(拥塞控制所要做的都是一个前提,就是网络能够承受现有的网络负荷)

相反,流量控制往往指点对点通信的控制,是个端到端的问题。(流量控制所要做的时一直发送数据的速率,以便使接收端来得及接收)

三、几种拥塞控制方法

慢开始(slow-start),拥塞避免(congestion avoidance),快重传(fast retransmit)和快恢复(fast recovery)

(1)慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。

当收到单个确认但此确认多个数据报的时候就加相应的数值。所以一次传输轮次之后拥塞窗口就加倍。这就是乘法增长,和后面的拥塞避免算法的加法增长比较。

ssthresh是慢开始权限,用法如下:

当cwnd<ssthresh时,使用上述的满开始算法。

当cwnd>ssthresh时,停止使用满开始算法二改用拥塞避免。

当cwnd=ssthresh时,慢开始和拥塞避免都可使用。

2)拥塞避免算法的思路是让拥塞窗口cwnd缓慢地增大,即每往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加杯倍。这样拥塞窗口cwnd按线性规律缓慢增长,比

慢开始算法的拥塞窗口增长速率缓慢得多。

当TCP连接进行初始化时,把拥塞窗口cwnd置为1。前面已说过,为了便于理解,图中的窗口单位不使用字节而使用报文段的个数。慢开始门限的初始值设置为16个报文

段,即 cwnd = 16 。

        ②在执行慢开始算法时,拥塞窗口 cwnd 的初始值为1。以后发送方每收到一个对新报文段的确认ACK,就把拥塞窗口值另1,然后开始下一轮的传输(图中横坐标为传输轮

次)。因此拥塞窗口cwnd随着传输轮次按指数规律增长。当拥塞窗口cwnd增长到慢开始门限值ssthresh时(即当cwnd=16时),就改为执行拥塞控制算法,拥塞窗口按线性规

律增长。
    

③假定拥塞窗口的数值增长到24时,网络出现超时(这很可能就是网络发生拥塞了)。更新后的ssthresh值变为12(即变为出现超时时的拥塞窗口数值24的一半),拥塞窗

口再重新设置为1,并执行慢开始算法。当cwnd=ssthresh=12时改为执行拥塞避免算法,拥塞窗口按线性规律增长,每经过一个往返时间增加一个MSS的大小。

强调:“拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。“拥塞避免”是说在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使

网络比较不容易出现拥塞。

(3)快速重传和快速恢复

如果发送方设置了超时计时器时限已到但还没有收到确认,那么很可能是网络出现了拥塞,致使报文段在网络中的某处被丢弃。这时,TCP马上把拥塞窗口cwnd减少到1,

执行慢启动算法,同时把慢启动门限值ssthresh减半。这是不使用快速重传的情况。

    快速重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有达到对方)而不要等到自己发送数据时才进行捎带认。

接收方收到了M1和M2后都分别发出了确认。现在假定接收方没有收到M3但接着收到了M4。显然,接收方不能确认M4,因为M4是收到的失序报文段。根据可靠传输原理,

接收方可以什么都不做,也可以在适当时机发送一次对M2的确认。但按照快重传算法的规定,接收方应及时发送对M2的重复确认,这样做可以让发送方及早知道报文段M3没有

到达接收方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。这样,发送方共收到了接收方的四个对M2的确认,其中后三个都是重复

确认。快重传算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必继续等待M3设置的重传计时器到期。由于发送方尽早重传未被

确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。

与快重传配合使用的还有快恢复算法,其过程有以下两个要点:

    ①当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了 预防网络发生拥塞。请注意:接下去不执行慢开始算法。

②由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限

ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

    下图给出了快重传和快恢复的示意图,并标明了“TCP Reno版本”。

 区别:新的 TCP Reno 版本在快重传之后采用快恢复算法而不是采用慢开始算法。


也有的快重传实现是把开始时的拥塞窗口cwnd值再增大一点,即等于 ssthresh + 3 X MSS 。这样做的理由是:既然发送方收到三个重复的确认,就表明有三个分组已经

开了网络。这三个分组不再消耗网络 的资源而是停留在接收方的缓存中。可见现在网络中并不是堆积了分组而是减少了三个分组。因此可以适当把拥塞窗口扩大了些。

    在采用快恢复算法时,慢开始算法只是在TCP连接建立时和网络出现超时时才使用。

采用这样的拥塞控制方法使得TCP的性能有明显的改进。

    接收方根据自己的接收能力设定了接收窗口rwnd,并把这个窗口值写入TCP首部中的窗口字段,传送给发送方。因此,接收窗口又称为通知窗口。因此,从接收方对发送方

的流量控制的角度考虑,发送方的发送窗口一定不能超过对方给出的接收窗口rwnd 。

发送方窗口的上限值 = Min [ rwnd, cwnd ]

当rwnd < cwnd 时,是接收方的接收能力限制发送方窗口的最大值。

当cwnd < rwnd 时,则是网络的拥塞限制发送方窗口的最大值。



四、TCP的运输连接管理

(1).TCP连接建立

TCP连接是在IP网络中两个进程间(应用层协议)的双向、全双工的逻辑回路。由节点的IP地址和端口将连接双方对应起来。 
      TCP连接特点:

通过一个握手进程建立起来;通过一个周期性保持进程来保持,保证两个TCP节点间处于激活状态;通过一个握手进程来终止,释放资源。TCP连接也被连接中的任意一端重置。 

.TCP连接的建立

为了建立连接TCP连接双方必须从对方了解下面的信息:

1.对方数据发送的开始序列号;

2.对方在出站管道上发送数据的缓冲区大小;

3.能被接收的最大段MSS;

4.被支持的TCP选项;

通过3个TCP段的交换来了解这些信息,就是常说的TCP 握手的3个包。一般在客户端访问TCP服务器的时候,在客户端初始化一个TCP连接,服务器端打开一个特殊端口等待传入的请求。客户端主动发起第一个 SYN置位的包开始协商TCP连接。服务器接收后向客户端回ACK,最后客户端在向服务器回复ACK后连接建立。 

下面我们用TCP连接的两个对等端A和B来详细介绍握手过程,其中发起方是A。



大体的流程:

ⅰ客户端发送一个SYN包给服务器,然后等待应答。
服务器端回应给客户端一个ACK=1、SYN=1的TCP数据段。
客户必须再次回应服务器端一个ACK确认数据段。


.TCP的连接释放

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 

TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可生挥手操作。

大体的流程:

ⅰTCP客户端发送一个FIN,关闭客户端到服务器端的数据传送。(客户端不再发送报文给服务器端,但可接受服务器端报文)
ⅱ服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。
ⅲ服务器关闭客户端的连接,发送一个FIN给客户端。(服务器端关闭到客户端的数据传送)
ⅳ客户段发回ACK报文确认,并将确认序号设置为收到序号加1。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值