23、谈下你对 TCP 拥塞控制的理解?使用了哪些算法?拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制 。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏 。这种情况就叫拥塞 。
拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致于过载 。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷 。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素 。相反,流量控制往往是点对点通信量的控制,是个端到端的问题 。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收 。
为了进行拥塞控制,TCP 发送方要维持一个拥塞窗口(cwnd) 的状态变量 。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化 。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个 。
TCP 的拥塞控制采用了四种算法,即:慢开始、拥塞避免、快重传和快恢复 。在网络层也可以使路由器采用适当的分组丢弃策略(如:主动队列管理 AQM),以减少网络拥塞的发生 。
- 慢开始:
- 拥塞避免:
- 快重传与快恢复:
没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停 。在暂停的这段时间内,没有新的或复制的数据包被发送 。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认 。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段 。
有了 FRR,就不会因为重传时要求的暂停被耽误 。当有单独的数据包丢失时,快速重传和快恢复(FRR)能最有效地工作 。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作 。
24、什么是粘包?在进行 Java NIO 学习时,可能会发现:如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数据包粘在一起的情况 。
1. TCP 是基于字节流的,虽然应用层和 TCP 传输层之间的数据交互是大小不等的数据块,但是 TCP 把这些数据块仅仅看成一连串无结构的字节流,没有边界;
2. 从 TCP 的帧结构也可以看出,在 TCP 的首部没有表示数据长度的字段 。
基于上面两点,在使用 TCP 传输数据时,才有粘包或者拆包现象发生的可能 。一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包 。
接收端收到了两个数据包,但是这两个数据包要么是不完整的,要么就是多出来一块,这种情况即发生了拆包和粘包 。拆包和粘包的问题导致接收端在处理的时候会非常困难,因为无法区分一个完整的数据包 。
25、TCP 黏包是怎么产生的?
- 发送方产生粘包
- 接收方产生粘包
推荐阅读
- 鹿晗|鹿晗说减肥太难了不想减!赴港递表,收入下降,失踪人口鹿晗近况
- 计算机编码ASCII、GBK、Unicode、UTF-8和URL编码的区别
- 电脑的几个基本常识
- 鹿晗|鹿晗晒金发直拍发文:“减肥太难了,不想减了”
- 二进制世界的秘密
- 计算机体系基础
- MySQL数据库锁理论
- 计算机基础必考知识 计算机基础试卷
- 眼睛干涩、视力模糊太难受?缓解视疲劳妙方请收好
- 浅谈计算机中的hosts文件
