流量控制
流量控制的原因在于, 传输中接收端的接受能力是有限的, 如果发送的数据过多, 就会出现接受端缓冲区塞满, 数据被迫丢弃, 造成丢包问题, 浪费资源.
TCP协议中, 为了控制这种情况的出现, 引入了流量控制.
发送端和接收端, 互相在传输中, 协商缓冲区大小, 控制发送的数据量, 合理的利用网络资源.
- 接收端在返回给发送端的响应中, 在TCP报头中放入自己的剩余缓冲区大小
- 发送端根绝接收端发送给自己的缓冲区剩余大小, 动态的调整每次发送的数据的多少
- 如果接收端的缓冲区已经满了, 就会返回给发送端一个缓冲区为0的报文, 发送端也就不会再发送了
- 发送端每隔一段时间, 向接收端发送一个探测数据段来探测接收端的缓冲区是否可以进行接收了.如果缓冲区空间有了, 就继续发送
上面的几条概念, 就是整个流量控制的基本逻辑
此处借用 《图解TCP/IP》书中插图来说明
拥塞控制
拥塞控制产生的原因在于, 网络同时传输的资源是有限的, 虽然每个人都有自己的流量控制了, 但是当大家只想着自己的数据传输, 而不考虑别人, 如果同时发送的人过多, 就会超过网络传输的上限, 大家都不能正确的发送数据, 所以引入了流量控制.
TCP协议中为了解决问题, 引入了拥塞控制
- 拥塞控制通过拥塞窗口和慢启动来实现
- 拥塞窗口和发送数据的滑动窗口一样, 只是限制了发送数据的缓冲区大