📜  无噪声通道协议

📅  最后修改于: 2021-06-28 08:34:05             🧑  作者: Mango

介绍 :
协议是两个设备用来通信的一组规则。这些规则集通常由标头(由协议确定的固定标头)决定。这些标头指定了消息的内容以及该消息的处理方式。要检测该错误,标头必须是目标地址,源地址,消息的校验和。

协议分类:
协议的探讨分为可用于无噪声(无错误)信道的协议和可用于有噪声(引起错误)的信道的协议。第一类协议无法在现实生活中使用,但它们是噪声通道协议的基础。

无噪音频道:
一个理想的通道,其中不会丢失,破坏或复制任何帧。该协议未在此类别中实现错误控制。无噪声信道有两种协议,如下所示。

最简单的协议–
我们在这里认为接收器可以维持接收到的任何帧,而处理时间却很短。接收者的数据链路层立即从帧中删除报头,并将数据包分配给其网络层,该网络层也可以立即接受该数据包。也就是说,接收器永远不会被即将来临的帧所淹没。

  • 设计 :
    发送方站点上的数据链路层从其网络层获取数据,从数据中取出帧,然后发送。数据链路层(接收者站点)从其物理层接收帧,从帧中提取数据,并将数据传送到其网络层。发送方和接收方的数据链路层为其网络层提供通信/传输服务。数据链路层利用其物理层提供的服务进行位的物理传输。

没有错误控制或流程的最简单协议的设计

  • 发件人站点和接收者算法:
    发件人站点算法–
while(true)                     //Repeat forever
{ 
   waitForEvent();              //sleep untill an event occur
   if (Event(RequestToSend))    //there is a packet to send
   {
         GetData();
         MakeFrame();
         SendFrame();            //send the frame
    }
}
  • 接收器算法–
while(true)                           //Repeat forever
{ 
   waitForEvent();                    //sleep untill an event occur
   if (Event(ArrivalNotification))    //data frame arrived
   {
         ReceiveFrame();
         ExtractData();
         DeliverData();               //Deliver data to network layer
    }
}
  • 流程图 :
    该流程图显示了使用最简单协议进行通信的示例。这很简单。发送方发送一系列帧,而无需进一步考虑接收方。让我们举个例子,发送者将发送三个帧,接收者将接收三个帧。请记住,数据框由倾斜的框显示;框的高度定义帧中第一位和最后一位之间的传输时间差。

最简单协议的流程图

停止和等待协议
如果数据帧接收器到达现场的速度超过了处理速度,则必须存储帧直到使用它们。通常,接收器没有足够的存储空间,尤其是当它从多个源接收数据时。

  • 设计 :
    在将停止等待协议设计模型与最简单协议设计模型进行比较后,我们可以看到前/前通道(从发送方到接收方)和后/反向通道上的流量。任何时候,在前向通道上都会有一个数据帧,或者在反向通道上都会有一个ACK帧。因此,我们需要一个半双工链接。

停止等待协议的设计

  • 发件人站点和接收者算法:
    发件人站点算法–
while(true)                                //Repeat forever
canSend = true                             // Allow the first frame to go
{ 
   waitForEvent();                         //sleep untill an event occur
   if (Event(RequestToSend)AND canSend)    //there is a packet to send
   {
         GetData();
         MakeFrame();
         SendFrame();                      //send the data frame
         canSend = false;                  //cannot send untill ACK arrives
    }
    WaitForEvent();                        //sleep untill an event occurs
    if(Event(ArrivalNotification))         //An ACK has arrived
    {
        RecieveFrame();                    //Recieve the ACK frame
        CanSend = true;
}      
  • 接收器算法–
while(true)                                //Repeat forever

{ 
   waitForEvent();                         //sleep untill an event occur
   if (Event(ArrivalNotification)          //data frame arrives
   {
         ReceiveFrame();
         ExtractData();
         DeliverData();               //Deliver data to network layer
         SendFrame();                 //Send an ACK frame
    }
 }
  • 流程图 :
    该图显示了使用“停止并等待”协议进行通信的示例。它仍然很简单。发送方发送帧并等待接收方的响应。当ACK(已确认)将从接收方到达时,则发送下一帧,依此类推。请记住,当有两个帧出现时,发送者将涉及四个事件,而接收者将涉及两个事件。

停止和等待协议流程图