我们将考虑一个简单的协议,因为它不担心任何出错的可能性。数据仅在一个方向上传输。传输和接收网络层均已准备就绪。处理时间可以忽略。无限的缓冲区空间可用。这个完全不现实的协议(我们将其称为“ 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中,以便接收器可以获取它。当数据部分传递到网络层时,数据链路层重新建立以等待下一个帧,并暂停自身直到帧到达。它不处理流控制或纠错,因此是不现实的。