可靠字节流

可靠的字节流是计算机网络中常见的服务范式; 它指的是一个字节流,其中从接收方的通信通道中出现的字节与发送方将它们插入通道时完全相同,并且顺序完全相同。

可靠字节流通信协议的典型示例是传输控制协议,它是 Internet 的主要构建块之一。

然而,可靠的字节流并不是计算机网络通信协议提供的xxx可靠服务范例。 其他协议(例如 SCTP)提供可靠的消息流,即数据被分成不同的单元,这些单元作为离散对象提供给数据的消费者

机制

实现可靠字节流的通信协议,通常在一些不可靠的较低级别上,使用多种机制来提供这种可靠性。 ARQ 协议对于实现可靠性具有重要作用。

所有数据项都用一个序列号标识,该序列号用于确保数据以正确的顺序传送到另一端的实体,并检查丢失的数据项。 接收方对已成功接收的数据项发回确认; 如果在合理的往返时间内未收到确认,则发送方的计时器将导致超时,然后将重新传输(可能丢失的)数据。 为了检查没有数据项被损坏,使用校验和; 一个是在发送方为每个数据块计算的,然后在接收方发送和检查。 错误或丢失的数据被报告给发送方,以便它可以重新传输相同的数据。 任何重复的数据项都将被丢弃。

队首阻塞

可靠的字节流中可能会发生行头阻塞:如果数据包被重新排序或丢失并且需要重新传输(因此到达乱序),则可能会先于顺序较早的部分接收到来自流中顺序较晚部分的数据 流的; 但是,在接收到较早的数据之前,通常无法使用较晚的数据,从而导致网络延迟。 如果多个独立的更高级别的消息被封装并多路复用到单个可靠的字节流中,那么队头阻塞会导致处理稍后发送的完全接收的消息以等待更早发送的消息的传递。

可靠字节流

例如,这会影响 HTTP/2,它将多个请求-响应对构建到一个流中; HTTP/3 采用应用层框架设计,使用数据报而不是流传输,避免了这个问题。 队头阻塞导致的延迟降低取决于基础数据包丢失率和往返时间,丢失率越高,延迟越差。 在不改变流抽象的情况下,减少丢包可以减少队头阻塞的危害; 另一种方法是使用前向纠错来实现可靠的字节流以发送冗余数据,以便可以容忍一定量的丢失而不会导致重传。

0

点评

点赞

相关文章