计算机网络 - 运输层(下)

计算机网络 - 运输层(下)

本文主要介绍TCP拥塞控制的相关机制,以及传说中 创建革命友谊的“三次握手”。

TCP的拥塞控制

什么是“拥塞”

在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种现象称为拥塞 (congestion)。
若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而降低。html

“拥塞控制”与“流量控制”的区别

拥塞控制就是防止过多的数据注入到网络中,使网络中的路由器或链路不致过载;而流量控制每每指点对点通讯量的控制,是个端到端的问题(接收端控制发送端)。
拥塞控制是一个全局性的过程,涉及到全部的主机、全部的路由器,以及与下降网络传输性能有关的全部因素。
流量控制所要作的就是抑制发送端发送数据的速率,以便使接收端来得及接收。算法

利用拥塞窗口进行拥塞控制

TCP采用基于窗口的方法进行拥塞控制。
TCP发送方维持一个“拥塞窗口”(congestion window),以控制端到端之间未确认的报文数量(拥塞的程度)。服务器

这和以前提到的用于流量控制的“滑动窗口”很像,可是和由接受方决定的“滑动窗口”大小不一样,“拥塞窗口”的大小是由发送方决定的。

发送窗口大小不只取决于接收方公告的接收窗口,还取决于网络的拥塞情况。
真正的发送窗口值为:Min(公告窗口值,拥塞窗口值)网络

对于拥塞的判断

一、重传定时器超时
因为因传输出差错而丢弃分组的几率是很小的(远小于1%),因此只要出现了超时,就能够猜测网络可能出现了拥塞。性能

二、收到三个相同的ACK(3 duplicate ACKs)学习

先假设这么一种状况,B等待A发送首字节序号为3的报文段,给A发送“ack = 3”的确认报文段(ACK),而A在发送过程当中出现了丢失,B收到的只有四、5字节的报文段;
此时B给A发送的确认报文中ack字段仍然等于3(由于字节3还没收到);
接着,在B收到字节6后,给A发送的确认报文仍然是“ack = 3”
这就是“收到三个相同ACK”的场景。

所以咱们知道,“收到三个相同的ACK”说明有个别报文段在网络中丢失了,预示着网络情况很差,可能会出现拥塞,须要采起措施避免拥塞。spa

拥塞控制算法

拥塞控制是个麻烦事儿,相关的算法也很多。或者说,多到让人有些头大。
13种拥塞控制算法啊老天计算机网络

不过不用担忧,咱们这里只介绍在RFC 5681文件中定义的四种互相紧密关联的算法:设计

  • 慢开始(Slow Start)
  • 拥塞避免(Congestion Aviudance)
  • 快重传(Fast Reyransmit)
  • 快恢复(Fast Recovery)

下面的这张图是一个拥塞控制的过程示例,在学习每个协议的时候,能够对应图中相应的部分理解。
TCP拥塞控制htm

慢开始

虽然叫“慢开始”,可是它的拥塞窗口(cwnd)增加的速度可一点也不“慢”。
使用慢开始算法后,每收到一个ACK,窗口值就加一;也就是意味着,每通过一个往返时间RTT,拥塞窗口cwnd就加倍。

这里的一个“ 往返时间”指 把拥塞窗口 cwnd 所容许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。

慢开始门限 ssthresh(Slow Start Threshold)

慢开始门限至关于慢开始“指数式增加”的一个阈值。

  • 当 cwnd < ssthresh 时,使用慢开始算法。
  • 当 cwnd > ssthresh 时,中止使用慢开始算法而改用拥塞避免算法。
  • 当 cwnd = ssthresh 时,既可以使用慢开始算法,也可以使用拥塞避免算法。

拥塞避免

拥塞避免的设计思路是让拥塞窗口的增加“慢下来”(相对于慢开始),呈线性增加,或者叫“加法增大”(Additive Increase)。

出现拥塞时

当发现网络出现拥塞时(重传定时器超时),进行如下操做:

  • ssthresh = max(cwnd/2,2)
  • cwnd = 1
  • 执行慢开始算法

快重传和快恢复

就是发送方一连收到 3 个对同一个报文段的重复确认(3-ACK)时,发送方执行快重传和快恢复算法

快重传(Fast Retransmission)
发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,于是当即进行重传(即“快重传”),这样就不会出现超时,发送方也不就会误认为出现了网络拥塞。
快重传并不是取消重传计时器,而是在某些状况下可更早地重传丢失的报文段。

快恢复(Fast Recovery)

  • ssthresh = cwnd/2
  • cwnd = ssthresh
  • 执行拥塞避免算法

加法增大,乘法减少(AIMD)

  • 加法增大:拥塞避免阶段,拥塞窗口按照线性规律增大;
  • 乘法减少:当出现超时或3个重复的确认时,就要把门限值设置为当前拥塞窗口值的一半,并大大减少拥塞窗口的数值。

两者的结合就是所谓的AIMD算法。

主动队列管理AQM

“主动”就是不要等到路由器的队列长度已经达到最大值时才不得不丢弃后面到达的分组。这样就太被动了。(并且容易形成全网同时进入“慢开始”的“全局同步”)
应当在队列长度达到某个值得警戒的数值时(即当网络拥塞有了某些拥塞征兆时),就主动丢弃到达的分组

TCP的链接与数据传输

咱们已经知道,TCP是面向链接的协议。
TCP的运输链接有三个阶段:

  • 链接创建
  • 数据传送
  • 链接释放

链接创建 - 三次握手

TCP 创建链接的过程叫作握手。
握手须要在客户和服务器之间交换三个 TCP 报文段。称之为三报文握手(there-way handshake)
创建链接的三次握手

链接释放 - 四次握手

数据传输结束后,通讯的双方均可释放链接。
TCP链接释放过程是四报文握手(four-way handshake)
链接释放的四次握手

TCP的有限状态机

TCP的有限状态机

相关文章
相关标签/搜索