据我所知,
数据链路层
和
运输层
都许诺了实现“差错控制”,那他们之间有什么区别呢?重复了吗?相信我举个例子之后,你就明了了。
1.条件
要传送如下数据:
数据a:1000
数据b:1100
数据c:1110
传送情况:
发送端S
发送: 1000 1100 1110
接受端R
接收: 1010 [未收到] 1110
2.数据链路层的“差错控制”
此时数据链路层的反应是这样的:
(1) 对于
发送端S
发送的“数据a 1000 ”,
接受端R
接收到的却是“1010”,显然,左数第三位的0由于某种原因变为1了,晕,太可怕了吧,好在数据链路层的差错控制可以发现这个(具体参看
数据链路层
),所以我们得知接受的数据a是错误的,扔掉即可(猜测)。
(2) 对于
发送端S
发送的“数据b 1100 ”,
接受端R
未收到任何数据,
数据链路层的“差错控制”
在此也
无能为力了
。
(3) 对于
发送端S
发送的“数据c 1110”,
接受端R
接收到“1110”,经
数据链路层的“差错控制”方法
-CRC检验,发现无误,正常接受。
由此可见, 仅用循环冗余检验 CRC 差错检测技术
只能做到无差错接受
(accept)。即“凡是接收端数据链路层接受的帧
都是正确的
”。
3.运输层的“差错控制”
先啰嗦一句,数据链路层之上是网络层,在之上是运输层。所以,传送的数据是想经过数据链路层处理后在给运输层的,即运输层收到的信号绝不存在”0变为1,1变为0的情况“(这正是数据链路层的差错控制所做的)。现在,在让我们看看运输层的反应吧。
(1) 对于
发送端S
发送的“数据a 1000 ”,由于数据链路层
发现
该数据有误,所以就把它仍丢了。这对运输层而言,就是未收到,所以要求
发送端S
重传……
。
(2) 对于
发送端S
发送的“数据b 1100 ”,运输层仍未收到,所以要求
发送端S
重传……
。
(3) 对于
发送端S
发送的“数据c 1110”,经数据链路层处理后交与运输层,运输层先
发送端S
返回
确认帧
,表示已经收到。
4.总结
对于数据链路层而言,只保证接受到的数据没问题,至于中间丢失的数据压根不管。而运输层则对中途丢失的数据也做管理,它会通知发送端说:
“数据b怎么没有发?在给老子发一遍“
。
呵呵,原创。
参看:
参看: