计算机网络报告-rdt3.0
在我的学习博客 可靠数据传输原理 rdt3.0 中,我已经详细介绍了 rdt3.0 的发送方和接收方的有限状态机,并且介绍了 GBN 和 SR 的原理。
报文类
我们把packet 抽象出来单独写一个类。在这个类中,我们提供了一些方法——生成包的方法生成和检验校验和的方法,解析报文的方法,模拟包报文出错的方法
1 | package com.company; |
网络层搭建
要实现rdt 3.0 我们首先要搭建一个底层的网络层,作为传输信道。它的作用就是连接两个”主机端“,这里,发送者和接收者用同一主机上的两个进程来模拟。这样,发送者和接收者就可以通过”网络层”来相互传递消息了。
1 | package com.company; |
将接收到的套接字传送给MessageThread类,为了模拟出 检验和出现错误、丢包的情况,我们这里需要分类来写:
1 |
|
发送者
1 | package com.company; |
接收者
1 | package com.company; |
结果:
network
这是运输通道的打印信息,我们看到,第一个packet0是顺利通过的,第二个packet1的第一次发送出现了包错误,因此返回了一个ACK0, 重发后通过。第三个包出现了两次丢包和两次出错,最后通过。
receiver
这是接收者的打印信息,我们看到出现丢包的话,接收者是收不到的,但是如果出现包错误,那么接收者会返回一个不同的ACK序号通知发送者重发
sender
这是发送者的打印信息,如果出现丢包或者包错误,会等待后重新发送,同时记录发送包的次数