计算机网络面试题, SACK 的引入是为了解决什么问题?
计算机网络面试题, SACK 的引入是为了解决什么问题?
QA
Step 1
Q:: SACK 的引入是为了解决什么问题?
A:: SACK(Selective Acknowledgment,选择性确认)的引入是为了解决TCP传输中丢包引发的性能问题。在传统的TCP协议中,当检测到数据包丢失时,接收方只能通过累积确认的方式通知发送方重新传输丢失的数据,这种机制在高丢包率和长延迟网络环境下会导致大量的冗余数据传输,从而降低网络效率。SACK允许接收方显式通知发送方哪些数据包丢失,哪些已成功接收,从而使发送方只需重传丢失的部分数据包,大大提高了传输效率。
Step 2
Q:: SACK 的工作原理是什么?
A:: SACK的工作原理是在TCP头部的可选字段中添加一个SACK选项,接收方通过该选项告知发送方哪些数据块已经成功接收,哪些数据块丢失需要重传。发送方收到SACK信息后,只会重传丢失的数据块,从而减少不必要的数据重传,提高传输效率。
Step 3
Q:: TCP 在没有 SACK 时如何处理丢包?
A:: 在没有SACK的情况下,TCP使用累积确认机制。接收方只能确认从数据流开始连续收到的数据字节,如果中间丢失了某个数据包,接收方只能通过重复发送的ACK来告知发送方丢失的状态,这时发送方可能会重传已经成功接收的数据包,造成带宽浪费和传输延迟。
Step 4
Q:: SACK 与 TCP 快速重传之间有什么关系?
A:: SACK和TCP快速重传都是为了解决TCP协议中的丢包问题。快速重传机制允许发送方在收到三个重复ACK后立即重传认为丢失的数据包,而无需等待超时。然而,快速重传可能导致不必要的重传。SACK则进一步优化了这个过程,使得发送方可以精确地重传丢失的数据块,从而减少了冗余的重传数据。
Step 5
Q:: SACK 在实际应用中有哪些限制?
A:: 虽然SACK显著提高了网络传输的效率,但并不是所有的TCP实现都支持SACK。此外,在某些情况下,例如网络非常稳定且几乎没有丢包时,SACK的优势并不明显。同时,SACK选项会增加TCP头部的长度,从而略微增加了协议的复杂性。