精华内容
下载资源
问答
  • IEEE 802.11数据帧有四种子类型,分别是IBSS,From AP,To AP,WDS。 地址字段在数据用法 功能 To DS From DS Address1(接收端) Address2(发送端) Address3 Address4 IBSS 0 0 DA SA BSSID 未使用 ...

    IEEE 802.11数据帧有四种子类型,分别是IBSS,From AP,To AP,WDS。

    地址字段在数据帧中的用法

    功能 To DS From DS Address1(接收端) Address2(发送端) Address3 Address4
    IBSS 0 0 DA SA BSSID 未使用
    To AP(基础结构型) 1 0 BSSID SA DA 未使用
    From AP(基础结构型) 0 1 DA BSSID SA 未使用
    WDS(无线分布式系统) 1 1 RA TA DA SA
    展开全文
  • @TOC 1.概述 Ethernet十分简单,只要为...802.11主要种类型。数据负责在工作站之间传输数据,它可能会因为所处网络环境不同而有所差异。控制通常与数据搭配那个,负责区域清空(area clear...

    1.概述

    Ethernet的成帧十分简单,只要为帧加入前导码(preamble),寻址信息以及在结尾加上校验码即可。相对而言,802.11的成帧比较复杂,因为无线媒介必须将有线网络所没有的帧类型以及各式管理功能纳入考虑。
    802.11帧主要有三种类型。数据帧负责在工作站之间传输数据,它可能会因为所处的网络环境不同而有所差异。控制帧通常与数据帧搭配使用,负责区域清空(area clearing),信道获取(channel acquisition)以及载波监听的维护(carrier-sensing maintenance),并于收到数据时予以肯定确认,借此提供工作站之间数据传送的可靠性。管理帧负责监督,主要用来加入或退出无线网络以及处理接入点之间关联的转移事宜。

    2.数据帧

    数据帧会将上层协议的数据置于帧主体(frame body)中加以传递。不同类型的数据帧可根据功能加以分类,包括基于竞争服务以及无竞争服务两种数据帧。

    2.1 Duration(持续时间)

    Duration(持续时间)字段用来记载网络分配矢量(Network Allocation Vector简称NAV)的值。访问媒介的时间限制由NAV指定。数据帧的Duration字段的设定必须依循以下规范:
    a.无竞争周期所传递的任何帧必须将Duration字段设定为32768。此规范适用于无竞争周期所传递的任何数据帧。
    b.目的地为广播或组播地址的帧(Address 1字段设定了组位)的持续时间为0。此类帧并非原子交换过程的一部分,接收端也不会加以确认,因此基于竞争的媒介访问可以在广播或组播数据帧结束后立即开始。NAV在帧交换过程中用来保护对传送媒介的访问。既然广播或组播帧之后不会有来自链路层的确认,因此没有必要为后续帧锁定媒介使用权。
    c.如果Frame Control字段中的More Fragments位为0,表示该帧已无其余片段。最后的帧片段只需要为本身的确认预定媒介使用权,之后就可以恢复基于竞争的访问了。Duration字段会被设定为传送一个短帧间间隔及片段响应所需要的时间。
    d.如果Frame Control字段的More Fragments位被设定为1,则表示其后还有帧片段。因此,Duration字段便会被设定为传送2个确认加上3个短帧间间隔及下一个帧片段所需要的时间。

    2.2 BSSID

    每个BSS都会被赋予一个BSSID,它是一个长度为48位的二进制标识符,用来识别不同的BSS。BSSID的主要优点是可作为过滤之用。虽然不同的802.11网络彼此之间可能重叠,但即使如此也不应该让互相重叠的网络受到彼此的链路层广播。
    在Infrastructure BSS(基础结构型基本服务集)中,BSSID就是创建该BSS的接入点上无线接口的MAC地址。而IBSS(独立基本服务集)则必须创建BSSID,才能产生网络。为了让所创建的地址尽量不重复,BSSID由46位随机产生的。其所产生的BSSID会将Universal/Local位设定为1,代表这是一个本地地址,至于Individual/Group位则会设定为0。两个不同的IBSS如果要产生相同的BSSID,那么它们所产生的46位随机数必须完全相同。
    有一个BSSID会被保留不用,就是所有位均被设定为1的BSSID,又称为广播型BSSID。使用广播型BSSID的帧可以不被MAC中任何的BSSID filter所过滤。BSSID的广播只有在移动式工作站送出Probe request(探查请求)以试图找出与哪些网络可以加入时才会被用到。Probe帧要能够探测现有的网络,就不能被BSSID filter过滤掉。Probe帧是唯一允许使用广播型BSSID的帧。

    2.3 寻址与DS位

    地址字段的编号与功能取决于设定了哪个DS(分布式系统)位,因此所使用的网络类型会间接影响到地址字段的用法。只有无线桥接器才会使用第四个地址字段。地址字段在数据帧中的用法如下:

    功能 ToDS FromDS Address1(接收端) Address2(发送端) Address3 Address4
    IBSS 0 0 DA SA BSSID 未使用
    TO AP(基础结构型) 1 0 BSSID SA DA 未使用
    From AP(基础结构型) 0 1 DA BSSID SA 未使用
    WDS(桥接器) 1 1 RA TA DA SA

    Address 1字段代表帧接收端的地址。在某些情况下,接收端即为目的地,但不总是这样。目的地是指负责处理帧中网络层封包的工作站,而接收端则是负责将无线电波解码为802.11帧的工作站。如果Address 1字段被设为广播或组播地址,则必须同时检查BSSID(基本服务集标识符)。工作站只会响应来自同一个基本服务集的广播或组播,至于来自其他不同BSS的则加以忽略。Address 2字段是发送端地址,用来确认信息。发送端不一定是来源地,来源地是指产生帧中网络层协议封包的工作站,而发送端则是负责将帧传送至无线链路。Address 3字段则是供接入点与分布式系统过滤之用,不过该字段的用法取决于所使用的网络类型。

    由于IBSS(独立基本服务集)并未使用接入点,因此不会涉及分布式系统。发送端即为帧的来源,而接收端即为帧的目的地。每个帧都会记载BSSID(基本服务集标识符),因此工作站可以检查广播与组播信息。只有隶属同一个BSS的工作站才会处理该广播或组播信息。在IBSS中,BSSID是由随机数产生器随机产生的。

    802.11对来源地与发送端以及目的地与接收端有明确的区别。将帧送至无线媒介的发送端不见得就是帧的产生者。目的地址与接收端地址同样有此区别。接收端可以只是中间目的地,而帧只有达到目的地,才会由上层的协议加以处理。

    以下是一个简单的网络结构,其中某个无线客户端通过802.11网络连接至服务器,客户端将帧传送给服务器:
    client(电脑)作为(SA/TA)–>AP(BSSID RA)–>DS(分布式系统)–>server(DA)
    如果帧的目的地位于分布式系统(DS),则客户端既是来源地也是发送端。至于无线帧的接收端则是接入点(AP),不过该接入点只是个中间目的地。当帧送达接入点时,该帧会经分布式系统转送给服务器。因此,分布式是接收端,而服务器才是最后的目的地。在基础结构型网络里,接入点会以其无线接口的地址创建响应的BSS,这就是为什么接收端地址(Address 1)会被设定为BSSID的原因。
    当服务器响应客户端时,帧会通过接入点被传送客户端:
    由于帧产生自服务器,所以服务器的MAC地址即为该帧的源地址(source address简称SA)。当帧通过接入点转送出去时,接入点将会以自己的无线接口作为发送端地址(transmitter address简称TA)。如同前一个例子,接入点的接口地址就是BSSID。帧最后会被送至客户端,此时客户端既是目的地也是接收端。

    在无线分布式系统(wireless distribution system简称WDS)中的用法。无线分布式系统有时也称为无线桥接器。两条有线网络通过扮演无线桥接器角色的基站彼此相连。从客户端送至服务器的帧会经过802.11 WDS。该无线帧的源地址与目的地地址依然对应到客户端与服务器的地址。不过,这些帧还是会区分无线媒介上帧的发送端与接收端。对于由客户端送至服务器的帧而言,发送端就是客户端这边的接入点,而接收端就是服务器这边的接入点。将来源地与传送端分开的好处是当服务器这边的接入点送出必要的802.11响应给对方的接入点时,不会干扰到有线链路层。

    2.4 数据帧的类型主题

    802.11具有数种不同类型的数据帧。要使用何种帧,取决于是属于基于竞争的还是无竞争的。基于效率上的考虑,无竞争帧中纳入其他功能。只要改变帧的子类型,无竞争周期中的数据帧可用来确认其他帧,如此便可省去帧间间隔以及一一确认所带来的负担。以下是常见的数据帧类型:

    2.4.1 Data(数据)

    子类型为Data的帧只有在基于竞争的访问周期才会被传送。这类简单的帧只有一个目的,即在工作站间传送帧主体。

    2.4.2 Null(空)

    Null帧是由MAC标头与FCS标尾所组成。在传统的Ethernet中,Null帧无非就是额外的负担。在802.11网络中,移动式工作站会利用Null帧来通知接入点改变省电状态。当工作站进入休眠状态时,接入点必须开始为之缓存帧。如果该移动式工作站没有数据要经分布式系统传送,也可以使用Null帧,同时将Frame Control字段的Power Management为设定为1。接入点不可能进入省电模式,因此不会传送Null帧。

    2.5 数据帧的封装

    数据帧的形式取决于网络的类型。帧究竟属于何种类型,完成取决于subtype(子类型)字段,而与其他字段是否出现在帧中无关。

    2.5.1 IBSS帧

    在IBSS中,当无线MAC收到一个帧时,首先会去检查BSSID,只有BSSID与工作站相同的帧才会交由上层协议处理。

    2.5.2 传送来自接入点(From AP)的帧

    在infrastructure(基础结构型)网络中,发送端地址即为接入点(AP)上无线接口的地址,同时也是BSSID。最后,该帧会记载帧的来源MAC地址。区别来源地与发送端之所以有必要,是因为802.11 MAC会将确认送到帧的发送端(即接入点),而较上层的协议将会回复帧的来源地。

    2.5.3 传送至接入点(To AP)的帧

    在infrastructure(基础结构型)网络中,移动式工作站传送给所连接的接入点的帧格式。接收端地址(RA)为BSSID(即接入点的MAC地址)。送至接入点的帧,其来源地/发送端是无线工作站的网络接口。接入点并未进行地址过滤动作,而是使用第三个地址DA将数据转送至位于分布式系统的适当位置。

    2.5.4 WDS中的帧

    当接入点被部署成无线桥接器(或者WDS)时会用到4个地址字段,WDS帧会使用第一个地址(RA),第二个地址(TA)。MAC层会使用这两个地址送出确认并控制流量,例如RTS,CTS以及ACK帧。另外两个地址字段(SA与DA)则是用来记载帧的源地址以及目的地地址,并且将与无线链路所使用的地址区分开来。

    2.5.5 经过加密的帧

    收到链路层安全协议保护的帧并不算新的帧类型。当帧经过加密处理后,Frame Control字段的Protected Frame位会被设定为1,至于Frame Body字段则是以加密标头开始,这取决于所使用的是何种协议。

    WIFI基础入门–802.11–成帧细节(控制帧)–4

    温馨提示:
    以上文章描述如有不清晰之处,欢迎在评论区评论,如有时间,会第一时间回复,谢谢!

    展开全文
  • Web动画形式 首先我们来了解一下Web哪些动画形式 1\. CSS3动画 Transform(变形) Transition(过渡) ... Animation(动画) ...以上各种动画形式都可以制作出一种类型的动画,那就是动画,也叫序列动...

    Web动画形式

    首先我们来了解一下Web有哪些动画形式

    1\. CSS3动画
        Transform(变形)
        Transition(过渡)
        Animation(动画)
    2\. JS动画(操作DOM、修改CSS属性值)
    3\. Canvas动画
    4\. SVG动画
    5\. 以Three.js为首的3D动画
    
    

    以上各种动画形式都可以制作出一种类型的动画,那就是帧动画,也叫序列帧动画,定格动画,逐帧动画等,这里我们统一用帧动画来表述。

    应用场景

    帧动画一般用来实现稍微复杂一点的动画效果,同时希望动画更细腻,设计师更自由的发挥。他可以定义到每一个时间刻度上的展现内容,我们一般用帧动画来做页面的Loading,小人物,小物体元素的简单动画。我们想象中的帧动画应该有以下几个特点:

    1. 可以自由控制播放、暂停和停止
    2. 可以控制播放次数,播放速度
    3. 可以添加交互,在播放完成后添加事件
    4. 浏览器兼容性好

    素材准备

    帧动画的素材一般是先由设计师在PS中的时间轴上设计好了,然后导出图片给前端人员,PS制作时间轴动画一般是用来制作稍微简单的动画,操作简单,方便。

    或者是由设计师在AE的时间轴进行设计,因为AE内置了更丰富的动作效果,比如转换,翻转之类的,AE可以帮助我们实现更复杂的效果,然后再导出图片给前端人员。

    这里帧动画素材的要求,每一帧的图片最好是偶数宽高,偶数张,最好周围能有一些留白。

    实现方案

    将目前想到的解决方案梳理如下图,同时我们将对每种方案进行详细介绍。

    一、GIF图

    我们可以将上面制作的帧动画导出成GIF图,GIF图会连续播放,无法暂停,它往往用来实现小细节动画,成本较低、使用方便。但其缺点也是很明显的:

    1. 画质上,gif 支持颜色少(最大256色)、Alpha 透明度支持差,图像锯齿毛边比较严重;
    2. 交互上,不能直接控制播放、暂停、播放次数,灵活性差;
    3. 性能上,gif 会引起页面周期性的绘画,性能较差。

    二、CSS3帧动画

    CSS3帧动画是我们今天需要重点介绍的方案,最核心的是利用CSS3中Animation动画,确切的说是使用animation-timing-function 的阶梯函数 steps(number_of_steps, direction) 来实现逐帧动画的连续播放。

    帧动画的实现原理是不断切换视觉内图片内容,利用视觉滞留生理现象来实现连续播放的动画效果,下面我们来介绍制作CSS3帧动画的几种方案。

    (1)连续切换动画图片地址src(不推荐)

    我们将图片放到元素的背景中(background-image),通过更改 background-image 的值实现帧的切换。但是这种方式会有以下几个缺点,所以该方案不推荐。

    • 多张图片会带来多个 HTTP 请求
    • 每张图片首次加载会造成图片切换时的闪烁
    • 不利于文件的管理

    (2)连续切换雪碧图位置(推荐)

    我们将所有的帧动画图片合并成一张雪碧图,通过改变 background-position 的值来实现动画帧切换。分两步进行:

    步骤一: 将动画帧合并为雪碧图,雪碧图的要求可以看上面素材准备,比如下面这张帧动画雪碧图,共20帧。

    [图片上传失败…(image-91f7b7-1556627487319)]

    步骤二: 使用steps阶梯函数切换雪碧图位置

    先看写法一:

    <div class="sprite"></div>
    
    .sprite {
        width: 300px;
        height: 300px;
        background-repeat: no-repeat;
        background-image: url(frame.png);
        animation: frame 333ms steps(1,end) both infinite;
    }
    @keyframes frame {
        0% {background-position: 0 0;}
        5% {background-position: -300px 0;}
        10% {background-position: -600px 0;}
        15% {background-position: -900px 0;}
        20% {background-position: -1200px 0;}
        25% {background-position: -1500px 0;}
        30% {background-position: -1800px 0;}
        35% {background-position: -2100px 0;}
        40% {background-position: -2400px 0;}
        45% {background-position: -2700px 0;}
        50% {background-position: -3000px 0;}
        55% {background-position: -3300px 0;}
        60% {background-position: -3600px 0;}
        65% {background-position: -3900px 0;}
        70% {background-position: -4200px 0;}
        75% {background-position: -4500px 0;}
        80% {background-position: -4800px 0;}
        85% {background-position: -5100px 0;}
        90% {background-position: -5400px 0;}
        95% {background-position: -5700px 0;}
        100% {background-position: -6000px 0;}
    }
    
    

    针对以上动画有疑问?

    问题一:既然都详细定义关键帧了,是不是可以不用steps函数了,直接定义linear变化不就好了吗?

    animation: frame 10s linear both infinite;

    如果我们定义成这样,动画是不会阶梯状,一步一步执行的,而是会连续的变化背景图位置,是移动的效果,而不是切换的效果,如下图:

    问题二:不是应该设置为20步吗,怎么变成了1?

    这里我们先来了解下animation-timing-function属性。

    CSS animation-timing-function属性定义CSS动画在每一动画周期中执行的节奏。对于关键帧动画来说,timing function作用于一个关键帧周期而非整个动画周期,即从关键帧开始开始,到关键帧结束结束。

    timing-function 作用于每两个关键帧之间,而不是整个动画。

    接着我们来了解下steps() 函数:

    • steps 函数指定了一个阶跃函数,它接受两个参数。
    • 第一个参数接受一个整数值,表示两个关键帧之间分几步完成。
    • 第二个参数有两个值< start > or < end >。默认值为< end > 。
    • step-start 等同于 step(1, start)。step-end 等同于 step(1, end)。

    综上我们可以知道,因为我们详细定义了一个关键帧周期,从开始到结束,每两个关键帧之间分 1 步展示完,也就是说0% ~ 5%之间变化一次,5% ~ 10%变化一次,所以我们这样写才能达到想要的效果。

    再看写法二:

    <div class="sprite"></div>
    
    .sprite {
        width: 300px;
        height: 300px;
        background-repeat: no-repeat;
        background-image: url(frame.png);
        animation: frame 333ms steps(20) both infinite;
    }
    @keyframes frame {
        0% {background-position: 0 0;}//可省略
        100% {background-position: -6000px 0;}
    }
    
    

    这里我们定义了关键帧的开始和结束,也就是定义了一个关键帧周期,但因为我们没有详细的定义每一帧的展示,所以我们要将0%~100%这个区间分成20步来阶段性展示。

    也可以换成关键字的写法,还可以只定义最后一帧,因为默认第一帧就是初始位置。

    @keyframes frame {
        from {background-position: 0 0;}//可省略
        to {background-position: -6000px 0;}
    }
    
    

    (3)连续移动雪碧图位置(移动端推荐)

    跟第二种基本一致,只是切换雪碧图的位置过程换成了transform:translate3d()来实现,不过要加多一层overflow: hidden;的容器包裹,这里我们以只定义初始和结束帧为例,使用transform可以开启GPU加速,提高机器渲染效果,还能有效解决移动端帧动画抖动的问题。

    <div class="sprite-wp">
        <div class="sprite"></div>
    </div>
    
    .sprite-wp {
        width: 300px;
        height: 300px;
        overflow: hidden;
    }
    .sprite {
        width: 6000px;
        height: 300px;
        will-change: transform;
        background: url(frame.png) no-repeat center;
        animation: frame 333ms steps(20) both infinite;
    }
    @keyframes frame {
    	0% {transform: translate3d(0,0,0);}
        100% {transform: translate3d(-6000px,0,0);}
    }
    
    

    三、JS帧动画

    (1)通过JS来控制img的src属性切换(不推荐)

    和上面CSS3帧动画里面切换元素background-image属性一样,会存在多个请求等问题,所以该方案我们不推荐,但是这是一种解决思路。

    (2)通过JS来控制Canvas图像绘制

    通过Canvas制作帧动画的原理是用drawImage方法将图片绘制到Canvas上,不断擦除和重绘就能得到我们想要的效果。

    <canvas id="canvas" width="300" height="300"></canvas>
    
    (function () {
        var timer = null,
            canvas = document.getElementById("canvas"),
            context = canvas.getContext('2d'),
            img = new Image(),
            width = 300,
            height = 300,
            k = 20,
            i = 0;
        img.src = "frame.png";
    
        function drawImg() {
            context.clearRect(0, 0, width, height);
            i++;
            if (i == k) {
                i = 0;
            }
            context.drawImage(img, i * width, 0, width, height, 0, 0, width, height);
            window.requestAnimationFrame(drawImg);
        }
        img.onload = function () {
            window.requestAnimationFrame(drawImg);
        }
    })();
    
    

    上面是通过改变裁剪图像的X坐标位置来实现动画效果的,也可以通过改变画布上放置图像的坐标位置实现,如下: context.drawImage(img, 0, 0, width*k, height,-i*width,0,width*k,height);

    (3)通过JS来控制CSS属性值变化

    这种方式和前面CSS3帧动画一样,有三种方式,一种是通过JS切换元素背景图片地址background-image,一种是通过JS切换元素背景图片定位background-position,最后一种是通过JS移动元素transform:translate3d(),第一种不做介绍,因为同样会存在多个请求等问题,不推荐使用,这里实现后面两种。

    • 切换元素背景图片位置 background-position
    .sprite {
        width: 300px;
        height: 300px;
        background: url(frame.png) no-repeat 0 0;
    }
    
    <div class="sprite" id="sprite"></div>
    
    (function(){
        var sprite = document.getElementById("sprite"),
    	    picWidth = 300,
    	    k = 20,
    	    i = 0,
    	    timer = null;
        // 重置背景图片位置
        sprite.style = "background-position: 0 0";
        // 改变背景图位置
        function changePosition(){
            sprite.style = "background-position: "+(-picWidth*i)+"px 0";
            i++;
            if(i == k){
                i = 0;
            }
            window.requestAnimationFrame(changePosition);
        }
        window.requestAnimationFrame(changePosition);
    })();
    
    
    • 移动元素背景图片位置 transform:translate3d()
    .sprite-wp {
       width: 300px;
        height: 300px;
        overflow: hidden;
    }
    .sprite {
        width: 6000px;
        height: 300px;
        will-change: transform;
        background: url(frame.png) no-repeat center;
    }
    
    <div class="sprite-wp">
        <div class="sprite" id="sprite"></div>
    </div>
    
    (function () {
        var sprite = document.getElementById("sprite"),
            picWidth = 300,
            k = 20,
            i = 0,
            timer = null;
        // 重置背景图片位置
        sprite.style = "transform: translate3d(0,0,0)";
        // 改变背景图移动
        function changePosition() {
            sprite.style = "transform: translate3d(" + (-picWidth * i) + "px,0,0)";
            i++;
            if (i == k) {
                i = 0;
            }
            window.requestAnimationFrame(changePosition);
        }
        window.requestAnimationFrame(changePosition);
    })();
    
    

    方案总结

    总结以上几种方案,我们可以看到GIF图有一定的优点同时缺点和局限性也比较明显,所以这种方案看情况选择使用。

    其他实现方案的性能如何呢,我们来比较一下,如果测试结果出现偏差,可能与测试环境变化有关。

    测试环境:

    系统:Windows 10 专业版
    处理器:Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz 3.41GHz
    RAM: 8.00GB
    浏览器:Chrome 72.0
    
    

    CSS transform:translate3d() 方案性能数据

    如上图,我们通过Chrome浏览器的各种工具,查看了每种方案的 FPS、CPU占用率、GPU占用、Scripting、Rendering、Painting、内存的使用情况,得到以下数据:

    性能-方案 cssbackground-position csstransform:translate3d() JS Canvas JSbackground-position JStransform:translate3d()
    FPS 60 51 60 60 60
    CPU 5%-6.2% 0.3%-1% 7%-8% 6%-8% 6%-8%
    GPU 3.8MB 4-10MB 0 3.8MB 4-11MB
    Scripting 0 0 2.51% 2.61% 3.18%
    Rendering 1.17% 0.141% 0.84% 1.65% 2.71%
    Painting 1.58% 0.01% 1.63% 1.75% 1.05%
    内存 20112K 21120K 21588K 20756K 21576K

    通过分析以上数据我们可以得出以下几点:

    1. 除了css transform:translate3d() 方案,其他方案的FPS都能达到60FPS的流畅程度,但该方案的FPS也不是很低。
    2. CPU占用率最低的方案是 css transform:translate3d() 方案。
    3. GPU占用最低的方案是 JS Canvas 绘制方案。
    4. CSS 方案没有脚本开销
    5. Rendering 最少的是 css transform:translate3d() 方案。
    6. Painting 最少的是 css transform:translate3d() 方案。
    7. 各方案内存占用区别不大。

    结论:我们看到,在7个指标中,css transform:translate3d() 方案将其中的4个指标做到了最低,从这点看,我们完全有理由选择这种方案来实现CSS帧动画。

    至于其他方案的绝对比较暂时没法给出结论,看具体情况来选择,也看开发者对哪个性能指标的追求。

    延伸来看我们的Web动画,每种形式的动画都有其各自的有点,比如大量的粒子效果用Canvas绘制方案肯定要比DOM+CSS实现要好的,大量的CSS属性值变换,使用 transform 实现性能是要更好的。

    注意事项

    素材:动画图片宽高最好是偶数,总帧数最好是偶数,图片拼接处最好有一定的留白。

    适配:移动端适配最好不用rem,因为rem的计算会造成小数四舍五入,造成一定的抖动效果,建议直接用px作为单位,同时辅助以scale(zoom)媒体查询进行适配。如果使用rem适配,试试使用transform的方案,抖动问题可以得到优化解决。

    tips:使用 will-change 可以在元素属性真正发生变化之前提前做好对应准备。

    总结

    本文我们主要梳理了目前实现帧动画的几种方案,同时对各种方案进行效果实现,优劣讨论,性能对比,同时简单介绍了帧动画实现过程的注意事项,最后我们得出结论,css transform:translate3d() 方案在实现和性能上都明显优于其他方案。

    这里推荐一下我的前端学习交流扣qun:731771211 ,里面都是学习前端的,如果你想制作酷炫的网页,想学习编程。自己整理了一份2019最全面前端学习资料,从最基础的HTML+CSS+JS【炫酷特效,游戏,插件封装,设计模式】到移动端HTML5的项目实战的学习资料都有整理,送给每一位前端小伙伴,每天分享技术

    点击:加入

    展开全文
  • 以太网MAC(二)

    2020-08-02 19:09:36
    常用以太网MAC格式标准 :DIX Ethernet II标准,IEEE 802.3 标准。 Ethernet II和IEEE802.3的帧格式比较类似,主要不同点在于前者定义2字节为包类型,而后者定义2字节为长度;所幸是,后者...

    常用的以太网MAC帧格式有两种标准 :DIX Ethernet II标准,IEEE 的 802.3 标准。

    Ethernet II和IEEE802.3的帧格式比较类似,主要的不同点在于前者定义的2字节为包类型,而后者定义的2字节为的长度;所幸的是,后者定义的有效长度值与前者定义的有效类型值无一相同,这样就容易区分两种帧格式了。如果值大于 1500(0x05DC),说明是以太网类型字段,Ethernet II帧格式。如果值小于等于1500,说明是长度字段,IEEE802.3 帧格式。因此类型字段值最小的是 0x0600。而长度字段最大为 1500。

    MAC层要求定界字符之后的内容要在64字节到1518个字节之间,其中包括14字节的目标和源MAC,4字节的CRC32值。并且报文帧之间的传递间隔要大于9.6us。
    在这里插入图片描述
    最常用的 MAC 帧是以太网V2的格式:
    在这里插入图片描述
    IEEE 的 802.3 标准
    在这里插入图片描述
    类型字段 (2个字节): 用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议;

    数据字段 (46-1500): 正式名称是MAC客户数据字段最小长度64 字节-18字节的首部和尾部 = 数据字段的最小长度;

    FCS字段 (4 字节):当数据字段的长度小于 46 字节时,应在数据字段的后面加入整数字节的填充字段,以保证以太网的MAC帧长不小于64 字节;

    前同步码(8字节):在帧的前面插入的 8 字节中的第一个字段共 7 个字节,是前同步码,用来迅速实现 MAC帧的比特同步。

    帧开始定界符(1字节):第二个字段是帧开始定界符,表示后面的信息就是MAC帧。

    原文链接:https://blog.csdn.net/hhpingyear/article/details/80216680?utm_medium=distribute.pc_relevant_right.none-task-blog-OPENSEARCH-2.channel_param_right&depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-OPENSEARCH-2.channel_param_right

    展开全文
  • Android之动画与补间动画使用

    千次阅读 2015-08-14 15:23:34
    Android提供了3种类型的动画:   补间动画:补间动画可以应用于View,让你可以定义一系列关于位置、大小、旋转和透明度改变,从而让   View内容动起来。   逐动画:传统基于单元格动画,每一...
  • 今天公司搞技能竞赛,考到5G NR结构,一脸蒙那,还是脚踏实地,认真学了一把,下面是翻译自英文原文,各种词汇...在3GPP38.211中,关于NR子载波间隔类型的总结。具体子载波间隔类型如下图所示:图1.1 NR支持...
  • 关于以太网中标签解释

    千次阅读 2013-04-16 21:27:37
    以太帧有很多种类型。不同类型的帧具有不同格式和MTU值。但在同种物理媒体上都可同时存在。 以太网第二版[note 3] 或者称之为Ethernet II ,DIX,是最常见的帧类型。并通常直接被IP协议使用。Novell非...
  • 文章目录1.封装成定界、同步2.组帧方法(1)字符计数法(2)字符填充首尾定界法(3)零比特...发送方在封装时,数据可能图中两种类型,传输数据时可能会出现图中所述错误 那么我们如何去解...
  • 本文主要介绍了CAN总线远程和错误,首先我们先来了解了解一下通讯时使用的帧类型有哪些,他们作用又是什么,具体跟随小编一起来了解一下吧。 通讯时使用下面5个类型的帧 1、数据 2、遥控 3、错误...
  • Android提供了3种类型的动画: 补间动画:补间动画能够应用于View,让你能够定义一系列关于位置、大小、旋转和透明度改变。从而让 View内容动起来。 逐动画:传统基于单元格动画,每一...
  • 802.11--分类

    2020-09-26 17:56:13
    802.11将帧的类型分为3种,分别为:管理帧、控制帧、数据帧,这三种类型的帧相互搭配使用,共同完成802.11无线网络的接入、数据传输、退出等功能。  2. 不同类型的帧在802.11帧中通过帧控制字段中的Type字段来区分...
  • 本文针对该问题给出了逐次比较、基于FIFO队列和基于状态机的3种帧同步方法。通过测试、分析和比较得出,基于有限状态机方法是嵌入式系统串口通信中很有效的帧同步方法,同时也是一种很不错串口通信程序设计结构...
  • VLAN格式

    万次阅读 2015-09-29 15:15:04
    这四个字节的802.1Q标签头包含了2个字节的标签协议标识(TPID)和2个字节的标签控制信息(TCI)。   TPID(Tag ProtocolIdentifier)是IEEE定义的新的类型,表明这是...Priority:这3 位指明帧的优先级。一共8优先
  • 02以太网格式

    2020-07-12 10:02:32
    以太网(RFC 894)格式 以太网的帧格式如下所示: 其中源地址和目的地址是指网卡硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化。...最大值1500称为以太网最大传输单元(MTU),不同网络类型有
  • 以太网MAC格式

    万次阅读 2018-05-06 18:48:10
     常用以太网MAC格式标准 :DIX Ethernet II标准,IEEE 802.3 标准。 Ethernet II和IEEE802.3的帧格式比较类似,主要不同点在于前者定义2字节为包类型,而后者定义2字节...
  • 上一章节我们介绍了VLAN的原理,交换机是如何转发带VLAN的数据帧的?一文带你搞懂VLAN技术原理。知道了VLAN可以隔离二层广播域,属于不同VLAN的用户之间不能进行二层通信。但是在实际应用中往往要求实现不同VLAN...
  • 我们都知道在交换机中划分vlan时,使用到了这三模式,一般来说access、trunk使用比较多,而hybrid类型仅仅H3C交换机上独有。在了解三链路类型之前,我们要知道标签(tag),这三端口模式其实就是围绕着打和...
  • LTE TDD特殊子

    万次阅读 2014-12-05 20:31:44
    TD-LTE特殊子帧Dwpts:gap:Uppts的配比目前一共9,配置0到配置8,具体的定义在3GPP TS36.211 表4.2.1里面。  LTE TDD中,帧的长度是10s,分成10个长度为1s的子帧。上行和下行的数据在同一个帧内不同的子帧上...
  • 802.11--MAC头部

    2020-09-27 20:15:08
    一、概述  802.11由三个基本部分组成:  1. MAC头部:包括控制(Frame Control)、持续时间、地址信息、序列号等,不同类型的帧... 本字段共占2字节(16bits),根据不同类型的帧不一样形式,主要是两:一
  • 以太网浅析!

    千次阅读 2014-04-03 19:07:21
    (一)首先需要明白任何上层报文,都需要经过发送方层层封装,最后在物理层一比特流方式发送出去,封装过程实际就是加包头过程,当然接收方也需要层层...以太网主要:以太网V2类型和802.3类型。以太
  • Ethernet II 格式

    2010-12-29 14:54:31
    在每格式的以太网帧的开始处都64比特(8字节)的前导字符,如图3所示。其中,前7个字节称为前同步码(Preamble),内容是16进制数0xAA,最后1字节为帧起始标志符0xAB,它标识着以太网帧的开始。前导字符的作用是...
  • 交换机以太网端口链路类型: 1、Access用户模式; 2、Trunk链路干道模式; 3、Hybrid跟Trunk很类似但比trunk高级; (1)、Access类型的端口: 只允许默认vlan以太网,也就是说只能属于一个vlan...
  • android 动画类型

    2015-10-09 09:14:10
    帧动画 Frame 一帧一帧的   2.补间动画 Tween 慢慢过渡,设置初值和末值,并用插值器来控制过渡  3.属性动画 ObjectAnimation ValueAnimation 控制属性来实现动画。 属性动画是3.0以后加入的动画。三...
  • VLAN端口类型

    2020-11-23 10:19:28
    根据对VLAN帧的识别情况,交换机端口的类型(模式)共分如下三: 1.Access端口 2.Trunk端口 3.Hybrid端口 Access端口 Access端口主要用于接入终端设备,如PC机、服务器、打印服务器等。 该模式的端口只能属于一个...
  • 一 端口类型1 ,Access用户模式2 ,Trunk链路模式3 ,Hybrid模式(跟Trunk很类似但比trunk高级)二 端口介绍2.1 ,Access类型端口:只允许默认vlan以太网,也就是说只能属于一个vlan,Access端口在收到以太网...
  • andrroid 动画类型

    2017-12-01 09:44:42
    1.帧动画 Frame 一帧一帧的   2.补间动画 Tween 慢慢过渡,设置初值和末值,并用插值器来控制过渡  3.属性动画 ObjectAnimation ValueAnimation 控制属性来实现动画。 属性动画是3.0以后加入的...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 278
精华内容 111
关键字:

帧的类型有3种