📜  计算机网络中的乌托邦单纯形协议

📅  最后修改于: 2021-08-27 18:04:04             🧑  作者: Mango

我们将考虑一个简单的协议,因为它不担心任何出错的可能性。数据仅在一个方向上传输。传输和接收网络层均已准备就绪。处理时间可以忽略。无限的缓冲区空间可用。这个完全不现实的协议(我们将其称为“ Utopia” )只是为了显示我们将基于其构建的基本结构。其实现如下所示。

乌托邦单纯形协议:
仅从发送者到接收者有一个方向的数据传输。在这里,我们假设通信通道没有错误,并且接收器将无限快速地处理输入。发送方将数据尽快泵送到线路上。

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 */
 }                           
}

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字段。

接收器同样简单。当帧到达并将事件设置为frame_arrival时,过程wait_for_event返回。来自硬件缓冲区的新到达的帧被调用from_physical_layer删除,并将其放入变量r中,以便接收器可以获取它。当数据部分传递到网络层时,数据链路层重新建立以等待下一个帧,并暂停自身直到帧到达。它不处理流控制或纠错,因此是不现实的。