通常,我们会讨论丢弃错误的数据包而没有理解确定丢弃数据包原因的基础技术。在几个协议层检查错误。因此,当在目的地接收到数据包时,会在网络中的多个点以及各个级别检查数据包是否存在问题。
对几乎所有数据包进行的第一个检查是在第二层。这称为帧检查序列(FCS)。每个以太网帧的末尾都有一个四字节字段,这是发送方进行计算的结果。计算的输入由框架中的所有字段组成。每个交换机、路由器和终端站都会重新计算FCS。如果结果与帧中记录的结果不同,则丢弃该帧。如果只有一位被破坏,则该值与接收器的计算结果相匹配的可能性大大低于十亿分之一。该过程中的一个假设是高层将处理重传问题。
P字段还包含一个称为校验和的错误校验码。通过使用IP标头中的所有字段来计算此值。但是,与以太网不同,数据不包括在计算中。IP不负责检测损坏的有效负载数据。由于计算使用跳数字段,该字段随每个路由器而变化,因此IP校验和在每次路由数据包时都会更改。如果标题中的代码与它计算的校验和不匹配,则下一个路由器将丢弃该数据包。
第四层协议(TCP和UDP)具有处理数据包错误的不同方法。在目的地,TCP会基于TCP标题,有效负载数据和IP标题中的关键字段进行计算。这些字段有时称为IP伪标头。但是,如果计算结果与存储在校验和字段中的值不匹配,则TCP会直接丢弃该数据包。与普遍的看法相反,TCP并未明确将这种丢弃通知发送方。它只是不确认已收到该细分受众群。由于段的顺序,发送方最终将意识到该段未正确接收,并将被重新传输。
UDP不提供重传的准备,但是它执行错误检查。如果UDP标题中有错误,则它不希望将数据段传递给应用程序层。这一点特别重要,因为该标头包含正确标识正确接收应用程序的端口。
当不包括对有效载荷数据的错误检查时,接收器将获得无效数据。这在VoIP中尤其明显,尤其是在使用压缩的情况下:用户可能会听到声音失真。相反,在诸如Apple的HLS之类的自适应比特率视频中,正在使用TCP。损坏的数据将在播放之前重新传输。因此,尽管延迟可能会增加,但是视频应该可以正确播放。
……
关注读览天下微信,
100万篇深度好文,
等你来看……