• 3.2 封装成帧


    封装成帧是指数据链路成把上层丢下来的加帧头和帧尾。

    帧头和帧尾含有重要的信息。作用之一就是帧定界

    思考这样的一个问题:我们发送方发到接收方了,那接收方如何从一大堆0101比特流中知道一个帧并且提取出来?

    实际上,帧头和帧尾带有醒目的标志,各占一个字节。我们看下面点对点的传输

     

    需要说明的是,并不是每一种帧都包含标志。

    比如以太网V2的MAC帧格式

    那么接收方在这种网络下又是如何提取出帧的呢?

    实际上我们在概述的时候讲过,物理层看网络是什么,如果是以太网,就加上8字节的前导码。前导码中的前7个字节为前同步码,作用是使接收方的时钟同步。之后的一字节为帧开始定界符。表明其后面紧跟着的就是MAC帧。

    另外啊:以太网还规定了帧间间隔时间为96比特的发送时间。因此MAC帧并不需要帧结束定界符。

     

    透明传输是指数据链路层对上层交付的数据没有任何限制,就好像数据链路层不存在一样。

    我们的帧标志是一个数值,如果我们网络层传到数据链路层刚好含有相同的数值,那接收方还能收到正确的帧吗?

    • 不能

    那么数据链路层是如何解决这个问题的呢?网络层传来的时候,他加了帧头帧尾扫描一遍标志,如何出现相同的那就加上一个ESC标志转义字符(1个字节,10进制值为27),告诉我们的接收方跳过扫描这玩意。这是数据不是定界符。

    那再来思考这样一种情况,上层传下来的即包含转移字符,又包含和定界符相同的数字。这个又该怎么处理呢?

    • 也是相同的处理方法,还是加转义字符。

    上面我们将的都是面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输。

    面向比特的物理链路使用比特填充的方法实现透明传输。

    为了简单起见,在帧首部和尾部中,仅给出了帧定界标志。而未给出其他控制字段。

    现在帧的数据部分出现两个和标志一样的,那我们该怎么处理呢?

    在发送前可以采用0比特填充法对数据部分进行扫描,每5个连续的比特1后面就插入一个比特0。这样就确保了帧定界的唯一性。

     

    最后还要提醒大家。为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。

    但是考虑到差错控制等因素,数据链路层的协议也规定了帧的数据部分的长度上限。最大传送单元MTU

     

  • 相关阅读:
    【实验吧】藏在图片中的秘密
    pwntools各使用模块简介
    【笔记】shellcode相关整理
    【pwnable】asm之write up
    【实验吧】转瞬即逝write up
    利用wireshark任意获取qq好友IP实施精准定位
    【实验吧】逆向1000
    【实验吧】逆向rev50
    pwnable.kr brainfuck之write up
    JavaScript获取后台C#变量以及调用后台方法
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/15399708.html
Copyright © 2020-2023  润新知