需要字节填充 在数据链路层的可变大小帧中,我们需要定义一种将一帧与下一帧分离的方法。字节填充用于完成任务。在里面 字节填充 在帧的开头和结尾添加8位标志(“F”),从而区分一帧和下一帧。因此,每次遇到标志序列(“F”)时,它都表示帧的开始或结束。然而,如果旗标图案(“F”)出现在帧本身携带的数据中,这种巧妙的方案会产生差异。字节填充在这里起到了解救作用,只要在帧所承载的数据中出现字节填充,就在标记模式之前用额外的8位转义序列(“E”)填充原始数据。然后,接收器必须对转义序列进行去填充,以获得原始数据。 此时可能出现的一个简单问题是,如果转义序列(“E”)构成要发送的数据的一部分,该怎么办!这种情况的处理方式与上述完全相同,即在构成数据一部分的转义序列之前,向原始数据添加额外的8位转义序列(“e”)。 在面向字符的协议中,要携带的数据是8位字符,字节填充用于处理上述问题。 为了使事情更简单,我们只考虑发送数据中的三种字节序列,如下: F :标志序列 E :转义序列 D :任何其他数据序列 例如:
At Sender SideEnter the Message to be Sent : DDEDFFDEThe data being sent (with byte stuffed) is : FDDEEDEFEFDEEFSending Message....Thanks for the Feedback Server!!At Receiver SideMessage Received...Successfully!!!The Stuffed Message is : FDDEEDEFEFDEEFThe Destuffed Message is : DDEDFFDEMessaging is over.....EXITING
从上面的例子中,我们可以看到原始数据是如何在接收端恢复的。 方法 在发送方(客户端)
- 发送端的每个帧的数据首先在每个帧的开始和结束处填充8位标志序列(“F”)。
- 接下来,扫描数据,查看是否有任何类似的标志序列(“F”)构成其一部分。如果是,则在每个这样的标志序列之前,填充一个额外的转义序列(“E”)。
- 现在,如果发现任何类似的转义序列(“E”)构成要发送的数据的一部分,那么在每个此类转义序列出现之前,会填充一个额外的转义序列(“E”)。
- 最后,这些填充数据由发送方发送。
- 接收器跳过接收到的数据的第一个字节和最后一个字节,因为它们仅分别用于发送一帧的开始和结束的信号,并且不携带任何有用的数据。
- 从wards上的下一个字节开始扫描数据,如果连续发现两个转义序列(“E”),则第一个转义序列被取消填充。类似地,如果一个转义序列后面跟着一个标志序列(’F’),则前者被取消填充。
- 这种策略有助于接收器准确地恢复实际发送的数据。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END