据我所知,
数据链路层
和
运输层
都许诺了实现“差错控制”,那他们之间有什么区别呢?重复了吗?相信我举个例子之后,你就明了了。
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怎么没有发?在给老子发一遍“ 。
呵呵,原创。
参看:
参看:
摘自:计算机网络-谢希仁
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怎么没有发?在给老子发一遍“ 。
呵呵,原创。
参看:
参看:
摘自:计算机网络-谢希仁