我是靠谱客的博主 灵巧楼房,最近开发中收集的这篇文章主要介绍【计网】代码实现:TCP拥塞控制算法编程实验(结合matplotlib折线图输出结果),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

声明:本文仅提供一个思路,因本人较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折线图输出结果)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部