📜  无噪声通道协议

📅  最后修改于: 2021-09-28 10:24:21             🧑  作者: 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
    }
}
  • 流程图 :
    此流程图显示了使用最简单协议的通信示例。这是非常简单的。发送方发送一系列帧而不进一步考虑接收方。举个例子,发送方发送三帧,接收方接收三帧。请记住,数据框由倾斜的框显示;框的高度定义了帧中第一位和最后一位之间的传输时间差。
  • 图表

最简单协议的流程图

停止和等待协议
如果数据帧接收器到达站点的速度比它们可以处理的速度快,则必须存储帧直到它们被使用。通常,接收器没有足够的存储空间,特别是当它从多个源接收数据时。

  • 设计 :
    将停止等待协议设计模型与 Simplest 协议设计模型进行比较,我们可以看到前/前通道(从发送方到接收方)和后/反向通道上的流量。任何时候,前向信道上有一个数据帧或反向信道上有一个 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(已确认)将从接收方到达时,然后发送下一帧,依此类推。请记住,当有两个帧时,发送方将涉及四个事件,而接收方将涉及两个事件。

停止和等待协议的流程图