说说TCP的流量控制机制?

TCP中进行流量控制的目的是让发送方的发送速率不要太快,接收方能来得及接收。TCP流量控制机制主要是通过TCP报文头部的窗口大小字段(rwnd)来控制的。
具体的方式为:在建立TCP连接的过程中双方需要商定好各自接收窗口的大小,之后发送数据的一方按照接收方指定的窗口大小进行发送数据,如果接收方来不及接收数据,则会减小窗口的大小,如果窗口大小减小到0,则发送方应该停止发送数据。
只要TCP连接的一方收到对方发送的窗口为0的通知,就启动持续计时器。如果持续计时器设置的时间到期,就给对方发送一个探测报文段,对方收到探测报文段后给出的确认报文段中有现在的窗口值。如果此时的窗口仍然为0,那么发送方就重新启动持续计时器,否则则进行接下来的数据传输。

思考:如果不设置持续计时器会出现什么情况?
**
会出现死锁的情况。死锁出现的案例:接收方(B)给发送方(A)发送完零窗口的报文后不久,B的接收缓存有有了一些存储空间(表示可以继续接收数据)。然而这个报文段在传输过程中丢失了,这样就导致了A在一直等待B的非零窗口的通知,而B一直在等待A发送的数据,进而照成死锁的现象。

说说TCP的拥塞控制机制?

当网络中对资源的需求总和大于可用资源数量的时候就会发生网络拥塞,发生网络拥塞后,网络中的资源会呈现 供应不足的现象,网络的性能会变坏,吞吐量会变低。
TCP引入了拥塞控制机制来处理网络拥塞的现象。拥塞控制其实就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不发生过载的现象。下图展示了拥塞控制在网络中的作用。
截屏2020-07-23 上午10.06.42.png
TCP进行拥塞控制的算法有四种:

  1. 慢开始
  2. 拥塞避免
  3. 快重传
  4. 快恢复

当主机需要发送数据时,先设定一个较小的发送窗口,在接到报文段的确认后,发送窗口就增大1,每过一轮发送窗口的数值就变为原来的两倍。当超过慢开始门限的时候,就改用拥塞避免算法(每轮将发送窗口的值增加1)直至网络拥塞(报文丢失了)。
截屏2020-07-23 上午10.12.30.png
慢开始和拥塞避免算法过程:
截屏2020-07-23 上午10.16.06.png

快重传算法可以让发送方今早地知道发生了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据的时候才发送确认,而是要立即发出确认,及时收到了失序的报文段也要立即发出对已收到报文段的确认。这样发送方在收到3个重复的确认后会立即重新发送丢失的报文段,发送方也就不会误以为发生了网络拥塞。
截屏2020-07-23 上午10.20.39.png
发送方知道只是丢失了报文段而不是发生网络拥塞(收到了3个重复的ACK,即:3-ACK)时,不启动慢开始算法,而是采用快恢复算法。快恢复算法的思想是:发送方调整门限值 TCP传输控制 - 图5,同时设置拥塞窗口的大小为 TCP传输控制 - 图6,并开始执行拥塞避免算法。

TCP的可靠传输是如何实现的?

首先根据接收方给出的接收窗口(cwnd)的大小来构造发送窗口,发送窗口由两部分组成:已发送但未收到确认的字节数和在发送窗口中但是未发送的字节数;接收方的接收窗口负责接收发送方发送的数据,接收窗口中也包含两部分:一部分是已经到达的数据,还有一部分是未接收的数据。
当发送方发送的数据未按序到达接收方的时候,接收方会将未按序到达的数据缓存下来,之后接收方根据按序收到的数据中的最高序号发回确认。发送方在收到接收方的确认后对该确认号之后的数据全都进行重传,接收方接收到数据后按序交付主机。

TCP的SACK机制?

TCP中的SACK表示对报文数据进行选择重传。主要是为了解决当存储未按序到达的报文时的重传数据问题。SACK的思想是:通过确定丢失报文的边界来确定真正需要重传的报文信息,而不是重传所有的报文。
使用SACK时需要通信的双方在建立连接的时候协商运行使用SACK协议,使用SACK时原ACK的作用不变,在SACK报文中只能指定4个报文的边界信息(TCP的首部长度最大未40字节,而每个序号需要占用4个字节,确定一个数据块需要两个边界序号)。

TCP和UDP的区别?

  1. TCP是一个面向连接的协议,而UDP是一个无连接的协议;
  2. TCP是一个可靠传输的协议,而UDP是一个尽最大努力交付的不可靠协议;
  3. TCP具有拥塞控制机制,UDP没有拥塞控制机制;
  4. TCP是一个面向流的协议,即:将报文看成字节流,拆分组织成不同大小的数据块进行发送;UDP是面向报文的协议,即:UDP对上层传递过来的报文不进行处理,只是加上UDP首部后就直接发送给下一层
  5. TCP是一个一对一(点对点)通信的协议,而UDP支持一对一、一对多、多对多通信;
  6. TCP的首部开销大(20个字节),UDP的首部开销小(8个字节)