可靠传输机制与无差错接受的区别
在数据链路层如果仅仅使用循环冗余码检验差错检测技术,只能做到对帧的无差错接受,即 “凡是接收端数据链路层接受的帧,都能以非常接近 1 的概率认为这些帧在传输过程中没有产生差错”。
注意:现在并没有要求数据链路层向网络层提供“可靠传输”的服务。所谓“可靠传输”,就是数据链路层的发送端发送什么,接收端就接受什么。传输差错可以分为两大类,一类就是比特差错(可以通过CRC来检错),另一类传输差错更复杂,这就是收到的帧并没有出现比特差错,但是出现了 帧丢失(例如发送 1,2,3,收到 1,3)、帧重复(例如发送 1,2,3 ,收到 1,2,2,3)、帧失序(例如发送 1,2,3,收到1,3,2)。这三种情况都属于出现传输差错,但都不是这些帧里有比特差错。
帧丢失比较容易理解,但是帧重复、帧失序的情况比较复杂。
总而言之“无比特差错”和“无传输差错”并不是同样的概念,在数据链路层使用 CRC 检验只能实现无比特差错的传呼是,但这并不是可靠传输。
也许会有人提出:既然会丢失那就是让接收端不管收到还是没收到都给回复,即确认。如果没有接收到回复就再发一次,直到对方确认。对于帧失序只要给发的帧的编号,等到所有帧均接收到再排序。以上说的都是对的,但为什么不采用以上方法?原因有二:1. 以前在数据链路层使用这种方式是因为以前的通信质量太差了,所以确定和重传机制会起到很好的效果,但是如今的通信质量已经大大提高,由通信链路质量不好引起的差错的概率大大降低,再使用这种机制的代价太大,不合算。2. 即时数据链路层能够实现无差错的传输,端到端的传输也可能出现差错,这样得不偿失,还不如把数据链路层做的简单一点,可靠的传输由上层协议来完成。为了更清楚数据链路层的可靠传输移到高层的原因,我们可以先看一下网络层的一个知识。
互联网使用的 IP 是无连接的,因此其传输时不可靠的。这样容易使得人们感到互联网很不可靠,那么为什么当初不把互联网的传输设计成为可靠的?
答:这个问题很重要。打个比方:邮局寄送的平信很像无连接的 IP 数据报。每封平信都可能走不同的传送路径,因此平信也不保证不丢失。当发现收信人没有收到寄出的平信时,找邮局索赔时没有用的,邮局会答复:平信不保证不丢失,如果担心丢失,请您寄挂号信。但是大家并不会将所有信件都是用挂号信的方式基础,这是因为丢失平信的概率不大,况且挂号信的成本较高。总之,尽管寄平信可能会丢失,但是绝大多数信是平信,因为平信方便,实惠。
在我们生活中,传统的电信网的最主要的用途之一就是进行电话通信,普通的电话机很简单,只有电话功能,电信公司就不得不把电信网设计的非常好,进而保证用户通话时质量。但是电信公司却付出了很大的代价,例如使用昂贵的程控交换机和网管系统。
当时,在数据传输的过程中,对于哪部分应该负责数据传输的可靠性,工程师们有两个意见 :其一,主张像电信网络一样由网络负责数据传输的可靠性;其二,主张用户的主机负责数据传输的可靠性。第二种思路更容易实现,因为具有智能的主机使得计算机网络和电信网络有两个重要的区别。