传输控制协议(TCP)

2018-02-10  本文已影响16人  谢朴欢

1. 简介

TCP提供一种可靠的面向连接的全双工服务,位于传输层。

2. TCP报文段结构

TCP报文段包括首部字段和数据字段,其中数据字段来自于应用层的数据,最大长度为MSS。

首部字段

3. 可靠性实现

连接建立(三次握手)

为什么要三次握手?
现在考虑两次握手的情况:<<计算机网络>>谢仁希版里面说防止已失效的连接请求报文段,意思是TCP第一次握手客户端发给服务器的SYN报文段出现延迟,然后客户端发现超时重传SYN报文段,这一次服务器收到并回应一个ACK报文,服务器端的连接建立,收到ACK报文的客户端也成功建立了连接。然而此时第一次发出的已失效的SYN报文此时到达了服务器,服务器以为发现是客户端的连接建立请求,同一建立起连接,然后发回一个ACK报文,客户端收到后不理睬,那服务器白白浪费TCP通信资源。但采用三次握手可以解决这个问题。

连接拆除(四次挥手)

为什么要等待2MSL时间?

  • MSL是一个IP数据报在网络中的最大生存时间,如果客户端不等待2MSL而是直接进入CLOSED状态,服务端可能没有接收到最后一次ACK包会在超时重传FIN包,此时因为客户端已经进入CLOSED状态,所以服务端就不会收到ACK报文而是收到RST报文。所以等待2MSL时间是防止最后一次握手ACK报文没有到达对方而触发重传FIN准备的。
  • 让前一次使用这个端口的连接传输的数据到达接收方或消失,避免与新建立的连接数据混淆。

流量控制

TCP是全双工的通信协议,在通信两端都维持有一个发送窗口和接受窗口,对于一个发送方和一个接收方来说,接收方的接收窗口大小受到接收缓存大小的限制,如果发送方发送窗口大小持续增大导致发送速率增加,而接受缓存过快填满而导致接收窗口大小减小,结果数据可能溢出。所以动态调整接收窗口就变得非常重要,可以通过TCP报文的窗口字段告知发送方本方还有多少缓存空间可用,这也就是流量控制。

拥塞控制

拥塞控制是对于整体网络(包括路由器、交换机)出现拥塞的进行控制, 不同于流量控制的点对点控制,TCP的拥塞控制由4个核心算法组成。

慢启动(Slow Start)

在发送方维持一个额外的拥塞窗口变量cwnd(congestion window),这个拥塞窗口的大小取决于网络的拥塞程度,而流量控制的窗口取决于接收方的接受缓存,最终发送方的发送窗口大小应该为两者中的最小值。

拥塞避免(Congestion Avoidance)

上面说到慢启动的过程持续到网络出现拥塞,即出现超时还未收到ACK报文,此时就要进行拥塞避免:

快速重传(Fast Retransmit)

快速重传的目的是想让发送方在超时之前快速重传丢失的报文段。当发送方连续收到3个冗余的ACK就会执行快速重传。

快速恢复(Fast Recovery)

连续收到3个冗余的ACK其实也表示网络出现拥塞导致丢包,这时执行与拥塞避免的类似操作

第一步与拥塞避免的第一步相同,但cwnd不从1个MSS大小开始执行慢启动指数增长,而是减半执行拥塞避免线性增长,进行快速恢复。

4. 最后

现在总结下TCP的可靠性具体表现在:

上一篇 下一篇

猜你喜欢

热点阅读