查看原文
其他

数据链路层、传输层的可靠传输机制有本质区别吗?

车小胖谈网络 车小胖谈网络 2023-03-21

01

一个师傅带出的两个徒弟

有本质区别,如果非要说区别,前者覆盖的范围小于后者的覆盖范围。前者覆盖范围位于一条链路两端节点之间,后者是源节点与目标节点之间。

无论链路层、传输层、应用层实现可靠传输的机制都是一样的,即对传输的数据进行编号,每一个编号的数据都要在超时时间内收到接收方的确认。否则发送方会超时重传,直到到达重传的上限而放弃。

02

链路层内心OS

链路层放弃数据,是直接把数据扔了,用户感受不到数据被扔。链路层只是尽自己最大可能,通过多重传几次以应对链路质量降级引起的丢包,重传间隔在毫秒级。通常整个重传时间总和在几十到几百毫秒之间。链路层的内心OS是这样的:即使数据被扔了,高层会继续重传的,所以扔了就扔了。


03

传输层内心OS

传输层放弃数据,也是把数据扔了,用户会感受到,因为用户会收到连接断开的提示。传输层的重传间隔远远高于链路层的间隔。之所以这样设计,传输层内心OS是这样的:先让底层多尝试重传几次,如果还不行(没有恢复),老夫再重传也不迟。

通常基于TCP的应用层是不会重传数据的,应用层重传数据的一般是基于UDP的,重传原理与内心OS与TCP是一样的,即依赖于底层多努力修复,实在修复不了,再撸袖子上场。

04

为何传输层重传间隔 > 链路层重传间隔?

为何传输层的重传间隔要大于链路层,而不是相反呢?既然这么问,那先来假设传输层重传间隔 <链路层重传间隔,会发生什么?

既然TCP开始重传了,大概率数据丢了,而且大概率是在链路层丢了。可是皇帝(链路层)不急太监(传输层)急,链路层还没有来得及重传,传输层的重传数据又进入链路层的发送队列。其实链路层的重传队列里有需要重传的数据,相当于有一份数据的多份COPY。但是对于链路层来说,它不知道这些数据是一份数据的多份COPY,每份数据都会传输。这对于本来链路质量不佳的网络更是加重了重传的负担,给网络添堵。这些多份COPY最后只有到达目的主机才能被传输层TCP发现并最终丢弃,这就是资源浪费。
而传输层重传间隔 > 链路层重传时间总和,可以有效降低一份数据的多份COPY被链路层传输,避免网络资源的浪费。
最后,本文的链路层默认是无线的链路层802.11,而不是以太网的链路层802.3,以太网的链路层是不可靠的,不会对数据进行重传,每份数据只传输一次,游戏就结束了,数据的重传依赖于TCP或者应用层。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存