我是 Stack Overflow(软件开发人员)的常客,正在尝试通过网络课程。我有一个家庭作业问题,我想检查一下。这是我得到的。
问:
一条 3000 公里长的 T1 中继用于使用 Go-Back-N 协议传输 64 字节的帧。如果传播速度为 6 微秒/公里,序列号应该是多少位?
我的答案:
对于这个问题,我们需要做的是奠定基础知识。我们试图找到的是我们应该使用 Go-Back-N 的最大序列号的大小。为了弄清楚这一点,我们需要计算一次可以容纳多少数据包到我们的链路中,然后从该数字中减去一个。这将确保我们永远不会在链接中同时有两个具有相同序列号的数据包。
链接长度:3,000km 速度:6 微秒/km 帧大小:64 字节 T1 传输速度:1544kb/s ( http://ckp.made-it.com/t1234.html )
传播时间 = 6 微秒 / km * 3000 km = 18,000 微秒 (18ms)。将 1544kb 转换为字节 = 1544 * 1024 = 1581056 字节传输时间 = 64 字节 / 1581056 字节 / 秒 = 0.000040479 秒 (0.4ms)
因此,如果我们将 18 毫秒的传播时间除以 0.4 毫秒的传输时间,我们将看到我们将能够一次将 (18 / 0.4) 45 个数据包填充到链路中。这意味着我们的序列号应该是 2 ^ 45 位长!
我是否朝着正确的方向前进?
谢谢,迈克
我不同意这个推理。没有两个具有相同序列号的数据包的点将通过协议实体不发送窗口外的帧来实现。您应该区分窗口大小、
N
和序列号范围。对一个只有 5 帧的窗口使用 32 位序列号没有问题,尽管这当然不是最佳的。如果一个方向的传输时间是 18 毫秒,那么您将有一个 RTT,往返时间,18 毫秒 + 接收端处理时间 + 18 毫秒。我不知道在这种情况下哪些处理时间值是合理的,所以为了简单起见,我们假设为零。这给出了 36 毫秒的 RTT。这意味着从您发送帧的那一刻起,(在最好的情况下)需要 38 毫秒才能获得该帧的确认。这决定了在决定窗口大小时有意义的未完成数据的上限。如果您有更大的窗口大小,它只会填充发送端的传输缓冲区,而不会影响吞吐量。很可能还有其他因素(例如接收端的缓冲区大小)进一步限制了窗口,但由于没有给出这方面的信息,让'
为了获得最佳(吞吐量)性能,窗口应该足够大,以便发送方可以连续发送 38 毫秒。T1 速度为每秒 193000 字节。每帧 64 字节对应于每秒 3015.625 帧。0.038 乘以 3015.625 得到 114.59375。也就是说,在 38 毫秒内您可以发送 114 帧。因此,可以选择比理论最大值稍大的窗口大小(例如 115-120)(这样限制因素是物理链路而不是窗口大小)。序列号范围必须大于窗口大小,在这种情况下,128 是一个接近的最大值。
所以你的问题的答案是,在这种情况下,你需要至少 7 位的序列号。另请参阅此处了解交互式 go-back-n java 小程序。