interview

TCP

TCP概述

TCP的特点

TCP与UDP的区别。

  TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠 不可靠
应用场合 传输大量数据 少量数据
速度

基本概念:

当发送窗口和接收窗口的大小都等于 1时,就是停止等待协议。

当发送窗口大于1,接收窗口等于1时,就是回退N步协议。

当发送窗口和接收窗口的大小均大于1时,就是选择重发协议。

TCP报文结构。

TCP最小长度为20个字节。

三次握手

四次挥手

在Time_Wait阶段,主动端等待2*MSL时间,MSL建议为2分钟。

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。

TCP采用四次挥手关闭连接如图所示为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

ARQ协议

ARQ协议(自动重传请求)是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。

停止等待ARQ

这个协议的缺点是较长的等待时间导致低的数据传输速度。在低速传输时,对连接频道的利用率比较好,但是在高速传输时,频道的利用率会显著下降。

连续ARQ协议(累积确认)

为了克服停止并等待ARQ协议长时间等待ACK的缺点。这个协议会连续发送一组数据包,然后再等待这些数据包的ACK。

在连续ARQ协议中涉及到滑动窗口协议,这是TCP协议的精髓所在。

回退N重传

选择重传(SACK)

相对于回退N重传来说,选择重传可以减少重传的数据。

TCP流量控制

流量控制指点对点通信量的控制,是端到端正的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。这里是通过滑动窗口机制来实现的。发送方的发送窗口不能超过接收方的接收窗口。TCP的窗口单位是字节,不是报文段。

这上图中B一共进行了三次流量控制:第一次将窗口减小到300,第二次减小到100,最后减小到0,这时发送方暂停发送知道B发送一个新的窗口值为止。

如果B发送了一个新的窗口值到A,但是A并没有收到,就会造成死锁。为解决这个问题,TCP为每个链接设置有一个持续计时器。只要TCP收到一个0窗口,就启动计时器。若计时器设置的时间到了,就发送一个探测报文,而接收方在确认的时候会给出一个现在的窗口值。

TCP拥塞控制。

防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。

慢开始和拥塞避免

发送方维持一个拥塞窗口cwnd的状态变量。发送方让自己的发送窗口小于等于拥塞窗口

快重传和快恢复