问题 问答题

除了差错检测外,面向字符的数据链路层协议还必须解决哪些特殊的问题

答案

参考答案:最主要的就是要解决帧定界和透明传输的问题。
帧定界就是要使接收端能够知道一帧的开始和结束是在什么地方。面向字符的数据传输就是所传输的数据全都是一个个的字符,例如ASCII字符。因此,在每一帧的开始和结束的地方,必须要有一个特殊的字符来作为标志,如下图所示。
[*]
字符SOH代表Start Of Header(首部开始),而EOT代表End Of Transmission(传输结束)。请注意,SOH和EOT都是ASCII码中的控制字符。sOH的十六进制编码是01,而EOT的十六进制编码是04。不要误认为SOH是“S”“O”“H”三个字符,也不要误认为EOT是“E”“O”“T”三个字符。
解决了帧定界后,在接收端就可以确定一个帧的开始和结束。剩下的问题就是透明传输的问题。
透明传输实际上就是随便什么字符都可以传输。但设想我们在帧中传送的字符出现了一个控制字符“EOT”。那么接收端收到这样的数据后,就会将原来的SOH和数据中的“EOT”错误地解释为一个帧,但对后面剩下的字符根本就无法解释(见下图)。
[*]
像这样的传输显然就不是“透明传输”,因为当遇到数据中的字符“EOT”就传不过去了,它被接收端解释为控制字符。实际上此处的字符“EOT”并非控制字符而是一般数据。
为了解决透明传输问题,就必须设法将数据中可能出现的控制字符“SOH”和“EOT”在接收端不解释为控制字符。方法是:在数据中出现字符“SOH”或“EOT”时就将其转换为另一个字符,而这个字符是不会被错误解释的。但所有字符都有可能在数据中出现。于是就想出这样的办法:将数据中出现的字符“SOH”转换为“ESC”“x”这样两个字符,将数据中出现的字符“EOT”转换为“ESC”“y”这样两个字符。而当数据中出现了控制字符“ESC”时,就将其转换为“ESC”“z”这样两个字符。这种转换方法就能够在接收端正确地还原为原来的数据。“ESC”是转义符,它的十六进制编码是1B。
下图表示在数据中出现了四个控制字符“ESC”“EOT”“ESC”“SOH”。按以上规则转换后的数据如下图所示。
[*]
可以很容易地看出,在接收端只要按照以上转换规则进行相反的转换,就能够还原出原来的数据(例如遇到“ESC”“z”就还原为“ESC”)。
以上就是实现透明传输的原理。

单项选择题
问答题 简答题