分,实际上在序列号前面还设计了 base 部分;
base 与 sendSeq 序列号初始值相同但是作用不同,base 用于超时重传,sendSeq
单纯作为序列号,用于发送接收的显示。
根据参考资料,GBN 一个分组的发送格式是:
Base(1Byte) + seq(1Byte) + data(max 1024Byte);
解释如下:GBN 协议的传送流程是:从上层应用层获得到一个完整的数据报,将
这个数据报进行拆分,因为在以太网中,数据帧的 MTU 为 1500 字节,所以 UDP
数据报的数据部分应小于 1472 字节(除去 IP 头部 20 字节与 UDP 头的 8 字节)
所以一个 GBN 数据帧最大传输的数据大小限制为 1024B。需要注意的是:
对于发送方,起始 base 的值,窗口采用链表的数据结构存储每个发出去的数据
包(因为后面超时需要重传,所以得按顺序能标示地存下来)进入一个循环,循环
结束条件是所有需要传送的数据都已经发送完成,并且窗口中的分组都已经全部
确认。在这个循环中,如果窗口内有空余,就开始发送分组,直到窗口被占满,计时器
开始计时,之后进入接收 ACK 的状态,收到 ACK 之后,更新滑动窗口的位置,之后
如果计时器超时,就将窗口内所有的分组全部重发一次。之后开始下一次循环。
(构造数据包的时候只需要构造 1 字节的 seq 值放在头部)
对于接收方,记录一个 base 值,每成功接收--个数据帧,base+1,开始循环顺序接收
数据帧,对于 base 不是目标值得数据帧直接丢弃,如果是符合要求的数据帧,就给
发送方发送一个 ACK=base 的确认数据帧,直到发送方没有数据传来为止。
对于实验设计三,设计的序列号 sendSeq 为 8 位,对应最大序列号(10 进制)
为 0-255,
滑动窗口设为 16,也是 256 的整数倍,注意此处若更改窗口大小为 1,则 GBN