IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> HNU计网实验:实验三 TCP Tahoe与Reno 运行机制对比分析 -> 正文阅读

[系统运维]HNU计网实验:实验三 TCP Tahoe与Reno 运行机制对比分析

胡言乱语

“它能放吗?放不了,没这个能力知道吗?这样下去要拖五一了,清明拖完拖五一,再拖端午,接下来没假拖了。务实一点,你说它补到暑假能行吗?不行啊,还有小学期呢”
刚想吐槽输麻了的时候
诶?中南也不放了
我们通知还比他们早一点,这就直接赢麻了啊hhh

说些什么

之后的实验等结束了再补充吧,毕竟是核心课,不同班的验收进度也不同,所以现在写出来肯定有些不太合适
但是为什么要先写实验三嘞,大概就是早点写出来可以让更多的小伙伴少踩点雷吧
这里特别鸣谢一下我的大长腿室友

实验

前言

ubuntu的话还是用16.04那个版本比较好一点

配置

Oh my god!我亲爱的小伙伴们,难度你们还在按照前辈们的博客,痛苦地安装着各种依赖包,然后去下载安装包,再配置环境变量,然后为各种报错秃头,逐渐失去你的仪态你良好的品质你的头发嘛?
拜托,这样子超机车的好嘛?

事实证明,朴素的程序员往往习惯用朴素的指令来完成项目要求

sudo apt install ns2 gnuplot

如果这句话一下子解决了你所有的烦恼,答应我,请务必把它放到仅此于“奇变偶不变,符号看象限”的高度,好嘛?
于是我们成功完成了相关包的安装和配置

正式实验

老师给出的那个.tcl文件其实问题挺大的,至少它跑不通,比如什么puts后面没加空格,什么r0达成了n0,所以按照惯例贴出来一份正确的

if {$argc != 1} {
	puts "Usage: ns lab11.tcl TCPversion"
	puts "Example:ns lab11.tcl Tahoe or ns lab11.tcl Reno"
	exit
}

set par1 [lindex $argv 0]

#产生一个仿真的对象
set ns [new Simulator]

#打开一个trace file, 用来记录封包传送的过程
set nd [open out-$par1.tr w]
$ns trace-all $nd

#打开一个文件用来记录cwnd 变化情况
set f0 [open cwnd-$par1.tr w]

#定义一个结束的程序
proc finish {} {
	global ns nd f0 tcp
	#显示最后的平均吞吐量
	puts [format "average throughput:%1.f Kbps"\
		[expr [$tcp set ack_]* ([$tcp set packetSize_]) *8/1000.0/10]]
	$ns flush-trace
	#关闭文件
	close $nd 
	close $f0
	exit 0
}

#定义一个记录的程序
#每格0.01s就去记录当时的cwnd
proc record {} {
	global ns tcp f0

	set now [$ns now]
	puts $f0 "$now [$tcp set cwnd_]"
	$ns at [expr $now+0.01] "record"
}

#产生传送结点,路由器r1,r2和接收结点
set n0 [$ns node]
set r0 [$ns node]
set r1 [$ns node]
set n1 [$ns node]

#建立链路
$ns duplex-link $n0 $r0 10Mb 1ms DropTail
$ns duplex-link $r0 $r1 1Mb 4ms DropTail
$ns duplex-link $r1 $n1 10Mb 1ms DropTail

#设置队列长度为18个封包大小
set queue 18
$ns queue-limit $r0 $r1 $queue

#根据用户的设置,指定TCP版本
if {$par1 == "Tahoe"} {
	set tcp [new Agent/TCP]
} else {
	set tcp [new Agent/TCP/Reno]
}
$ns attach-agent $n0 $tcp

set tcpsink [new Agent/TCPSink]
$ns attach-agent $n1 $tcpsink

$ns connect $tcp $tcpsink

#建立FTP应用程序
set ftp [new Application/FTP]
$ftp attach-agent $tcp

#在0.0s时,开始传送
$ns at 0.0 "$ftp start"

#在10.0s时,结束传送
$ns at 10.0 "$ftp stop"

#在0.0s时调用record来记录TCP的cwnd变化情况
$ns at 0.0 "record"

#在第10.0s时调用finish来结束模拟
$ns at 10.0 "finish"

#执行模拟
$ns run

然后把这个复制到你的文件里,命名成lab3.tcl就行
执行命令

ns lab3.tcl Tahoe

会生成两个文件,其中cwnd-Tahoe.tr是这次实验需要用到的
注意!这里需要大写T!如果阅读它那个.tcl文件,就会看到如果输入的不是Tahoe的话,就生成的全是Reno的.tr文件。不要问我为什么知道,问就是爱过,被伤害过

然后使用gnuplot

gnuplot

在这个画图软件里依次输入指令

set title “Tahoe”

设置图像的标题

set xlabel “time”

设置横坐标为时间

set ylabel “cwnd”

设置纵坐标为拥塞窗口大小

set terminal gif

设置输出为gif格式

set output “cwnd-Tahoe.gif”

设置输出的文件名

plot “cwnd-Tahoe.tr” with linespoints

画图,引号内为上一步仿真结果的文件名
这样就可以得到图像了
在这里插入图片描述
同理换成Reno就可以执行得到Reno的图像了
在这里插入图片描述
分析什么的就不赘述了,课本讲得挺清晰的
不行,我必须要吐槽一句它中文版翻译的真的好有问题啊,明明应该是先修改阈值再修改拥塞窗口,结果他翻译顺序反了就搞得我当时困扰了好久好伐

问题

A.这个实验中只对cwnd的测量,没有对ACK帧的测量,能够能体现出“快重传”(不管在Tahoe还是在Reno中都有快重传这一特性的)这一特性吗?

Tahoe没有体现出快重传这一特性,从图片可以看出来不管是发生超时指示的丢包事件,还是发生3个冗余ACK指示的丢包事件,都是将cwnd减至1个MSS。
Reno体现出来了快重传这一特性,从图片中可以看出来TCP将cwnd设为出现数据包丢失时的值的1/2。因为发送端在收到冗余ACK后采用快速重传,而发生超时是采用慢启动策略,所以能体现。

B.为什么Reno版本在出现封包丢失后选择将ssthresh和cwnd都设为出现数据包丢失时的Windows值的1/2,而不是其它值呢?比如1/3,2/3?

如果在慢启动的第N个传输回合发生了丢包事件,那么我们可以知道最大的不产生丢包的拥塞窗口是在第N-1个传输回合,而由于慢启动是以指数增长,所以第n-1个传输回合的拥塞窗口是当前Windows值的1/2.
在查阅资料的过程中也有其他的发现,即ssthresh=max(FlightSize/2,2MSS),可以看出来ssthresh虽然是出现数据包丢失时的Windows值的1/2,但是也有最小值界限即2MSS。

C.本实验也没有详细对这两个版本的运行机制进行对比,例如分别在1、2、3和4个packet miss的情况下对协议进行分析,更真实的进行模拟,更能体现出Tahoe和Reno版本的平均吞吐率的差别。

这个不是在陈述这个实验的不足之处嘛???为什么需要修改.tcl代码实现啊???

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:19:35  更:2022-04-22 19:20:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:38:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码