学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx

上传人:b****2 文档编号:17192985 上传时间:2023-07-22 格式:DOCX 页数:75 大小:1.28MB
下载 相关 举报
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第1页
第1页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第2页
第2页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第3页
第3页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第4页
第4页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第5页
第5页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第6页
第6页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第7页
第7页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第8页
第8页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第9页
第9页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第10页
第10页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第11页
第11页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第12页
第12页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第13页
第13页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第14页
第14页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第15页
第15页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第16页
第16页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第17页
第17页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第18页
第18页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第19页
第19页 / 共75页
学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx_第20页
第20页 / 共75页
亲,该文档总共75页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx

《学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx》由会员分享,可在线阅读,更多相关《学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx(75页珍藏版)》请在冰点文库上搜索。

学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题.docx

学士学位论文网络小说与电视剧改编之间的叙事策略和审美问题

网络仿真和模拟课程设计实验报告

学院:

计算机学院

专业:

网络工程

组员(学号):

指导老师:

完成时间2016年6月30日

目录

网络仿真和模拟课程设计实验报告1

目录2

一、NS2模拟环境搭建1

1.1安装cygwin1

1.2安装NS26

二、不同版本的TCP协议仿真模拟9

2.1实验目的9

2.1实验步骤9

2.2实验过程及结果比较9

三、添加Ping协议16

3.1实验目的16

3.2实验步骤16

四、添加Application和Agent协议21

4.1实验目的21

4.2实验步骤21

附录A27

附录B30

附录C34

附录D44

附录E45

附录F48

一、NS2模拟环境搭建

在Windows操作系统下安装比较繁琐,需要根据NS不同版本,下载相关补丁进行修正。

下面介绍在Windows下安装NS-allinone过程。

1.1安装cygwin

1)点击安装setup.exe文件,如图1所示:

图1执行setup.exe文件

2)请点击“下一步”按钮,如图2所示:

图2安装步骤2

3)选择“InstallfromInternet”单选按钮,如图3所示:

图3安装步骤3

4)点击“下一步”按钮,如图4所示:

图4安装步骤4

5)点击“下一步”按钮,如图5所示:

图5安装步骤5

6)点击“下一步”按钮,如图6所示:

图6安装步骤6

7)点击“下一步”按钮,如图7所示:

图7安装步骤7

8)点击“下一步”按钮,如图8所示:

图8安装步骤8

9)选择“Curr”,点击“View”按钮,使右方出现“full”,然后把最下角的隐藏过期包组件那个勾去掉,如图9所示:

图9安装步骤9

10)由于是初次接触该软件,在不清楚各个包作用的情况下将所有的包都安装,然后点击“下一步”按钮,如图10所示:

图10安装步骤10

11)安装结束后,点击“完成”按钮,如图11所示:

图11安装步骤11

1.2安装NS2

1)解压缩并改变路径到ns-allinone-2.35,如图12所示:

图12切换到NS目录

2)修改ls.h错误代码行(进入C:

cygwinhome/Administartor/ns-allinone-2.35/ns-2.35/linkstate/ls.h第137行):

3)安装指令,进行编译安装,如图13所示:

图13进行编译安装

4)重新编译完后,如图14所示:

图14编译结果

5)设置环境变量:

6)测试NS2是否安装成功,如图15所示:

图15进入图形化接口窗口

7)在跳出的对话框中,输入nam,系统跳出一个图形界面,如图16所示:

图16Nam界面

8)在窗口中输入gnuplot,结果如图17所示,则NS2安装成功:

图17gnuplot界面

二、不同版本的TCP协议仿真模拟

2.1实验目的

通过本实验了解如何利用OTcl脚本编写NS仿真案例。

2.1实验步骤

●NS2下不同版本的TCP协议的OTcl脚本编写。

●在winx-server模式下键入命令:

ns<文件名.tcl>运行ns文件。

●对实验结果进行分析比较。

2.2实验过程及结果比较

⏹Tahoe执行方法,如下所示:

1.

nslab11.tclTahoe(lab11.tcl文件代码参考附录A,TCPV1)

2.gnuplot进入gnuplot>提示符

 

会在目录下生成gif图片,见下面图片比较。

⏹Reno执行方法,如下所示:

⏹NewReno执行方法,如下所示:

(lab12.tcl)

⏹SACK执行方法,如下所示:

⏹Vegas执行方法,如下所示:

(lab13_1.tcl)

gnuplot>settitle“Vegas”

gnuplot>setxlabel“time”

gnuplot>setylabel“cwnd”

gnuplot>setterminalgif

gnuplot>setoutput“cwnd-Vegas”

gnuplot>plot“cwnd0.tr”withlinespointslt1,“cwnd1.tr”withlinespointslt2

⏹Vegas和Re执行方法,如下所示:

(lab13_2.tcl)

1.nslab13_2.tcl

2.

gnuplot>settitle“VegasvsReno”

gnuplot>setxlabel“time”

gnuplot>setylabel“cwnd”

gnuplot>setterminalgif

gnuplot>setoutput“cwnd-Vegas-Reno”

gnuplot>plot“cwnd-vegas.tr”withlinespointslt1,“cwnd-reno.tr”withlinespointslt

⏹结果比较

图16Tahoe的cwnd变化图

图17Reno的cwnd变化图

图18TCPNewReno

图19SACK

图20Vegas图形

图21Vegas与Reno的cwnd变化图

⏹结果分析

从Tahoe的cwnd变化图(图16)中我们可以看出,TCP的CongestionWindow值会呈现周期性的重复变化。

开始时,先由Slow-start开始,cwnd超过Ssthresh时进入CongestionAvoidance阶段。

由于传送到网络上的封包不断地增加,当超出允许能传送到网络上的个数时,路由器开始使用Drop-tail将封包丢掉。

当有封包遗失时,Tahoe这个TCP版本会将ssthresh设为发现到封包遗失时的Window值的1/2,接着将Window的值设为1。

在Tahoe这个例子中,由于只要有封包遗失,Cwnd的值就会被重置为1(小于Ssthresh),因此每次封包遗失,Tahoe都重新由slow-start开始。

从Reno的cwnd变化图(图17)中看到,当检测到封包遗失时,ssthresh和cwnd的值会被设为先前cwnd值的1/2。

因此在重送遗失的封包后,TCPReno会由CongestionAvoidance开始。

由于结束Fastrecovery后,Reno的cwnd由先前cwnd值的1/2开始增加,所以得到的平均吞吐量较Tahoe为佳。

从该图中我们还可以看到,当TCP的传送端观察到端点到端点的路径并没有拥塞的情况时(没有检测到封包遗失),会持续地以累加的方式增加传送速率。

但是当检测到路径拥塞的情况时,则以倍数的方式减少传送速率。

基于上述原因,TCP的拥塞控制算法又常被称为累加递增-倍数递减的算法。

从TCPNewReno的cwnd变化图(图18)中我们可以看到,NewReno在收到PartialACK时,并不会立刻结束Fast-recovery,相反,NewReno的传送端会持续地重送PartialACK之后的封包,直到将所有遗失的封包重送后才会结束Fast-recovery,这使得NewReno的传送端在网络有大量封包遗失时不需等待Timeout就能更正此错误,减少大量封包遗失对传输效果所造成的影响。

NewReno大约每一个RTT时间可重送一个遗失的封包,在Fast-recovery阶段,若允许的话,传送端可以继续送出新的封包,以增加Link的使用率。

从TCPSACK的cwnd变化图(图19)中我们可以看到,在这个版本中,加入了一个SACK选项,允许接收端在返回DuplicateACK时,将已接收到的数据区段(连续收到的数据范围)返回给传送端,数据区段与数据区段之间的间隔就是接收端没有收到的数据。

通过这些信息,传送端就知道哪些是已经收到的,哪些是该重送的,因此SACK的传送端可以在一个RTT时间之内重送一个以上的封包。

从Vegas的图形(图20)中可以看到,第一条Vegas从0s开始执行,10s时结束。

第二条Vegas在5s时才开始执行,10s时结束。

从图中我们还可以看到,在Slow-start阶段,cwnd的值大约两个RTT才会增加1倍。

与Reno不同的是,当Diff的值介于α与β之间时,Vegas的cwnd会持续维持在一个稳定的状态,这是因为,基本上Vegas的拥塞控制算法是一种“拥塞避免”的方法。

从Vegas与Reno的cwnd的变化图(图21)中可以看到,Reno的Window总是在较高的地方振荡,而Vegas的Window总是在较低的位置。

虽然根据研究显示,当网络的通信都使用TCPVegas时,整体的执行效果会优于TCPReno,这是因为TCPVegas采取较为保守的作法避免封包遗失,并以此提高网络的执行效果。

但当TCPVegas和Reno共存时,TCPVegas并没有办法与TCPReno公平地竞争频宽。

造成这个问题的主要原因是,Reno使用了较具侵略性的拥塞控制方法,TCPReno的传送端会持续地将封包送到网络上直到发生拥塞。

比较之下,Vegas的传送端在网络开始拥塞时就将传送端的传送速度降慢,以避免拥塞的情形发生。

因此,当TCPVegas与TCPReno共存Vegas在效果上的表现总是会比较差。

三、添加Ping协议

3.1实验目的

本实验通过实现一个Ping协议来说明如何在NS2中添加新协议

3.2实验步骤

一、

在ns-2.35目录下新建一个MyPing目录,将老师给的文件MyPing.h和MyPing.cc放到这个目录里下。

这两个文件见附录D和E。

(红色字体为修订处)

文件说明:

MyPing.h中:

定义了包头结构:

structhdr_ping{

charret;

doublesend_time;

};

定义PingAgent类

classPingAgent:

publicAgent{

public:

PingAgent();

intcommand(intargc,constchar*const*argv);

voidrecv(Packet*,Handler*);

protected:

intoff_ping_;

};

MyPing.cc中:

定义PingHeaderClass类

staticclassPingHeaderClass:

publicPacketHeaderClass{

public:

PingHeaderClass():

PacketHeaderClass("PacketHeader/Ping",

sizeof(hdr_ping)){}

}class_pinghdr;

定义PingClass类

staticclassPingClass:

publicTclClass{

public:

PingClass():

TclClass("Agent/Ping"){}

TclObject*create(int,constchar*const*){

return(newPingAgent());

}

}class_ping;

定义PingAgent的实现

PingAgent:

:

PingAgent():

Agent(PT_PING){

bind("packetSize_",&size_);

bind("off_ping_",&off_ping_);

}

intPingAgent:

:

command(intargc,constchar*const*argv){

if(argc==2){

if(strcmp(argv[1],"send")==0){

}

}

return(Agent:

:

command(argc,argv));

}

voidPingAgent:

:

recv(Packet*pkt,Handler*){

}

二、

修改ns-2.35/common/packet.h文件

如图找到相应的地方添加修改:

(代码前面的+表示添加,-表示删除,下同)

三、

编辑ns-2.35/tcl/lib/ns-default.tcl

增加一行Agent/MyPingsetpacketSize_64

四、

编辑ns-2.35/Makefile文件

如图在OBJ_CC下添加一行

五、

Makefile目录下编译文件

makeclean

makedepend

make

六、

编写测试的TCL代码

#Createasimulatorobject

setns[newSimulator]

#Openatracefile

setnf[openout.namw]

$nsnamtrace-all$nf

#Definea'finish'procedure

procfinish{}{

globalnsnf

$nsflush-trace

close$nf

execnamout.nam&

exit0

}

#Createthreenodes

setn0[$nsnode]

setn1[$nsnode]

setn2[$nsnode]

#Connectthenodeswithtwolinks

$nsduplex-link$n0$n11Mb10msDropTail

$nsduplex-link$n1$n21Mb10msDropTail

#Definea'recv'functionfortheclass'Agent/MyPing'

Agent/MyPinginstprocrecv{fromrtt}{

$selfinstvarnode_

puts"node[$node_id]receivedpinganswerfrom\

$fromwithround-trip-time$rttms."

#}

#Createtwopingagentsandattachthemtothenodesn0andn2

setp0[newAgent/MyPing]

$nsattach-agent$n0$p0

setp1[newAgent/MyPing]

$nsattach-agent$n2$p1

#Connectthetwoagents

$nsconnect$p0$p1

#Scheduleevents

$nsat0.2"$p0send"

$nsat0.4"$p1send"

$nsat0.6"$p0send"

$nsat0.6"$p1send"

$nsat1.0"finish"

#Runthesimulation

$nsrun

七、运行代码

四、添加Application和Agent协议

4.1实验目的

本部分通过编写一个UDP上的multimediaApplication来说明如何添加Application和Agent

4.2实验步骤

一、

在ns-2.35下新建目录Multimedia,将udp-mm.cc,udp-mm.h,mm-app.cc,mm-app.h四个文件放到该目录下,这四个文件详细见附录F。

文件说明:

其中定义包头结构

编写MmAppSender

编写MmAppReceiver

具体见附录。

编写UdpMmAgent

UdpMmAgent继承了UdpAgent,添加了部分功能。

具体见附录。

 

二、

修改ns-2.35/packet.h

在如图两处,各添加一行,并做相应修改。

三、

修改ns-2.35/tcl/lib/ns-packet.tcl

在protolist里添加

四、

修改ns-2.35/common/agent.h

五、

修改ns-2.35/apps/app.h:

六、

在ns-2.35/tcl/lib/ns-default.tcl中设置新参数的默认值

七、

编辑ns-2.35/Makefile:

八、

在Makeflie目录下编译:

makeclean

makedepend

make

九、运行

编写测试的TCL代码。

见附录F:

ex-mm-app.tcl

十、

运行程序

nsex-mm-app.tcl

附录A

TCPV1代码

if{$argc!

=1}{

puts"Usage:

nslab11.tclTCPversion"

puts"Example:

nslab11.tclTahoeornslab11.tclReno"

exit

}

setpar1[lindex$argv0]

#产生一个仿真的对象

setns[newSimulator]

$nscolor1Blue

#开启一个tracefile,用来记录封包传送的过程

setnd[openout-$par1.trw]

$nstrace-all$nd

setnf[openout-$par1.namw]

$nsnamtrace-all$nf

#开启一个档案用来记录cwnd变化情况

setf0[opencwnd-$par1.trw]

#定义一个结束的程序

procfinish{}{

globalnsndnff0tcppar1

#显示最后的平均吞吐量

puts[format"averagethroughput:

%.1fKbps"\

[expr[$tcpsetack_]*([$tcpsetpacketSize_])*8/1000.0/10]]

$nsflush-trace

#关闭档案

close$nd

close$nf

close$f0

execnamout-$par1.nam&

exit0

}

#定义一个记录的程序

#每格0.01秒就去记录当时的cwnd

procrecord{}{

globalnstcpf0

setnow[$nsnow]

puts$f0"$now[$tcpsetcwnd_]"

$nsat[expr$now+0.01]"record"

}

 

#产生传送节点,路由器r1,r2和接收节点

setn0[$nsnode]

setr0[$nsnode]

setr1[$nsnode]

setn1[$nsnode]

#建立链路

$nsduplex-link$n0$r010Mb1msDropTail

$nsduplex-link$r0$r11Mb4msDropTail

$nsduplex-link$r1$n110Mb1msDropTail

$nsduplex-link-op$n0$r0orientright

$nsduplex-link-op$r0$r1orientright

$nsduplex-link-op$r1$n1orientright

$nsduplex-link-op$r0$r1queuePos0.5

#设定队列长度为18个封包大小

setqueue18

$nsqueue-limit$r0$r1$queue

#根据使用者的设定,指定TCP版本

if{$par1=="Tahoe"}{

settcp[newAgent/TCP]

}else{

settcp[newAgent/TCP/Reno]

}

$nsattach-agent$n0$tcp

settcpsink[newAgent/TCPSink]

$nsattach-agent$n1$tcpsink

$nsconnect$tcp$tcpsink

$tcpsetfid_1

#建立FTP应用程序

setftp[newApplication/FTP]

$ftpattach-agent$tcp

#在0.0秒时,开始传送

$nsat0.0"$ftpstart"

#在10.0秒时,结束传送

$nsat10.0"$ftpstop"

#在0.0秒时去呼叫record来记录TCP的cwnd变化情况

$nsat0.0"record"

#在第10.0秒时去呼叫finish来结束模拟

$nsat10.0"finish"

#执行模拟

$nsrun

附录B

TCPV2代码

if{$argc!

=1}{

puts"Usage:

nslab12.tclTCPversion"

puts"Example:

nslab12.tclRenoornslab12.tclNewrenoornslab12.tclSack"

exit

}

setpar1[lindex$argv0]

#产生一个仿真的对象

setns[newSimulator]

#开启一个tracefile,用来记录封包传送的过程

setnd[openout-$par1.trw]

$nstrace-all$nd

#开启一个档案用来记录cwnd变化情况

setf0[opencwnd-$par1.trw]

#定义一个结束的程序

procfinish{}{

globalnsndf0tcppar1

#显示最后的平均吞吐量

puts[format"averagethroughput:

%.1fKbps"\

[expr[$tcpsetack_]*([$tcpsetpacketSize_])*8/1000.0/10]]

$nsflush-trace

#关闭档案

close$nd

close$f0

#使用awk分析记录文件以观察队列的变化

execawk{

BEGIN{

highest_packet_id=-1;

packet_count=0;

q_eln=0;

}

{

action=$1;

time=$2;

src_node=$3;

dst_node=$4;

type=$5;

flow_id=$8;

seq_no=$11;

packet_id=

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2