概述
声明:本文仅提供一个思路,因本人较lan,且近期时间匆忙,因此代码实现有许多不足制之处(详情见正文 四、不足之处 )
文章目录
- 一、实验需求
- 二、测试效果
- 测试用例一
- 测试用例二
- 三、完整代码
- 四、不足之处
一、实验需求
掌握TCP进行拥塞控制的四种算法:慢开始、拥塞避免、快重传、快恢复的工作原理,编程实现拥塞控制算法。
程序输入:
(1)拥塞窗口cwin;
(2)初始阈值ssthresh;
(3)判断报文段丢失的依据(超时?三个重复确认?)
(4)(…自行设定额外输入项)
程序输出:
(1)输出前i轮次拥塞窗口的值。
(2)画图描述出拥塞窗口的变化曲线。
声明:因涉及图像结果的输出,选用 Python 较为方便。
二、测试效果
测试用例一
测试数据输入:
- 初始拥塞窗口大小:1
- 初始阈值大小:16
- 超时发生时的传输轮次(没有则输-1):12
- 重传发生时的传输轮次(没有则输-1):-1
- 传输轮次:22
程序输出如下:
测试用例二
测试数据输入:
- 初始拥塞窗口大小:1
- 初始阈值大小:16
- 超时发生时的传输轮次(没有则输-1):12
- 重传发生时的传输轮次(没有则输-1):21
- 传输轮次:26
程序输出如下:
三、完整代码
import numpy as np
from matplotlib import pyplot as plt
#程序输入-------
'''测试数据
1
16
12
-1
22
1
16
12
21
26
'''
cwin = eval(input('请输入初始拥塞窗口大小:')) #拥塞窗口
ssthresh = eval(input('请输入初始阈值大小:')) #初始阈值
#是否超时 >0-True -1-False
ifTimeoutRoundIndex = eval(input('请输入超时发生时的传输轮次(没有则输-1):')) #超时发生时的传输轮次
#是否重传 >0-True -1-False
ifReTransmissionRoundIndex = eval(input('请输入重传发生时的传输轮次(没有则输-1):')) #重传发生时的传输轮次
roundCount = eval(input("请输入传输轮次:")) #传输轮次
#算法----------
listXResult = [] #后期绘图用的x坐标集(此处直接用roundCount算出也可以)
listYResult = [] #后期绘图用的y坐标集
for roundIndex in range(roundCount):
print("第", roundIndex, "轮:", ",拥塞窗口大小:", cwin)
#图:收集x, y坐标
listXResult.append(roundIndex)
listYResult.append(cwin)
#先判断,是否超时或重传------------
#---若超时--->转-慢开始
if (roundIndex == ifTimeoutRoundIndex):
ssthresh = cwin // 2
cwin = 1
continue
#---若重传--->转-快重传
if (roundIndex == ifReTransmissionRoundIndex):
ssthresh = cwin // 2
cwin = ssthresh
#--------------------------------
#+++++++慢开始
#【拥塞窗口 < 初始阈值】
if (cwin < ssthresh):
cwin *= 2
#避免因x2而越界
if (cwin > ssthresh):
cwin = ssthresh
#+++++++拥塞避免
#【拥塞窗口 > 初始阈值 且 当前轮次 < 超时发生时的传输轮次】
elif (cwin >= ssthresh):
cwin += 1
#程序输出-------
# print("----------------------------------")
# print(listXResult)
# print(listYResult)
plt.xlabel("传输次数 roundIndex")
plt.ylabel("拥塞窗口 cwin")
plt.plot(listXResult, listYResult, 'r')
plt.grid()#添加网格
plt.show()
四、不足之处
因近期时间匆忙
- 未进行用户输入的检验,读者可自行弥补此缺点
- 未更改plt输出图的中文编码
- 为设置多个超时,多个阻塞的情况
- …读者自行更改即可,本文仅提供一个思路
最后
以上就是灵巧楼房为你收集整理的【计网】代码实现:TCP拥塞控制算法编程实验(结合matplotlib折线图输出结果)的全部内容,希望文章能够帮你解决【计网】代码实现:TCP拥塞控制算法编程实验(结合matplotlib折线图输出结果)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复