Computer Networking:A Top-Down approach chapter 3 lab
在这次的实验当中,需要实现一个简单的可靠数据传输协议。(即比特交换协议版本与GBN版本)这是实验的要求
比特交换协议(alternating bit protocol)
比特交换协议简单来说,就是对于每个包都使用0和1来标记,一个一个包的确认可靠数据的传输。具体的操作就如同书中的状态机的表达那样。
这个协议的最大的缺点就是,当当前包的ACK确认收到之前,都是不能进行任何的操作的,大大的浪费了带宽。
在这里,我使用一个int标记以及switch的方式来实现这个自动机。如同书中的状态机一样,发送方发送seq而接受方根据seq来回馈确认的ack,最后,发送方依靠ack来切换自己的等待状态,使自己进入新的wait_call状态
1 |
|
GBN(go back n)
GBN与比特交换协议相比,多了一个滑动窗口,这样,在窗口内,都可以发送包,而不必一定要等到相应的ack应答。这样做大大改进了比特交换协议的浪费带宽的缺点。
不过,GBN也有一个问题,那就是,当超时(丢包,拥塞发生时)就会重传所有以发送但是未确认的包。但是,其中有些包可能是乱序到达了,从而导致了链路资源的浪费。(这个问题在TCP有优秀的解决方法)
首先,我先指定了一个64大小的窗口,由于GBN协议是不需要接收方也维护一个接受窗口的,因此,只需要依靠接收方回复的ACK来确认以接受的包的位置。然后,根据课本上的状态机的图,以及,处理ACK < base
,base < ACK < nextSeqNum
,ACK > nextSeqNum
的时候的操作,就可以了。
1 |
|
总结
总的来说,这个LAB并不难,但是挺有趣的,让我更加好的理解了这些协议,同时也感受到了TCP协议的优秀。