你是否也曾疑惑,在数据链路层,封装成帧、透明传输与差错检测这三个基本问题究竟是如何被巧妙化解的呢?这些技术挑战的解决对于数据在链路上的可靠传输可是至关重要的哦!
想象一下,我们要寄一封信,总得把信纸装进信封,写上地址邮编吧?封装成帧就类似这个过程,就是给网络层传下来的分组加上帧头和帧尾,形成一个完整的数据帧。这样接收方才能知道一帧数据从哪里开始,到哪里结束。
常用的方法有哪些呢?
方法名称 | 具体做法 | 优点 | 小小不足 |
---|---|---|---|
字符计数法 | 在帧的开头用一个专门的字段来标明本帧的字节数。 | 实现简单,接收方一看就知道帧有多长。 | 如果计数字段出错,后面的帧都会受影响,不太可靠。 |
带填充的首尾界符法 | 用特定的帧定界符(比如SOH表示帧开始,EOT表示帧结束)来标记帧的边界。 | 即使某一帧出错,也不会影响后续帧的同步。 | 需要处理数据中可能出现的定界符,以免被误判。 |
违规编码法 | 利用物理层编码中某些“违规”的编码组合来作为帧的开始和结束标志。 | 非常高效,因为数据部分不会出现这些违规编码,天然避免了混淆。 | 只适用于特定的物理层编码方式,比如曼彻斯特编码。 |
现在最常用的还是带填充的首尾界符法,比如以太网就用特定的帧前同步码和帧开始定界符,再加上帧尾的CRC校验字段来构成一帧。
“透明”这个词听起来有点玄乎,其实在这里就是指不管所传数据是什么样的比特组合,都能在链路上准确传输,就好像这些数据对链路来说是“看不见”的,不会影响链路的正常工作。最常见的问题就是数据中出现了和帧定界符一样的比特组合,这时候接收方就会误以为一帧结束了,从而造成错误。
那怎么解决呢?核心思想就是“避免混淆”!
通过这些填充技术,不管原始数据是什么样子,都能被稳稳当当地传过去,阅读者理解起来是不是也觉得清晰多了?
数据在传输过程中,受到各种干扰,比特可能会出错,比如1变成0,0变成1。差错检测就是要发现这些错误,虽然不一定能修复,但能告诉接收方“这个帧有问题,不能用哦”。
常见的差错检测方法有:
有了差错检测,就能大大提高数据传输的准确性,避免接收方收到错误的数据而造成麻烦。
数据链路层就是通过这些巧妙的技术,一层一层地解决了封装成帧、透明传输和差错检测的挑战,为上层提供了可靠的数据传输服务。是不是感觉这些技术虽然听着专业,但背后的逻辑还是挺易懂的呀?