下面是一个简单流量控制程序片断:
#define MAX_SEQ 1 #define MAX_PKT 1024 typedefine enum {frame,arrival,chksum_err,timeout} event_type; typedefine enum {data,ack,nak} frame_kind; typedefine struct {unsigned char data[MAX_PKT];} packet; typedefine struct { frame_kind kind; unsigned int seq; unsigned int ack; packet info; }frame; void protocol(void) { unsigned int next_frame_to_send; unsigned int frame_expected; frame s,r; packet bufffer; event_type event; next_frame_to_send=0; frame_expected=0; from_network_layer(&buffer); s.info=buffer; s.seq=next_frame_to_send; s.ack=1-frame_expected; to_physical_layer(&s); start_timer(s.seq); while (1){ wait_for_event(&event); if (event==frame_arrival) { from_physical_layer(&r); if (r.seq==frame_expected) { to_network_layer(&r.info) inc(frame_expect); } if (r.ack==next_frame_to_send) { from_network_layer(&buffer); inc(next_frame_to_send); } } s.info=buffer; s.seq=next_frame_to_send; s.ack=1-frame_expected; to_physical_layer(&s); start_timer(s.seq); } }
问题:
(1)该协议是哪一层的协议?
(2)画出协议数据单元的格式
(3)如果A,B两点都运行上述协议,假设A发送的单元首先到达B,画出A,B之间协议单元的传输过程.如果A,B发送的单元同时到达对方,画出协议传输过程.