流量控制
接收端处理数据的速度是有限的,如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列反应。
因而TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制就叫做流量控制(Tlow Control)。TCP是利用滑动窗口来实现流量控制的。它的具体操作是,接收端主机向发送端主机通知自己可以接受数据的大小,于是发送端会发送不超过这个限度的数据,该大小限度就被称作窗口大小。
- 接收端将自己可以接受的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK端通知发送端;
- 窗口大小字段越大,说明网络的吞吐量越高;
- 接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端;
- 发送端接收这个窗口之后,就会减慢自己的发送速度;
- 如果接收端缓冲区快满了,就会将窗口置为0;这时发送方不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端;
窗口扩大因子M:
接收端如何把窗口大小告诉发送端呢?在我们的TCP首部中,有一个16为窗口字段,就是存放了窗口大小信息;16位数字最大表示65535,,那么TCP窗口最大就是65536字节吗?
实际上,TCP首部40字