大作业 NS2中TCP源代码分析.docx

上传人:b****2 文档编号:2300852 上传时间:2023-05-03 格式:DOCX 页数:89 大小:49.29KB
下载 相关 举报
大作业 NS2中TCP源代码分析.docx_第1页
第1页 / 共89页
大作业 NS2中TCP源代码分析.docx_第2页
第2页 / 共89页
大作业 NS2中TCP源代码分析.docx_第3页
第3页 / 共89页
大作业 NS2中TCP源代码分析.docx_第4页
第4页 / 共89页
大作业 NS2中TCP源代码分析.docx_第5页
第5页 / 共89页
大作业 NS2中TCP源代码分析.docx_第6页
第6页 / 共89页
大作业 NS2中TCP源代码分析.docx_第7页
第7页 / 共89页
大作业 NS2中TCP源代码分析.docx_第8页
第8页 / 共89页
大作业 NS2中TCP源代码分析.docx_第9页
第9页 / 共89页
大作业 NS2中TCP源代码分析.docx_第10页
第10页 / 共89页
大作业 NS2中TCP源代码分析.docx_第11页
第11页 / 共89页
大作业 NS2中TCP源代码分析.docx_第12页
第12页 / 共89页
大作业 NS2中TCP源代码分析.docx_第13页
第13页 / 共89页
大作业 NS2中TCP源代码分析.docx_第14页
第14页 / 共89页
大作业 NS2中TCP源代码分析.docx_第15页
第15页 / 共89页
大作业 NS2中TCP源代码分析.docx_第16页
第16页 / 共89页
大作业 NS2中TCP源代码分析.docx_第17页
第17页 / 共89页
大作业 NS2中TCP源代码分析.docx_第18页
第18页 / 共89页
大作业 NS2中TCP源代码分析.docx_第19页
第19页 / 共89页
大作业 NS2中TCP源代码分析.docx_第20页
第20页 / 共89页
亲,该文档总共89页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

大作业 NS2中TCP源代码分析.docx

《大作业 NS2中TCP源代码分析.docx》由会员分享,可在线阅读,更多相关《大作业 NS2中TCP源代码分析.docx(89页珍藏版)》请在冰点文库上搜索。

大作业 NS2中TCP源代码分析.docx

大作业NS2中TCP源代码分析

NS2中TCP源代码分析

1:

NS2简介

NS2是一个开放源码的多协议网络模拟软件,来源于1989年的RealNetworkSimulator项目,经过多年的发展,于1995年得到施乐公司(Xerox)的支持,加入VINT项目。

NS2一直以来都在吸收世界各地研究者的成果,包括UCB、CMU等大学和SUN等公司的无线网络方面的代码,因此NS2一直都在不断的被更新和完善。

NS2是一个面向对象的、离散事件驱动的网络环境模拟工具,可以完整地模拟整个网络环境。

NS2使用一整套C++类库实现了绝大多数常见的网络协议以及链路层的模型,如:

有线网络或无线网络的TCP、UDP、路由、多播等多种协议模型,利用这些类库的实例就可以搭建起整个网络的模型,而且包括详尽的细节实现。

NS2使用了两种编程语言,OTcl(具有面向对象特性的Tcl脚本程序设计语言)和C++,NS2采用这两种语言是因为仿真工具有两方面的事情要做:

一方面,具体协议的模拟和实现,这需要一种能高效率的处理字节、报头等信息的程序设计语言,即对运行速度非常重要,而运行模拟环境的时间、寻找和修复Bug的时间,以及重新编译和运行的时间不是很重要,在这种情况下,C++语言是非常合适的;另一方面,许多网络中的实验或研究工作主要是围绕着网络组件和环境的具体参数的设置和改变而进行的,需要在短时间内快速的开发或模拟出所需要的网络环境,并且方便的修改和发现,在这种情况下,网络环境设置的时间就显得重要了,而脚本语言在这方面有很大的优势,具有面向对象特性的Tcl脚本语言可以充分的满足此需求。

C++和OTcl两种语言的对象和变量是通过TclCL关联起来的,C++的类和对象为编译类和编译对象,相反地OTcl的类和对象为解释类和解释对象,TclCL是在OTcl基础上的封装。

通过下面的NS2架构图来理解几者之间的关系。

对NS2使用者来说,OTcl脚本语言用于实现网络拓扑部分,OTcl是架构在Tcl之上的面向对象后的延伸,事件调度器和网络组件这两部分主要用C++编写。

C++在最底层则是表示NS2的核心主要就是C++。

TclCL是连接OTcl和C++的桥梁,最后搭配用户接口就构成了NS2。

2:

NS2中TCP源码分析

在源码包中,TCP源码放置在ns-allinone-2.35\tcp文件夹里。

打开tcp.cc

#include

#include

#include

#include"ip.h"

#include"tcp.h"

#include"flags.h"

#include"random.h"

#include"basetrace.h"

#include"hdr_qs.h"

inthdr_tcp:

:

offset_;

staticclassTCPHeaderClass:

publicPacketHeaderClass{

public:

TCPHeaderClass():

PacketHeaderClass("PacketHeader/TCP",

sizeof(hdr_tcp)){

bind_offset(&hdr_tcp:

:

offset_);

}

}class_tcphdr;

staticclassTcpClass:

publicTclClass{

public:

//存储类名Agent/TCP至classname_

TcpClass():

TclClass("Agent/TCP"){}

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

return(newTcpAgent());

}

}class_tcp;

TcpAgent:

:

TcpAgent()

:

Agent(PT_TCP),

t_seqno_(0),t_rtt_(0),t_srtt_(0),t_rttvar_(0),

t_backoff_(0),ts_peer_(0),ts_echo_(0),

tss(NULL),tss_size_(100),

rtx_timer_(this),delsnd_timer_(this),burstsnd_timer_(this),

dupacks_(0),curseq_(0),highest_ack_(0),cwnd_(0),ssthresh_(0),

maxseq_(0),count_(0),rtt_active_(0),rtt_seq_(-1),rtt_ts_(0.0),

lastreset_(0.0),closed_(0),first_decrease_

(1),fcnt_(0),

nrexmit_(0),restart_bugfix_

(1),cong_action_(0),

ecn_burst_(0),ecn_backoff_(0),ect_(0),

qs_requested_(0),qs_approved_(0),

qs_window_(0),qs_cwnd_(0),frto_(0),debug_(0)

{

#ifdefTCP_DELAY_BIND_ALL

#else/*!

TCP_DELAY_BIND_ALL*/

//notdelay-boundbecausedelay-boundtracevarsaren'tyetsupported

bind("t_seqno_",&t_seqno_);

bind("rtt_",&t_rtt_);

bind("srtt_",&t_srtt_);

bind("rttvar_",&t_rttvar_);

bind("backoff_",&t_backoff_);

bind("dupacks_",&dupacks_);

bind("seqno_",&curseq_);

bind("ack_",&highest_ack_);

bind("cwnd_",&cwnd_);

bind("ssthresh_",&ssthresh_);

bind("maxseq_",&maxseq_);

bind("ndatapack_",&ndatapack_);

bind("ndatabytes_",&ndatabytes_);

bind("nackpack_",&nackpack_);

bind("nrexmit_",&nrexmit_);

bind("nrexmitpack_",&nrexmitpack_);

bind("nrexmitbytes_",&nrexmitbytes_);

bind("necnresponses_",&necnresponses_);

bind("ncwndcuts_",&ncwndcuts_);

bind("ncwndcuts1_",&ncwndcuts1_);

bind("debug_",&debug_);//addedbysmallko

#endif/*TCP_DELAY_BIND_ALL*/

}

void

TcpAgent:

:

delay_bind_init_all()

{

//Defaultsforboundvariablesshouldbesetinns-default.tcl.

delay_bind_init_one("window_");

delay_bind_init_one("windowInit_");

delay_bind_init_one("windowInitOption_");

delay_bind_init_one("syn_");

delay_bind_init_one("windowOption_");

delay_bind_init_one("windowConstant_");

delay_bind_init_one("windowThresh_");

delay_bind_init_one("delay_growth_");

delay_bind_init_one("overhead_");

delay_bind_init_one("tcpTick_");

delay_bind_init_one("ecn_");

delay_bind_init_one("SetCWRonRetransmit_");

delay_bind_init_one("old_ecn_");

delay_bind_init_one("eln_");

delay_bind_init_one("eln_rxmit_thresh_");

delay_bind_init_one("packetSize_");

delay_bind_init_one("tcpip_base_hdr_size_");

delay_bind_init_one("ts_option_size_");

delay_bind_init_one("bugFix_");

delay_bind_init_one("bugFix_ack_");

delay_bind_init_one("bugFix_ts_");

delay_bind_init_one("lessCareful_");

delay_bind_init_one("slow_start_restart_");

delay_bind_init_one("restart_bugfix_");

delay_bind_init_one("timestamps_");

delay_bind_init_one("ts_resetRTO_");

delay_bind_init_one("maxburst_");

delay_bind_init_one("aggressive_maxburst_");

delay_bind_init_one("maxcwnd_");

delay_bind_init_one("numdupacks_");

delay_bind_init_one("numdupacksFrac_");

delay_bind_init_one("exitFastRetrans_");

delay_bind_init_one("maxrto_");

delay_bind_init_one("minrto_");

delay_bind_init_one("srtt_init_");

delay_bind_init_one("rttvar_init_");

delay_bind_init_one("rtxcur_init_");

delay_bind_init_one("T_SRTT_BITS");

delay_bind_init_one("T_RTTVAR_BITS");

delay_bind_init_one("rttvar_exp_");

delay_bind_init_one("awnd_");

delay_bind_init_one("decrease_num_");

delay_bind_init_one("increase_num_");

delay_bind_init_one("k_parameter_");

delay_bind_init_one("l_parameter_");

delay_bind_init_one("trace_all_oneline_");

delay_bind_init_one("nam_tracevar_");

delay_bind_init_one("QOption_");

delay_bind_init_one("EnblRTTCtr_");

delay_bind_init_one("control_increase_");

delay_bind_init_one("noFastRetrans_");

delay_bind_init_one("precisionReduce_");

delay_bind_init_one("oldCode_");

delay_bind_init_one("useHeaders_");

delay_bind_init_one("low_window_");

delay_bind_init_one("high_window_");

delay_bind_init_one("high_p_");

delay_bind_init_one("high_decrease_");

delay_bind_init_one("max_ssthresh_");

delay_bind_init_one("cwnd_range_");

delay_bind_init_one("timerfix_");

delay_bind_init_one("rfc2988_");

delay_bind_init_one("singledup_");

delay_bind_init_one("LimTransmitFix_");

delay_bind_init_one("rate_request_");

delay_bind_init_one("qs_enabled_");

delay_bind_init_one("tcp_qs_recovery_");

delay_bind_init_one("qs_request_mode_");

delay_bind_init_one("qs_thresh_");

delay_bind_init_one("qs_rtt_");

delay_bind_init_one("frto_enabled_");

delay_bind_init_one("sfrto_enabled_");

delay_bind_init_one("spurious_response_");

#ifdefTCP_DELAY_BIND_ALL

//outbecausedelay-boundtracevarsaren'tyetsupported

delay_bind_init_one("t_seqno_");

delay_bind_init_one("rtt_");

delay_bind_init_one("srtt_");

delay_bind_init_one("rttvar_");

delay_bind_init_one("backoff_");

delay_bind_init_one("dupacks_");

delay_bind_init_one("seqno_");

delay_bind_init_one("ack_");

delay_bind_init_one("cwnd_");

delay_bind_init_one("ssthresh_");

delay_bind_init_one("maxseq_");

delay_bind_init_one("ndatapack_");

delay_bind_init_one("ndatabytes_");

delay_bind_init_one("nackpack_");

delay_bind_init_one("nrexmit_");

delay_bind_init_one("nrexmitpack_");

delay_bind_init_one("nrexmitbytes_");

delay_bind_init_one("necnresponses_");

delay_bind_init_one("ncwndcuts_");

delay_bind_init_one("ncwndcuts1_");

#endif/*TCP_DELAY_BIND_ALL*/

delay_bind_init_one("debug_");//addedbysmallko

Agent:

:

delay_bind_init_all();

reset();

}

int

TcpAgent:

:

delay_bind_dispatch(constchar*varName,constchar*localName,TclObject*tracer)

{

if(delay_bind(varName,localName,"window_",&wnd_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"windowInit_",&wnd_init_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"windowInitOption_",&wnd_init_option_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"syn_",&syn_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"windowOption_",&wnd_option_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"windowConstant_",&wnd_const_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"windowThresh_",&wnd_th_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"delay_growth_",&delay_growth_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"overhead_",&overhead_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"tcpTick_",&tcp_tick_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"ecn_",&ecn_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"SetCWRonRetransmit_",&SetCWRonRetransmit_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"old_ecn_",&old_ecn_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"eln_",&eln_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"eln_rxmit_thresh_",&eln_rxmit_thresh_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"packetSize_",&size_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"tcpip_base_hdr_size_",&tcpip_base_hdr_size_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"ts_option_size_",&ts_option_size_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"bugFix_",&bug_fix_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"bugFix_ack_",&bugfix_ack_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"bugFix_ts_",&bugfix_ts_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"lessCareful_",&less_careful_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"timestamps_",&ts_option_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"ts_resetRTO_",&ts_resetRTO_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"slow_start_restart_",&slow_start_restart_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"restart_bugfix_",&restart_bugfix_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"maxburst_",&maxburst_,tracer))returnTCL_OK;

if(delay_bind_bool(varName,localName,"aggressive_maxburst_",&aggressive_maxburst_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"maxcwnd_",&maxcwnd_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"numdupacks_",&numdupacks_,tracer))returnTCL_OK;

if(delay_bind(varName,localName,"numdupacksFrac_",&numdupacksFrac_,tracer))

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

当前位置:首页 > 总结汇报 > 学习总结

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

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