精华内容
下载资源
问答
  • 数据链路层协议

    千次阅读 2016-08-24 19:42:25
    数据链路层协议主要来介绍一下ARP协议和RARP协议 1. ARP协议,工作在网络层的设备如路由器可以通过识别数据包发送和接受的IP地址来判断数据发送的原主机和目标主机,数据包在实际的传输过程中在网络链路层的传输是...

    数据链路层协议主要来介绍一下ARP协议和RARP协议

    1. ARP协议,工作在网络层的设备如路由器可以通过识别数据包发送和接受的IP地址来判断数据发送的原主机和目标主机,数据包在实际的传输过程中在网络链路层的传输是以数据帧的形式来传输的,数据帧在链路层的帧头中包含的是设备的物理地址,即MAC地址,帧头中包含了源主机和目标主机的MAC地址。主机和交换机等设备是通过MAC地址来进行源主机和目标主机之间的通信与识别,而路由器是通过IP地址来进行源主机与目标主机的识别。为了识别同一台主机的IP地址和MAC地址就必需在IP地址和MAC地址之间进行转换,地址解析协议ARP协议就可以实现主机IP地址与MAC地址之间的映射。

    a) 先来说说这个MAC地址,MAC地址就是一个网络设备在出厂的时候被设定好的一个具有全球唯一性的地址,可以作为一个主机或者网络设备的全球标识。前面说过,每个数据帧的前面都应该有源主机和目标主机的MAC地址,如果目标主机的MAC地址未知的话,就需要通过ARP协议来获取。ARP协议是通过IP地址来获取物理地址(MAC)的一个TCP/IP协议。对前面的话来打一个比方吧,这个IP地址就好比是个经纬度,我一开始知道我想要去的地方的经纬度,假设我要去东经36.80度,北纬117.99度所指的地方,好了我现在通过这样的一个协议把这个经纬度转换成了山东淄博山东理工大学这个地址,中间的转换就需要这个协议,假设过了1000年之后,山东理工大学搬迁了,原来的地方换成了人民公园,经纬度是没有变的,但是东西却变成了人民公园,经纬度就相当于IP地址,经纬度所指向的那个地方就是MAC地址。

    b) MAC地址的获取流程,首先在你的电脑里面有一个ARP缓存(windows可以使用arp -a查看),现在ARP缓存中查找,如果没找到的话,然后就会广播一个ARP request数据包,这个数据包只有那个目标IP所指向的主机才会回应,其他的主机收到这个数据包看到不是自己的IP那么它就会将其丢弃,那个与之匹配的主机响应一个ARP reply给源主机,并告诉他自己的MAC地址,这个过程完成之后,这个MAC地址也被记录进入ARP缓存,下一次可以直接从这个缓存中调用。

    c) ARP协议基于网络中的各个主机都是互相信任的基础上的,网络中的主机可以自由发送ARP应答消息,而且源主机并不会检测报文的真实性,然后就将其记录进入ARP缓存

    d) 对于不在同一个网络中的计算机,ARP无法解析到远程网络的计算机地址,这是一个物理网络内的过程,只有两台计算机在一个物理网络之内才可以进行解析。如果中间加了一个路由器,那么将先解析到路由器,然后再将路由器与目标设备连接的端口转发到源主机

    2. RARP协议(逆向地址转换协议),这个协议与ARP的方向相反,这个是通过MAC将其解析为IP地址,这一点在无盘主机中会使用,这种主机只能靠ROM中固化的信息来进行引导,然后固化的信息中没有IP地址,就必需通过自己的MAC来获取IP地址

    首发于我的个人网站: 点击打开链接

    展开全文
  • 1、基本数据链路层协议 引言 在考察协议之前,先明确一下有关底层通信模型的基本假设是有必要的。首先我们假设物理层、数据链路层和网络层都是独立的进程,它们通过来回传递信息进行通信。如图所示,物理层进程...

    1、基本数据链路层协议

    引言

    • 在考察协议之前,先明确一下有关底层通信模型的基本假设是有必要的。首先我们假设物理层、数据链路层和网络层都是独立的进程,它们通过来回传递信息进行通信。如图所示,物理层进程和某些数据链路层进程运行在一个称为网络接口卡(NIC)的专用硬件上:链路层进程和操作系统的一部分运行在主CPU上,链路层进程的软件通常以设备驱动器的形式存在。然而,其他的实现方案也是有可能的。无论如何,将3层作为独立的进程讨论有助于使概念更清晰,同时也可强调每一层的独立性。
      在这里插入图片描述
    • 另一个假设是:如果机器A用一个可靠的、面向连接的服务向机器B发送一个长数据流(先不考虑B同时向A发送数据的情形)。假定A要发送的数据总是已经准备好,不必等待这些数据被生成。或者说,当数据链路层请求发送数据时,网络层总能立即满足数据链路层的要求。还应假设机器不会崩溃。
    • 数据链路层从网络层获取的数据包是纯粹的数据,数据包被完整地交到目标机器的网络层,虽然目标机器网络层可能将数据包的一部分解释为一个头,但这不属于数据链路层考虑的范围。
    • 假设有一个现成的代码库,其中to_physical_layer发送一帧,from_physical_layer接收一帧,这个过程负责核算附加校检和(这部分工作通常由硬件完成,例如它们可能使用CRC算法),所以我们无需关心数据链路层协议的这部分内容。目标机器数据链路层等待数据用过程调用wait_for_event(&event)标示,当确实发生了事情(比如到达了一个帧),过程返回并由event说明发生了什么事情。对于不同的协议,可能的事件集合也是不同的,每个协议都需要单独定义和描述事件集合。在实际中,数据链路层不会在一个严格的循环中等待事件,而是会接收一个中断;中断将使它终止当前工作,转而处理入境帧,为了简便起见,将忽略数据链路层内部所有并发进行的活动细节,假定它全部时间都在处理一个信道。
    • 当一帧到达接收方,校检和被重新计算。如果计算出的帧校检和不正确,则数据链路层会收到通知(event = cksum_err)。如果到达的帧没有任何损坏,数据链路层将收到通知(event = frame_arrival),因此它可以利用from_physical_layer得到该帧并处理。只要接收方的数据链路层获得了一个完好无损的帧,它就检查头部的控制信息;如果一切没有问题,它就将内嵌的数据包传递给网络层。(为什么网络层得不到任何帧头信息?自然是为了保持网络层和数据链路层的完全分离。当数据链路层协议和帧格式发生变化时,网络层软件可以不作任何改变。那么当一块新的NIC安装在计算机上时就没有任何问题)。
    • 图中给出了将要讨论的许多协议公用的一些声明(C语言)。这里定义了5个数据结构:boolean, seq_nr,packet, frame_kind和frame。boolean是一个枚举类型,可以取值true和false;seq_nr是一个小整数,用来对帧进行编号,这些序号从0开始,一直到MAX_SEQ(含),每个用到序号的协议都要定义它;packet是同一台机器上网络层和数据链路层之间,或者不同机器上的网络对等实体之间交换的信息单元。在我们的模型中,它总是包含MAX_PKT个字节数据,实际中它是可变的。一个帧由四个字段组成:kind,seq,ack和info,其中前三个包含了控制信息,最后一个可能包含了要被传输的实际数据,这些控制字段合起来称为帧头。kind字段指出来帧中是否有数据,因为有些协议需要区分只有控制信息的帧和同时包含控制与数据信息的帧。seq和ack分别用作序号和确认。数据帧的info字段包含了一个数据包;控制帧的info字段没有用处(某些实际的协议实现将会使用一个变长的info字段,而对于控制帧则完全忽略)。网络层从传输层获得一个报文,然后在该报文上增加一个网络层头,由此创建了一个数据包。该数据包被传递给数据链路层,然后被放到输出帧的info字段中。
    #define MAX_PKT 1024 /* determines packet size in bytes */
    typedef enum {false, true} boolean; /* boolean type */
    typedef unsigned int seq_nr; /* sequence or ack numbers */
    typedef struct {unsigned char data[MAX_PKT];} packet; /* packet definition */
    typedef enum {data, ack, nak} frame_kind; /* frame kind definition */
    typedef struct { /* frames are transported in this layer */
    frame_kind kind; /* what kind of frame is it? */
    seq_nr seq; /* sequence number */
    seq_nr ack; /* acknowledgement number */
    packet info; /* the network layer packet */
    } frame;
    /* Wait for an event to happen; return its type in event. */
    void wait_for_event(event_type *event);
    /* Fetch a packet from the network layer for transmission on the channel. */
    void from_network_layer(packet *p);
    /* Deliver information from an inbound frame to the network layer. */
    void to_network_layer(packet *p);
    /* Go get an inbound frame from the physical layer and copy it to r. */
    void from_physical_layer(frame *r);
    /* Pass the frame to the physical layer for transmission. */
    void to_physical_layer(frame *s);
    /* Start the clock running and enable the timeout event. */
    void start_timer(seq_nr k);
    /* Stop the clock and disable the timeout event. */
    void stop_timer(seq_nr k);
    /* Start an auxiliary timer and enable the ack timeout event. */
    void start_ack_timer(void);
    /* Stop the auxiliary timer and disable the ack timeout event. */
    void stop_ack_timer(void);
    /* Allow the network layer to cause a network layer ready event. */
    void enable_network_layer(void);
    /* Forbid the network layer from causing a network layer ready event. */
    void disable_network_layer(void);
    /* Macro inc is expanded in-line: increment k circularly. */
    #define inc(k) if (k < MAX_SEQ) k = k + 1; else k = 0
    
    • 图中还列出了许多过程,这些库程序的细节与具体实现有关。wait_for_event是一个严格的循环过程,它等待事情的发生。过程to_network_layer和from_network_layer被数据链路层用来向网络层传递数据包或者从网络层接收数据包(即这些方法用来处理第二层和第三层的接口);from_physical_layer和to_physical_layer在数据链路层和物理层之间传递帧(处理第一层和第二层的接口)。在大多数协议中,我们假设信道是不可靠的,并且偶尔会丢失整个帧,所以我们需要启动一个内部计时器,如果在预设的时间间隔内没有回答,则时钟超时,数据链路层会收到一个中断信号。
    • 协议中如此实现:让wait_for_event返回event=timeout;过程star_timer和stop_timer分别打开和关闭计时器。在计时器运行同时,允许显示地调用star_timer重置时钟。过程star_ack_timer和stop_ack_timer控制一个辅助计时器,该定时器被用于在特定条件下产生确认。过程enable_network_layer和disable_network_layer用在较为复杂的协议中,在这样的协议中,我们不再假设网络层总是有数据发送。当数据链路层启动网络层后,它就允许网络层在有数据包发送时中断自己,用event=network_layer_ready来表示这种状态;当网络层被禁用后,这样的事情就不会发生。通过合适的时机启用禁用网络层,数据链路层就能有效避免网络层用大量数据包把自己淹没。
    • 帧序号总是在0到MAX_SEQ的范围内,不同协议的MAX_SEQ可以不相同。通常有必要对序号按循环加一处理(即MAX_SEQ之后是0)。宏inc可以执行这项序号递增任务,之所以把这项工作定义成宏是因为在帧处理的关键路径上都要用到该参数。限制网络性能的因素通常在于协议处理过程,所以把这种简单操作定义成宏并不会影响代码的可读性,却能够提高性能。上图代码中的声明是将要讨论的每个协议的一部分,为了节省空间和方便引用被提取出来排列在一起;在C语言中,合并的方法是,把这些定义放在一个特殊的头文件中,这里是protocol.h文件,然后在文件中使用C预处理器的#include设施将这些定义包含起来。

    1.1一个乌托邦式的单工协议

    • 先考虑一个最简单的协议,它不需要考虑任何出错的情况。在这个协议中,数据只能单向传输。发送方和接收方的网络层总是处于准备就绪状态。数据处理的时间忽略不计。可用的缓存空间无限大。数据链路层之间的通信信道永远不会损坏帧或者丢失帧。实现如下。
    /* Protocol 1 (Utopia) provides for data transmission in one direction only, from
    sender to receiver. The communication channel is assumed to be error free
    and the receiver is assumed to be able to process all the input infinitely quickly.
    Consequently, the sender just sits in a loop pumping data out onto the line as
    fast as it can. */
    typedef enum {frame_arrival} event_type;
    #include "protocol.h"
    void sender1(void)
    {
    frame s; /* buffer for an outbound frame */
    packet buffer; /* buffer for an outbound packet */
    while (true) {
    from_network_layer(&buffer); /* go get something to send */
    s.info = buffer; /* copy it into s for transmission */
    to_physical_layer(&s); /* send it on its way */
    } /* Tomorrow, and tomorrow, and tomorrow,
    Creeps in this petty pace from day to day
    To the last syllable of recorded time.
    – Macbeth, V, v */
    }
    void receiver1(void)
    {
    frame r;
    event_type event; /* filled in by wait, but not used here */
    while (true) {
    wait_for_event(&event); /* only possibility is frame arrival */
    from_physical_layer(&r); /* go get the inbound frame */
    to_network_layer(&r.info); /* pass the data to the network layer */
    }
    }
    
    • 协议由两个单独的过程组成:一个发送和一个接收。发送过程运行在源机器的数据链路层上;接收过程运行在目标机器的数据链路层上。这里没有用到序号和确认,不需使用MAX_SEQ。唯一的事件类型是frame_arrival(即到达了一个完好无损的帧)。发送过程是一个无限的while循环,它尽可能快速地把数据放到线路上,循环体由三个动作组成:从网络层获取一个包、利用变量s构造一个出境帧,然后通过物理层发送该帧。这个协议只用到了帧结构中的info字段,因为其他字段都跟差错控制或者流量控制有关。接收过程很简单。开始时,它等待到达一个完好的帧;到达后,过程wait_for_event返回,其中的参数event被设置成frame_arrival;调用from_physical_layer将新到达的帧从硬件缓存区中删除,并放到变量r中,以便接收方的代码访问该帧;最后该帧的数据部分被传递到网络层,数据链路层返回继续等待下一帧的到来,即实际上它把自己挂起来,直到下一帧到来为止。
    • 乌托邦式的协议是不现实的,因为它不处理任何流量控制或者纠错工作。其处理过程接近于无确认的无连接服务,必须依赖更高层次来解决上述问题,即使无确认的无连接的服务也要做一些差错检测工作。

    1.2无错信道上的单工-等式协议

    • 发送方以高于接收方能处理到达帧的速度发送帧,导致接收方被淹没,这种情形很容易出现。假设信道不会出错,数据流量还是单工。
    • 一种解决方法是建立足够强大的接收器,使其强大到能处理一个接着一个帧组成的连续流(或等价于把数据链路层定义得足够慢,慢到接收器的处理速度完全跟得上)。它必须有足够大的缓冲区和以线速运行的处理能力,而且必须能足够快地把所接收到的帧传递给网络层。然而这种方案需要专用的硬件,而且如果链路的使用率过低将浪费资源;这种方案只是发发送方太快这个问题转移到了其他地方,这里是网络层。
    • 更一般化的解决方案是让接收方给发送方提供反馈信息。接收方将数据包传递给网络层之后给发送方返回一个小的哑帧,实际上这一帧的作用是给发送方一个许可,允许它发送下一帧。发送方在发出一帧后,根据协议要求,它必须等待一段时间直到短哑帧(确认)到达,这种延缓就是流量控制协议的一个简单例子。发送方发送一帧,等待对方确认到达后才能继续发送,这样的协议称为停-等式协议。实现如下。
    /* Protocol 2 (Stop-and-wait) also provides for a one-directional flow of data from
    sender to receiver. The communication channel is once again assumed to be error
    free, as in protocol 1. However, this time the receiver has only a finite buffer
    capacity and a finite processing speed, so the protocol must explicitly prevent
    the sender from flooding the receiver with data faster than it can be handled. */
    typedef enum {frame_arrival} event_type;
    #include "protocol.h"
    void sender2(void)
    {
    frame s; /* buffer for an outbound frame */80
    packet buffer; /* buffer for an outbound packet */
    event_type event; /* frame arrival is the only possibility */
    while (true) {
    from_network_layer(&buffer); /* go get something to send */
    s.info = buffer; /* copy it into s for transmission */
    to_physical_layer(&s); /* bye-bye little frame */
    wait_for_event(&event); /* do not proceed until given the go ahead */
    }
    }
    void receiver2(void)
    {
    frame r, s; /* buffers for frames */
    event_type event; /* frame arrival is the only possibility */
    while (true) {
    wait_for_event(&event); /* only possibility is frame arrival */
    from_physical_layer(&r); /* go get the inbound frame */
    to_network_layer(&r.info); /* pass the data to the network layer */
    to_physical_layer(&s); /* send a dummy frame to awaken sender */
    }
    }
    
    • 虽然这个例子中的数据流量是单工的,即只是从发送方传到接收方,但是帧可以在两个方向上传送。因此,两个数据链路层之间的通信信道具备双向传输信息的能力。然而,这个协议限定了流量的严格交替关系:首先发送方发送一帧,然后接收方发送一帧:接着发送方发送另一帧,然后接收方发送另一帧,以此类推。这里采用一个半双工的物理信道就足够了。
    • 就像在协议1中那样,发送方首先从网络层获取一个数据包,用它构造一帧,然后发送出去。但现在,与协议1不同的是,发送方在开始下一轮循环从网络层获取下一个数据包之前必须等待确认帧的到来。发送方的数据链路层甚至根本不检查接收到的帧,因为只可能是来自接收方的确认。

    1.3有错信道上的单工停-等式协议

    • 假设一帧在传输过程中被损坏,那么接收方应该在完整地接收到该帧才返回一个确认帧,否则就将帧丢弃,一段时间后,发送方的计时器超时,于是它再次发送该帧。但是如果确认帧丢失了,那么发送方就会传输一个重复帧,显然接收方需要加以区分。对于接收方来说,区分重复帧很显然的做法是让发送方在它发送的每个帧的头部放上一个序号,然后接收方可以检查它所接收到的每个帧的序号。
    • 因为协议必须正确,并且出于链路效率的考虑,包含在帧头中的序号字段可能很小,那么序号需要多少位表示?具体取决于具体的链路层协议,它们需要保证帧携带的序号必须足够大到保证协议能正确工作。在这个协议中(如下代码),当正确帧到来时,帧被传递到网络层;然后接收方期待的下一个序号模2增加1(即从0到1,从1到0),任何一个到达的帧,如果包含了错误序号都将作为重复帧被拒绝接收,不过最后一个有效的确认需要重复,以便发送方确认已经被接收的帧。这样的协议称为自动重复请求或带有重传协议的肯定确认,这类协议也只在一个方向上传输数据。
    /* Protocol 3 (PAR) allows unidirectional data flow over an unreliable channel. */
    #define MAX_SEQ 1 /* must be 1 for protocol 3 */
    typedef enum {frame_arrival, cksum_err, timeout} event_type;
    #include "protocol.h"
    void sender3(void)
    {
    seq_nr next_frame_to_send; /* seq number of next outgoing frame */
    frame s; /* scratch variable */
    packet buffer; /* buffer for an outbound packet */
    event_type event;
    next_frame_to_send = 0; /* initialize outbound sequence numbers */
    from_network_layer(&buffer); /* fetch first packet */
    while (true) {
    s.info = buffer; /* construct a frame for transmission */
    s.seq = next_frame_to_send; /* insert sequence number in frame */
    to_physical_layer(&s); /* send it on its way */
    start_timer(s.seq); /* if answer takes too long, time out */
    wait_for_event(&event); /* frame arrival, cksum err, timeout */
    if (event == frame_arrival) {
    from_physical_layer(&s); /* get the acknowledgement */
    if (s.ack == next_frame_to_send) {
    stop_timer(s.ack); /* turn the timer off */
    from_network_layer(&buffer); /* get the next one to send */
    inc(next_frame_to_send); /* invert next frame to send */
    }
    }
    }
    }
    void receiver3(void)
    {
    seq_nr frame_expected;
    frame r, s;
    event_type event;
    frame_expected = 0;
    while (true) {
    wait_for_event(&event); /* possibilities: frame arrival, cksum err */
    if (event == frame_arrival) { /* a valid frame has arrived */
    from_physical_layer(&r); /* go get the newly arrived frame */
    if (r.seq == frame_expected) { /* this is what we have been waiting for */
    to_network_layer(&r.info); /* pass the data to the network layer */
    inc(frame_expected); /* next time expect the other sequence nr */
    }
    s.ack = 1 − frame expected; /* tell which frame is being acked */
    to_physical_layer(&s); /* send acknowledgement */
    }
    }
    }
    
    • 当发送方和接收方的数据链路层处于等待状态时,两者都用一个变量记录下有关的值。发送方在next_frame_to_send中记录下一个帧的序号;接收方则在frame_expected中记录下一个期望收到的序号。每个协议在进入无限循环之前都有一个简短的初始化阶段。发送方在发出一帧后启动计时器,如果计时器已经在运行,则将重置,以便等待另一个完整的超时时间间隔。发送方等待下一事件的发生:确认帧完好无损返回,确认帧损坏或者计时器超时。如果到达一个有效确认帧,则发送方从它的网络层获取下一个数据包,并把它放入缓冲区覆盖掉原来的数据包,同时还要递增帧的序号;如果到达了一个受损的确认帧或者超时,则缓冲区和序号都不做任何改变,以便重传。当有效帧到达接收方时,接收方首先会检查它的序号,确定是否为重复数据包或者受损:如果不是则传递到网络层,并生成一个确认帧,否则不会传递到网络层。
    展开全文
  • BUPT,计算机网络实验汇总(数据链路层协议设计、网络层数据分组的捕获和解析)整合资源包(计算机学院 - 大二下)
  • 浅谈数据链路层协议

    2020-07-21 17:50:12
    浅谈数据链路层协议 摘 要 数据链路层是参考模型的第二层,介于物理层和网络层之间,他在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到目标节点的网络层,实现点...

    浅谈数据链路层协议

    摘 要 数据链路层是参考模型的第二层,介于物理层和网络层之间,他在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到目标节点的网络层,实现点到点连接。数据链路层具有两个子层,分别是逻辑链路控制(LLC)子层和介质访问控制(MAC)子层,前者主要处理两个站点之间帧的交换,提供可靠的帧传递并做差错控制,流量控制等,后者提供介质访问控制服务,主要解决当局域网中共用信道的使用产生竞争时,如何分配信道的使用权问题等。本文主要详细讲述数据链路层使用的一些协议的相关问题,如组帧方式、差错控制、介质访问控制、MAC寻址方式等。
    关键词 数据链路层;协议;组帧;差错控制;介质访问控制;MAC寻址

    一、引言
    随着人类社会的不断发展进步,全球信息化时代已经到来,人们对信息的要求越来越高,为了更有效、更可靠、更安全地传输、处理信息,研究计算机通信网络变得非常有必要。计算机通信网络中,信息的传输都是从一端的封装开始,到另一端的解封装结束。计算机通信网络中的连接常采用分层的方式实现。分层后,各层工作独立,层之间通过接口联系,下层服务于上层,降低协议工作的复杂程度,且灵活性好,任何一层的改变不影响其它层,易于维护,另外,每层的实现技术可以不同,减少了实现的复杂度,还便于标准化。计算机通信网络中常用的分层方式有三种,即OSI七层模型和TCP/IP(DoD)四层模型,以及综合两种模型的五层模型。图1示出了三种参考模型的映射关系。
    在这里插入图片描述

    图1 三种参考模型的映射关系
    在有关讨论的基础之上,我们能够更准确地讨论网络的体系结构。构成网络体系结构的抽象对象称为协议,每种协议都定义了两种接口,一是为同一计算机上想使用其通信服务的其他对象定义的一个服务接口,这个服务接口定义了本地对象可以在该协议上执行的操作,即自身提供的服务;其次是为另一台机器上对等实体定义的一个对等接口,这个对等接口定义了对等实体之间实现通信服务而交换的信息的格式和含义。从图1中我们也可以发现传输层和网络层是参考模型的两个核心层,但数据链路层同样重要,不可或缺。数据链路层是参考模型的第二层,介于物理层和网络层之间,他在物理层提供的服务的基础上向网络层提供服务,其具有两个子层,分别是逻辑链路控制(LLC)子层和介质访问控制(MAC)子层,有各自的功能。本文主要详细讲述数据链路层为实现其功能而使用的一些协议,如组帧方式、差错控制、介质访问控制、MAC寻址方式等。

    二、组帧
    参考模型的每一层将建立各自的协议数据单元(PDU),数据链路层的PDU称之为帧,那么是如何组帧的呢?主要有三种方式,下面将结合相关协议简单介绍。
    第一种组帧方式是面向字节的协议,他把每一帧看成一个字节集,以字节为单位确认帧体(IP分组)的位置,这种方式又分为两种结构,一种是BISYNC协议、PPP协议等使用起止标记法,另一种是DDCMP协议使用的字节计数法。图2中分别示出了BISYNC协议和DDCMP协议定义的帧格式。BISYNC使用特定起止字符表示帧的开始与结束,一帧的开始由一个特定的SYN(同步)字符表示,其后帧的数据部分包含在两个特殊的起止字符STX(正文开始)与ETX(正文结束)之间,SOH(首部开始)字段功能与STX一致。这样存在的问题是,帧体Body内可能也出现与ETX字符相同的字节,这时接收方会提前认为帧结束,导致差错帧的出现。通过利用转义字符对帧体内的“ETX字符”转义可有效的解决这个问题,这种解决方式称之为字符填充法。PPP协议具有相似的结构和处理方法,只是起止字符仅在帧的首尾两处添加,且起止字符用同一个特定的标志字段“01111110”表示。
    在这里插入图片描述
    在这里插入图片描述

    图2 BISYNC帧格式(上)和DDCMP帧格式(下)
    DDCMP协议中采用的字节计数法,用一个特定的Count字段来指明帧体中包含的字节数,接收方通过这个字段确定帧的结束位置。但这种方式存在一个致命性的缺点,一旦接收方接收方的序列中Count字段出现误码,则不能够正确的检测到帧的结束位置,这种差错称为组帧差错(起止标记法也可能出现这种错误)。另外,组帧差错还可能引起后续帧的错误接收,导致差错传播,问题就会很多了。
    第二种组帧方式是面向比特的协议(HDLC),与面向字节的协议不同,他不关心字节的边界,把帧当做比特的集合,以比特序列为单位确定帧的起始位置(该序列可跨字节边界)。图3示出了HDLC帧格式,其也用特定的比特序列“01111110”表示帧的开始与结束,但同样这一序列也可出现在帧体中,HDLC采用比特填充法解决这一问题。在发送方,除试图发送起止符时外,其余任何时候发送5个连续1以后,就在发送下一比特之前插入一个0。在接收方,如果已经收到了5个连续的1,在观察下一比特,如果是0,则一定是填充的0,去掉之,如果是1,则继续观察下一比特,如果是0,则为帧结束标志,否则一定是出现了误码(当然前边的几个比特判断时也可能出现误码),则丢弃整个帧。这几种方式,在判断帧体位置的必要字段出现误码时,受到的影响都会比较大。第三种组帧方式是基于时间的组帧,多用于同步光纤网络(SONET),主要采用复用的方式,在此不再详细介绍。
    在这里插入图片描述

    图3 HDLC帧格式

    三、差错控制
    由于噪声和干扰的存在,接收方接收到的帧中会发生误码,为了可靠的帧传输,因此在图2、图3所示的帧格式中,我们都可以看到一个CRC字段,这个字段就是是用于检验传输差错的。具有检错检验功能的技术有两种,一是检错编码,二是纠错编码,前者只能检测错误,这时接收方只能丢弃差错帧,需要发送方重发数据帧,而后者接收方可以自己根据纠错码纠正错误(能力有限,超过能力范围也要重发)。但实际上,纠错编码的开销比较大,复杂度高,往往不采用,比如海明编码。检验传输差错最常用的算法是循环冗余检验(CRC)算法,另外比较常用的简单算法还有二维奇偶校验和校验和(一般不用于数据链路层)等。
    任何的差错检验算法的基本思想都是在帧中加入冗余比特来确定是否存在差错,这些冗余比特不传输信息,只用于差错检测,其差错检验能力与码间的海明距离决定。编码规则在此不予详细介绍,但需要明确的是,一是由于所用的冗余比特位也能出现误码,这时即使信息比特位无误码,接收方也会判定此帧出现误码,将其丢弃,要求发送方重发该帧,这相当于“没事找事(误判)”,再者信息比特位与冗余比特位还可能会同时发生误码,最终结果导致接收方判定此帧无误码,继续接受下一帧,这就相当于漏判,但这两种情况出现的可能都比较小,尤其后者更小,因此系统性能还是非常好的。
    为了可靠传输,接收方一旦检测到错误,就必须将差错帧丢弃,然后要求发送方重传,通过确认和超时两种机制可以控制是否重传。确认机制是指接收方收到一帧后,如果检测其无差错,则直接向发送方发送或捎带发送一个确认信号ACK信号,发送端收到ACK时,则表明帧发送成功。如果在规定的一段时间内,发送方仍未收到ACK,则判定为超时,重传该帧。使用确认和超时实现可靠传输的策略称为自动请求重发(ARQ),常用的ARQ算法也有三种。
    最简单的一种ARQ算法为停止-等待算法,他的思想很简单,就是在发送方发送一帧后,除非在规定的时间内收到该帧的确认才继续传下一帧,否则超时重传该帧。确认和超时机制存在一个问题,如果确认帧在传输过程中丢失了,则超时后,发送方会重传该帧,接收方接收后可能认为这是下一帧,从而导致重复的问题,因此传输过程中必须对帧进行编号,这在所有ARQ算法中都是必须的。另外,停止-等待算法有一个显著缺点,就是他每次只传输一帧,而且还要等待确认,即可能浪费了链路容量,又浪费了时间,效率较低。
    为解决效率低的问题,一种新的ARQ算法——滑动窗口算法应运而生,这种算法运行发送方一次性最多发送窗口大小的帧数,接收方对每一帧都要确认。图4分别示出了停止-等待算法和滑动窗口算法的时间线。这种算法,超时后重传有两种机制,一种是回退N帧,即将第一个超时帧及其后的所有帧全部重传,采用此机制时,确认机制可用累计确认原则,另一种是选择性重传,只重传超时帧,这时应注意保证帧的顺序。这种ARQ算法要注意选择合适的窗口尺寸,并对帧合理编号,进行流量控制。
    在这里插入图片描述
    在这里插入图片描述

    图4 停止-等待算法(上)和滑动窗口算法的时间线(下)
    最后一种ARQ算法是并发逻辑信道,仍采用简单的停止-等待算法,但能保持信道满载,效率较高,但其不能保持帧的顺序,也没有流量控制,因此目前应用不多。
    值得注意的是,当前有许多数据链路层技术中都忽略了差错控制功能,而在高层协议中提供可靠传输,比如传输层、应用层,但究竟在哪一层提供可靠传输依赖于很多因素,本节所提到的思想不仅只适用于数据链路层,也适用于其它层。

    四、介质访问控制
    信道资源一般都是有限的,但也由多用户共享,这时如果不合理的分配,就会导致冲突的产生,通过多路访问协议动态分配信道资源,可以减小冲突发生的可能,提高信道利用率。多路访问协议包括随机访问协议和受控访问协议,前者各站点间随机占用信道,可能出想冲突,后者站点被分配占用信道,主要通过信道复用方式实现,不会发生冲突。典型的随机访问协议包括ALOHA协议、CSMA协议、CSMA/CD协议、CSMA/CA协议等,受控访问协议包括TDM、FDM等。本文主要介绍随机访问协议。
    ALOHA协议分为纯ALOHA协议和分隙ALOHA协议。纯ALOHA协议中,任何一个站都可以在帧生成后立即发送(可能冲突),并通过信号的反馈,检测信道,以确定发送是否成功。如发送失败,则经随机延时后再发送。这样不关心信道状态就直接发送数据,在任意时刻都可能造成冲突的产生。分隙ALOHA是把时间分成时隙,时隙的长度对应一帧的传输时间。新帧的产生是随机的,但分隙ALOHA不允许随机发送,凡帧的发送必须在时隙的起点,因此,冲突只发生在时隙的起点,冲突发生时只浪费一个时隙,且一旦某个站占用时隙并发送成功,则在该时隙内不会出现冲突。这时,冲突只会发生在时隙的起点,因此降低了冲突发生的可能,但信道利用率都还是不太高。
    CSMA协议是指载波侦听多路访问协议,特点是先听后发,他包括非持续式、1-持续式、p-持续式三种方式。非持续式是指经侦听,如果介质空闲,开始发送,否则等待一个随机分布的时间,然后再侦听,这样可能会有一段时间没有数据传送,造成浪费。1-持续式是指经侦听,如介质空闲,则发送,否则持续侦听,一旦空闲立即发送,如果发生冲突,等待一个随机分布的时间再进行侦听,这样如果两个以上的站点等待发生,则一旦介质空闲必然发生冲突。p-持续是指在1-持续式的基础上,改为如果介质空闲,那么以p的概率发送,以(1–p)的概率延迟一个时间单元发送,这种方式再次降低了冲突的可能。但要注意的是,由于传播延迟时间的存在,任何方式在数据发出以后仍可能会遇到冲突。
    典型以太网(802.3)使用总线型结构,具有强大的生命力,以太网的多路访问协议使用带冲突检测(CD)的CSMA实现。CSMA/CD的特点是先听后发、边发边听,与CSMA不同的是在其基础上所有工作站在发送的同时也接收自己的信号,监测发送的情况,一旦收到的信号与发出的不一致,就说明发生了冲突。发送站感知冲突后立即停止帧的发送,并且发一个简短的堵塞信号(称强化冲突信号),通知网上各站已经发生冲突,本站及网上所有站都等待一段随机分布的时间,然后再按CSMA/CD方式重发该帧,这段时间可以用二进制指数后退算法确定。冲突不确定性使整个以太网平均数据率远小于以太网最高数据率。同样由于传播延时数据的存在,CSMA/CD存在一个冲突窗口:网络的最大冲突检测时间应为两倍两个最远距离站点间的传输时间,为实现冲突检测,时隙宽度应等于冲突窗口,发送有效帧的时间应大于冲突窗口。
    在这里插入图片描述
    在这里插入图片描述

    图5 隐藏节点问题(上)和暴露节点问题(下)
    与以太网不同,在无线网络中考虑图5中的两种情况,两圆分别代表A、C的通信范围。在左图中,假设A、C同时均想与B通信,但A、C之间不会觉察到对方,经侦听后发现B空闲,因此都会向B发送了一个帧,这时两个帧会在B处发生冲突,这种问题称为隐藏节点问题。在右图中,B可以和A、C通信,C可以和B、D通信,若某一时刻A正在与B通信,C想和D通信,但是此时C会侦听到这一通信,因此他不会直接和D通信,然而它与D的通信不会影响A与B的通信,造成资源的浪费,这种问题称为暴露节点问题。
    为解决这两种问题,802.11中使用了带冲突避免(CA)的CSMA。CSMA/CA协议实现时,如果侦听到信道空闲时,并不是立即发送,而是等待一段时间再发送数据,然后先发送一个很小的信道检测帧RTS,如果收到最近的接入点返回的CTS,就认为信道是空闲的,然后再发送数据。发送数据时,仍首先检测信道是否有使用,如果检测出信道空闲,则再等待一段随机时间后,才送出数据;接收端如果正确收到此帧,则经过一段时间间隔后,向发送端发送确认帧ACK;发送端收到ACK帧,确定数据正确传输,在经历一段时间间隔后,再发送数据。CSMA/CA协议通过了RTS-CTS机制和ACK机制减小了冲突发生的可能。
    CSMA/CD主要着眼点在冲突的检测,当检测到冲突时,进行相应的处理,要求设备能一边检测一边发送数据。CSMA/CA主要着眼点在冲突的避免,协议里也看到经常是等待一段时间再做动作,通过退避尽量去避免冲突,还有就是先发送一些特别小的信道检测帧来测试信道是否有冲突。

    五、MAC寻址
    以以太网为例,发送方在发送一帧后,该帧进入总线,进而连接到总线上的各设备(一般是网络适配器,又称网卡)均可收到该帧,网卡进一步确认该帧是否为发向自己的帧,若是则传递给主机,否则丢弃。那么在数据链路层,网卡是如何确认帧是否是发向自己的呢?主要是通过MAC地址,MAC地址是物理地址,由48位构成,其中前24位由网卡制造厂商向IEEE申请,后24位由制造厂商唯一分配,在网卡制造时被烧写在ROM中,不可更改,且全球唯一。图6示出了以太网的帧格式,所有的帧格式都类似这样,其中Dest addr和Src addr字段分别表示目的MAC地址和源MAC地址,用于唯一识别源主机和目的主机。
    在这里插入图片描述

    图6 以太网帧格式
    另外,Preamble字段表示前同步码,一般为7个字节的1和0交替序列加上一个字节的帧起始符(使用面向比特的组帧方式)。Type字段表示上层所使用的的协议,如IP协议为2048。CRC字段表示循环冗余校验码,用于检测差错,校验范围不包括同步码。Body表示帧体,以太网定义的帧体,至少包含46字节数据最多包含1500字节数据。设置最小帧体数据长度,是由于CSMA/CD协议中冲突窗口的存在,帧必须足够长才可能检测到冲突,长度不足时应该填充。设置最大帧体数据长度,是由于如果数据帧太长就会出现有的工作长时间不能发送数据,而且可能超出接受放的缓冲区大小,造成缓冲溢出,超长时可以采取分组的策略。对主机来说,帧不包括前同步码和CRC等,因为发送方网卡在发送帧之前才加上前同步码、CRC字段和后同步码,接收方网卡接收后再去掉他们。
    网络中具有很多的LAN段,不同的LAN段之间一般通过网桥或者交换机连接。网桥和交换机属于二层交换设备,通过检查MAC地址做出转发帧的决策,他们不关心上层协议,不会检查网络层,IPv4、IPv6、OSI分组等均可穿越他们。下面主要介绍网桥的工作原理。网桥连接不同类型的LAN时,可以进行一些转换的功能,比如通过重新封装改变帧格式、通过缓存改变数据传输速率、通过切割和重组改变帧长度等等。网桥不关心帧的内容,只负责正确的转发操作,因此是透明的,他将多个LAN连接在一起,接收所有与他相连的LAN帧。当一个帧到达网桥时,他必须作出丢弃还是转发的决策,如果是转发,他还要知道向哪个LAN转发。通过这种方式可以过滤部分交通流量,减少冲突的机会,改善网络性能。
    决策是通过在其内部的一张MAC地址表中查找MAC地址作出的。初始时,这张表是空的。网桥通过逆向学习逐步完善地址表,他从到达帧的源地址认识到源地址对应的那台机是在帧来的那个LAN上,进而把它写入MAC地址表。另外,由于网络的拓扑是变化的,因此无论何时,凡往表中加入记录,也必须同时打下时戳,新到达帧的源地址在表中已有记录,将时戳更新为当前时间,网桥也周期性地扫描表,将那些超时的记录从表中删除。
    当一帧到达时,网桥查找地址表,比较目的MAC地址,如果源LAN和目的LAN相同,则丢弃该帧,如果源LAN和目的LAN不同,则转发该帧,如果目的LAN未知,则广播该帧,同时通过逆向学习维护MAC地址表。但是为了可靠传输,网络中采用了冗余结构,可能有环路出现,如果不加控制,将会造成广播风暴、帧重复传送、MAC地址库不稳定等问题。为了一个无环路的网络拓扑,采用了生成树协议,它规定每个网络一个根网桥,每个网桥一个根端口,每网段一个指定端口,非指定端口不被使用,但是,当逻辑STP树上的某点出故障了,非指定端口将会被重新启用。要注意的是,生成树算法能在有物理环路的网络中,生成一棵没有逻辑环路的生成树,但并不能保证其中的路径是最优的,这是STP算法所付出的代价。这种帧寻址交换的思想在上层也可使用,比如路由交换中的IP寻址等。
    交换机可以理解为多端口的网桥,其工作原理与网桥相同,可以替代物理层的集线器设备。由于交换机能够支持多个端口,因此可以把网络系统划分成为更多的物理网段,这样使得整个网络系统具有更高的带宽。与网桥相比,交换机具有更快的数据传输速率。网桥在转发数据帧时,通常要先接收到完整的帧并检测后才开始转发该帧,而交换机有储存转发、直接转发、分片转发等三种帧转发模式,例如,直接转发是只要确认转发目的端口,就直接边收边发,不需要等待完全接收后再转发。

    六、总结
    数据链路层是参考模型的第二层,介于物理层和网络层之间,他在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到目标节点的网络层,实现点到点连接。数据链路层使用多种协议实现了其功能,包括组帧、差错控制、介质访问控制、MAC寻址等。
    数据链路层的PDU称之为帧,常用的组帧方式有三种,分别是面向字节的协议、面向比特的协议和基于时钟的组帧,三种组帧方式用于不同的场景。接收方通过检错码来检测帧是否出现差错,一旦出现差错需要发送方重传。常用的差错控制机制有确认和超时,使用这两种机制的算法称为ARQ算法,ARQ算法包括停止-等待算法、滑动窗口算法等。用于介质访问控制的协议有ALOHA协议、CSMA协议、CSMA/CD协议、CSMA/CA协议等,也分别用于不同的场景,可以解决不同的问题。MAC寻址时,不同LAN间的连接主要通过网桥或交换机实现,网桥或交换机在接收到一帧时后进行决策,决定是丢弃、还是转发或者广播该帧,同时进行逆向学习。值得注意的是,数据链路层所用协议的思想均可应用到其它层。

    参考文献
    [1]Denenberg R. Open Systems Interconnection[J]. Library Hi Tech,1985, 3(1):15-26.
    [2]Deji, ChenMark, NixonAloysius Mok. WirelessHART[M]. SpringerLink,2010 p.19-27.
    [3]Hercog D . Generalised sliding window protocol[J]. Electronics Letters, 2002, 38(18):p.67-68.
    [4]王悦. IEEE802.15.4MAC层信道接入机制的研究[D].吉林大学,2008.
    [5]陈玲娟. 载波侦听/冲突检测(CSMA/CD)探析[J]. 中小企业管理与科技, 2013.
    [6]Asija M . MAC Address[J]. 2016.
    [7]拉里L.彼得森, 布鲁斯S.戴维. 计算机网络:系统方法:a systems approach(第5版)[M]// 计算机网络:系统方法:a systems approach(第5版). 机械工业出版社, 2015.

    展开全文
  • 局域网数据链路层协议CSMA CSMA即载波监听多路访问(Carrier Sense Multiple Access,CSMA),也就是发送前先侦听,每次发送数据之前都要先检查一下是否有其他站点在发送数据,如果有则暂时不要发送数据,等待信道...

    局域网数据链路层协议CSMA

    CSMA即载波监听多路访问(Carrier Sense Multiple Access,CSMA),也就是发送前先侦听,每次发送数据之前都要先检查一下是否有其他站点在发送数据,如果有则暂时不要发送数据,等待信道变为空闲的时候再发送。

    1、以太网协议CSMA/CD
    1. 在使用CSMA/CD协议时,一个站不可能同时进行发送和接收,进行的是半双工通信。
    2. 站点再发送数据前先侦听,每次发送数据之前都要先检查一下总线上是否有其他站点在发送数据,如果有则暂时不要发送数据,等待信道变为空闲的时候再发送。
    3. 每个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。(电磁波在1km电缆的传播时延约为5us)
    4. 以太网使用截断二进制指数退避算法来确定碰撞后重传的时机。
    5. 以太网要实现重传,必须保证这个站在收到冲突信号的时候这个帧没有传完。
    6. 10Mbps以太网最大连接长度2500米,使用四个中继器,最多一万米,因此传播最小数据报为64字节。
    2、wifi协议CSMA/CA
    1. 终端A先向终端B发送一个控制帧RTS(Request To Send)
    2. 终端B可以在可以接收数据的情况下:就会发送一个响应控制帧CTS
    3. 终端A接收到终端B发送的帧就开始发送要发的数据帧
    4. 终端B接收到终端A发送的数据帧后,经过一段时间,就会向终端A发送一个确认帧。

    CSMA/CA协议只能避免数据帧的冲突,不能避免控制帧的冲突,但是因为控制帧的大小很小,因此不会造成太多的无效开销。

    展开全文
  • 数据链路协议,数据链路协议是什么意思 数据链路可以粗略地理解为数据通道。物理要为终端设备间的数据通信提供传输媒体及其连接。媒体是长期的,连接是有生存期的。在连接生存期内,收发两端可以进行不等的一次或...
  • 对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。 用户使用拨号电话线接入互联网时, 用户计算机和 ISP 进行通信时所使用的数据链路层协议就是 PPP 协议。 PPP ...
  • 数据链路层协议(Ethernet、IEEE802.3、PPP、HDLC)

    万次阅读 多人点赞 2018-11-19 08:26:26
    数据链路层协议 Ethernet以太网协议 以太网数据帧的封装 IEEE802.3协议 PPP协议 HDLC协议 数据链路层协议 首先Ethernet、IEEE802.3、PPP和HDLC都是数据链路层的协议,只不过后面三个不常用而已,数据链路层最...
  • WAN数据链路层协议

    2012-08-09 10:32:31
    WAN 要求数据链路层协议建立穿越整个通信线路(从发送设备到接收设备)的链路。WAN数据链路层的协议有: 专用点对点:PPP、HDCL 分组 交换:X.25、帧中继、ATM 电路 交换:ISDN WAN封装:从网络层发来的数据...
  • 数据链路层协议定义了通过媒介的互联设备之间传输的规范。 MAC地址 MAC地址用于识别数据链路层互联的节点。 MAC地址长48比特,一般在网卡出厂后会被烧录到ROM内,MAC地址由IEEE和各大厂商管理分配。因此一个网卡...
  • 请记住,虽然有许多描述数据链路层帧的不同数据链路层协议,但每种帧均都有三个基本组成部分: 帧头 数据 帧尾 所有数据链路层协议均将第 3 层 PDU 封装于帧的数据字段内。但是,由于协议的不同,帧结构...
  • 数据链路层协议封装

    2020-12-17 22:25:45
    常用的两种数据链路帧: 以太网帧和PPP帧的区别: 最大的区别,以太网是一个广播链路,一个广播域可能有多个设备,所以以太网帧有MAC地址,为了在整个以太网中确定一个唯一确定到底哪个设备进行接收,减少链路的...
  • 数据链路层协议ARQ

    2018-03-08 20:01:00
    OSI-RM体系结构中,流量控制和差错控制是在数据链路层实现的。 差错控制: 在信息传输过程中,由于种种原因,可能发生“1”变为“0”或“0”变为“1”的情况,这就是出了差错。差错控制可以通过引入奇偶校验码、...
  • 数据链路层协议定义了通过同种通信媒介互连的设备之间的传输的规范。物理层:把物理信号与二进制的01进行相互转换。 数据链路层:把01序列组织为一个叫做帧的块,再进行传输。各种数据链路以太网WLAN(无线局域网...
  • 点对点链路的数据链路层协议 传输方式 同步通信 异步通信 链接结构 点对点链路 多点链路 异步通信数据链路:一般面向字符的数据链路控制协议,一般以字符为基本单位;如早期使用的XMODEM,YMODEM,等...
  • 现在主要做的是数据传输子层数据的封装和发送到下一,关于我做的这主要任务是:接受来自上一数据后我对于该数据进行加同步序列SYN、报头、报头CRC以及CRC,主要如下图所示:我做的主要是用C语言做D_PDU的...
  • CAN之数据链路层协议

    千次阅读 2017-10-17 11:13:41
    各种协议摆出来一大堆,让人摸不着头脑,这种东西说实在没什么用,底层链路层协议全部通过硬件实现了,你仅仅需要了解然后学会配置(驱动硬件)即可,没必要花大篇幅去学习一大堆鬼东西。重点应该放在上层协议之上...
  • 以太网数据链路层协议分析

    千次阅读 2015-07-30 21:09:29
    其他局域网,比如令牌环网、F D D I和R S-2 3 2串行线路采用的是不一样的技术,因此数据链路层协议也不一致。比如PPP和SLIP就是适用于串行线路的。另外PPPOE是在以太网的基础上封装了PPP协议,方便运营商计费和...
  • 数据链路层协议的三个基本问题

    千次阅读 2019-04-07 13:15:41
    一.封装成帧 封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成...网络层的IP数据报传送到数据链路层就称为帧的数据部分。在帧的数据部分的前面和后面分别添上首部和尾部,构成了一个完整的帧。首部和尾...
  • 常见的数据链路层协议

    千次阅读 2013-04-15 09:35:52
    数据链路层负责无差错地将数据从一个站点发送到相邻的站点。它从网络层接收数据包,然后将它封装到称为“帧”的数据单元里,再传给物理层,进行传输。以下为大家介绍一些常见链路层协议。 1、X.25  X.25...
  • TCP/IP协议层图TCP/IP协议层所处位置数据发送的过程:封装应用层:应用程序(app)把应用层协议内容以应用层首部的形式封装成数据data,从应用层送给传输层传输层:收到应用层的数据data,把data作为传输层的payload...
  • 请问数据链路层封装,如果交换机或者路由器对应的接口上没有encapsulation之类的封装命令,那么这个接口是否还有一个默认封装和解封装的协议?比如我接口没有配置encapsulation封装类型,那么这个接口默认就是封装...
  • PPP协议是二层(数据链路层协议,常用于拨号上网时客户端向服务器获取IP地址。PPP支持在各种物理类型的点对点串行线路上传输上层协议报文。它具有很多特性,比如支持多协议、提供可选的身份认证服务、以各种方式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,864
精华内容 5,545
关键字:

数据链路层协议