亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcp-fast.c

?? fast_tcp的源代碼加上了自己對它的中文注釋
?? C
?? 第 1 頁 / 共 3 頁
字號:
/************************************************************************\
* TCP-FAST  NS2 Module                                         	*
* University of Melbourne April 2005                         		*
*                                                              	*
* Coding: Tony Cui and Lachlan Andrew                          	*
*                                                                      *
* Revision History                                                     *
* Version 1.1.3 (14 Jan, 2007)        					*
*     Make updating every other RTT the default, as in Linux		*
* Version 1.1.2                					*
*     Make FAST_CC_MIQ tunable						*
*     (using a mi_threshold_ (tunable TCL variable)  to replace it) 	*
*     Consider the calculation error when cwnd is an integer. Give	*
*     user 3 choices the calculate cwnd.(use integer without		*
*     considering calculation error (mode 0),  using integer 		*
*     with considering calculatioin error (mode 1) and using double	*
*     (mode 2).							*
*     Fix a bug in fast_cc: add acks_per_rtt++ in the function. 	*
*     Fix a bug in fast_cc: compare t_seqno and tcph->seqno() to       *
*     prevent t_seqno greater than tcph->seqno().			*
*     Allow user update cwnd every other rtt (default is every rtt)	*
* Version 1.1.1                                                        *
*     Set ECT bit correctly if ECN capable				*
* Version 1.1                                                          *
*     Add SACK function into Fast                                      *
*     Fix bug in output function which didn't consider SYN packets.    *
*     Fix bug in using INT_VARABLE_INVALID_VALUE instead of            *
*     DOUBLE_VARABLE_INVALID_VALUE                                     *
* Version 1.0.1 Released 13 November, 2004                             *
*     Fix bug in baseRTT_ estimation with pk loss                      *
* Version 1.0   Released 24 September, 2004                            *
\************************************************************************/

#ifndef lint
static const char rcsid[] =
"@(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/tcp/tcp-fast.cc,v 1.35 2004/12/14 05:05:21 xuanc Exp $ (NCSU/IBM)";
#endif

#define FAST_ALLOW_CC 		0x1
#define FAST_ALLOW_MI		0x2
#define INT_VARABLE_INVALID_VALUE	999999999
#define DOUBLE_VARABLE_INVALID_VALUE 	99999999999.0

#include "ip.h"
#include "tcp.h"
#include "tcp-fast.h"
#include "flags.h"
#include "random.h"

/******************************************************************************/
static class FastTcpClass : public TclClass
{
	public:
		FastTcpClass() : TclClass("Agent/TCP/Fast") {}
		TclObject* create(int, const char*const*)
		{
			return (new FastTcpAgent());
		}
} class_fast;


/******************************************************************************/
FastTcpAgent::~FastTcpAgent()
{
#ifdef FASTTCPAGENT_DEBUG
	fclose(fasttcpagent_recordfps[0]);
	fclose(fasttcpagent_recordfps[1]);
#endif
	
	delete scb_;
	
	if (sendtime_)
		delete []sendtime_;
	if (transmits_)
		delete []transmits_;
	if (cwnd_array_)
		delete []cwnd_array_;
}

/******************************************************************************/
FastTcpAgent::FastTcpAgent() : TcpAgent(),
avgRTT_(0), baseRTT_(0), avg_cwnd_last_RTT_(1),
alpha_(0), beta_(0), fastrecov_(FALSE),
pipe_(-1), next_pkt_(0), firstpartial_(0),
last_natural_ack_number_(-1), on_first_rtt_(true),
gamma_(0.5),destine_pace(1000)
{
	sendtime_ = NULL;
	transmits_ = NULL;
	cwnd_array_ = NULL;
	bind_bool("partial_ack_", &partial_ack_);
	/* Use the Reassembly Queue based scoreboard as
	* ScoreBoard is O(cwnd) which is bad for HSTCP
	* scb_ = new ScoreBoard(new ScoreBoardNode[SBSIZE],SBSIZE);
	*/
	scb_ = new ScoreBoardRQ();
	
#ifdef TCP_DELAY_BIND_ALL
#else /* ! TCP_DELAY_BIND_ALL */
	/*bind tunable parameters*/
	bind("fast_update_cwnd_interval_", &cwnd_update_period_);
	bind("avg_cwnd_last_RTT_", &avg_cwnd_last_RTT_);
	bind("avgRTT_", &avgRTT_);
	bind("baseRTT_", &baseRTT_);
	bind("alpha_", &alpha_);
	bind("beta_", &beta_);
	bind("high_accuracy_cwnd_", &high_accuracy_cwnd_);
	bind("mi_threshold_", &mi_threshold_);
	
	//	bind("pipe_", &pipe_);		//weixl
	//	bind("sack_num_", &sack_num_);	//weixl
	//	bind("sack_len_", &sack_len_);  //weixl
	//	bind("alpha_tuning_", &alpha_tuning_);
	bind("gamma_", &gamma_);
#endif /* TCP_DELAY_BIND_ALL */
	
#ifdef FASTTCPAGENT_DEBUG
	static unsigned int s_agent_ID = 0;
	char strTmp[30];
	sprintf(strTmp, "agent%d_%s.txt", s_agent_ID, "record0");
	fasttcpagent_recordfps[0] = fopen(strTmp, "w+");
	sprintf(strTmp, "agent%d_%s.txt", s_agent_ID, "record1");
	fasttcpagent_recordfps[1] = fopen(strTmp, "w+");
	s_agent_ID++;
#endif
	
}

/******************************************************************************/
void
FastTcpAgent::delay_bind_init_all()
{
#ifdef TCP_DELAY_BIND_ALL
	// Defaults for bound variables should be set in ns-default.tcl.
	delay_bind_init_one("cwnd_update_period_");
	delay_bind_init_one("avg_cwnd_last_RTT_");
	delay_bind_init_one("avgRTT_");
	delay_bind_init_one("baseRTT_");
	delay_bind_init_one("alpha_");
	delay_bind_init_one("beta_");
	delay_bind_init_one("high_accuracy_cwnd_");
	delay_bind_init_one("mi_threshold_");
	
	//	delay_bind_init_one("pipe_"); 	//weixl
	//	delay_bind_init_one("sack_num_");//weixl
	//	delay_bind_init_one("sack_len_");
	//	delay_bind_init_one("alpha_tuning_");
	delay_bind_init_one("gamma_");
#endif /* TCP_DELAY_BIND_ALL */
	TcpAgent::delay_bind_init_all();
	
	reset();
}

/******************************************************************************/
int
FastTcpAgent::delay_bind_dispatch(const char *varName, const char *localName, TclObject *tracer)
{
#ifdef TCP_DELAY_BIND_ALL
	if (delay_bind(varName, localName, "cwnd_update_period_", &fast_update_cwnd_interval_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "avg_cwnd_last_RTT_", &avg_cwnd_last_RTT_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "avgRTT_", &avgRTT_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "baseRTT_", &baseRTT_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "alpha_", &alpha_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "beta_", &beta_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "gamma_", &gamma_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "high_accuracy_cwnd_", &high_accuracy_cwnd_, tracer))
		return TCL_OK;
	if (delay_bind(varName, localName, "mi_threshold_", &mi_threshold_, tracer))
		return TCL_OK;
	
	//	if (delay_bind(varName, localName, "pipe_", &pipe_, tracer))
	//		return TCL_OK;		//weixl
	//	if (delay_bind(varName, localName, "sack_num_", &sack_num_, tracer))
	//		return TCL_OK;		//weixl
	//        if (delay_bind(varName, localName, "sack_len_", &sack_len_, tracer))
	//                return TCL_OK;          //weixl
	//	if (delay_bind(varName, localName, "alpha_tuning_", &alpha_tuning_, tracer))
	//		return TCL_OK;
#endif /* TCP_DELAY_BIND_ALL */
	
	return TcpAgent::delay_bind_dispatch(varName, localName, tracer);
}

/******************************************************************************/
/* Print out just the variable that is modified */
void
FastTcpAgent::traceVar(TracedVar* v)
{
	double curtime;
	Scheduler& s = Scheduler::instance();
	char wrk[500];
	int n;
	
	curtime = &s ? s.clock() : 0;// 取得當前時間.
	if (!strcmp(v->name(), "avgRTT_")
		|| !strcmp(v->name(), "baseRTT_")
		|| !strcmp(v->name(), "mi_threshold_")
		)//v->name()返回的值是avgRTT_,baseRTT_,mi_threshold_其中之一
		sprintf(wrk,"%-8.5f %-2d %-2d %-2d %-2d %s %-6.3f",
		curtime, addr(), port(), daddr(), dport(),
		v->name(), double(*((TracedDouble*) v)));
	else if (!strcmp(v->name(), "avg_cwnd_last_RTT_")
		|| !strcmp(v->name(), "alpha_")
		|| !strcmp(v->name(), "beta_")
		|| !strcmp(v->name(), "high_accuracy_cwnd_" )
		)//v->name()返回的值是avg_cwnd_last_RTT_,alpha_,beta_,high_accuracy_cwnd_其中之一
		sprintf(wrk,"%-8.5f %-2d %-2d %-2d %-2d %s %d",
		curtime, addr(), port(), daddr(), dport(),
		v->name(), int(*((TracedInt*) v)));
	else//否則讓父類作默認處理
	{
		TcpAgent::traceVar(v);
		return;
	}
	
	n = strlen(wrk);
	wrk[n] = '\n';
	wrk[n+1] = 0;
	if (channel_)
		(void)Tcl_Write(channel_, wrk, n+1);
	wrk[n] = 0;
	
	return;
}

/******************************************************************************/
void
FastTcpAgent::reset ()
{
	fast_opts = 0;
	fast_opts |= FAST_ALLOW_CC;
	fast_opts |= FAST_ALLOW_MI;
	cwnd_update_time = fasttime();		
	cwnd_increments = 0;
	firstrecv_ = -1.0;
	slowstart_ = 2;
	acks_per_rtt = 0;
	acks_last_rtt = 0;
	bc_ack = 0;
	bc_spacing = 0;
	t_backoff_=1;
	baseRTT_ = DOUBLE_VARABLE_INVALID_VALUE;
	newcwnd_ = DOUBLE_VARABLE_INVALID_VALUE;
	currentTime = 0;
	fast_calc_cwnd_end = 0;
	scb_->ClearScoreBoard();
	cwnd_remainder = 0;
	
	TcpAgent::reset ();
}

#define CWND_USE_INT	0
#define CWND_USE_INT_CONSIDER_ERROR	1
#define CWND_USE_DOUBLE	2
/******************************************************************************/
/*this function should be used to calculate the new cwnd_ size in every update*/
double
FastTcpAgent::fast_calc_cwnd(double cwnd,double old_cwnd)
{
	double q = avgRTT_ - baseRTT_;//平均每個包在路由的排隊時間.
	double cwnd_array_q = old_cwnd * q;//窗口中的包發送完用于路由排隊的時間
	double target_cwnd = cwnd;
	
	//double destine_alpha;
	if ( avgRTT_ == 0 || baseRTT_ == DOUBLE_VARABLE_INVALID_VALUE )		//重置或初始化
	{
		return cwnd;
	}
	
	if ( fast_opts & FAST_ALLOW_CC )		//fast_opts中設置了FAST_ALLOW_CC位
	{
		if ( cwnd_array_q < alpha_ * avgRTT_ ||
			cwnd_array_q >= beta_ * avgRTT_ )
		{
			// target_cwnd = (cwnd + old_cwnd * (baseRTT_/avgRTT_) + alpha_) / 2;
			target_cwnd = ( (1-gamma_) * cwnd + (old_cwnd * (baseRTT_/avgRTT_) + alpha_) * gamma_);
			//destine_alpha = q * destine_pace;
			//target_cwnd = ( (1-gamma_) * cwnd + (old_cwnd * (baseRTT_/avgRTT_) + destine_alpha) * gamma_);
			
			double gamma=gamma_;
			double alpha=alpha_;
			double beta=beta_;
			//printf("gamma:%lf alpha;%lf beta:%lf target:%lf, now:%lf, new:%lf\n", gamma, alpha, beta, (old_cwnd * (baseRTT_/avgRTT_) + alpha_), cwnd, target_cwnd);
			if (target_cwnd<2)
				target_cwnd=2;
			
			/*因為網絡中窗口定義是整型,而為了計算的精度用了雙精度數.
			*所以將每次的小數部分計合下來,滿1時加到窗口計算值中*/
			if ( high_accuracy_cwnd_ == CWND_USE_INT_CONSIDER_ERROR ||
				high_accuracy_cwnd_ == CWND_USE_INT )	//we use intergal to store cwnd.
			{
				if (high_accuracy_cwnd_ == CWND_USE_INT_CONSIDER_ERROR)	//we consider the calculation error.
				{
					cwnd_remainder += (target_cwnd - (int)target_cwnd);
					if (cwnd_remainder > 1)
					{
						target_cwnd++;
						cwnd_remainder--;
					}
				}
				target_cwnd = (int)target_cwnd;
				//printf("gamma:%lf alpha;%lf beta:%lf target:%lf, now:%lf, new:%lf\n", gamma, alpha, beta, (old_cwnd * (baseRTT_/avgRTT_) + alpha_), cwnd, target_cwnd);
			}
		}
	}	
	return target_cwnd;
}

/******************************************************************************/
/* in this function, we can get the new average rtt which */
/* will be used to get the new cwnd_ size */
/*用于計算包平均返回時間*/
double
FastTcpAgent::fast_est_update_avgrtt(double rtt)
{
	double scale = avg_cwnd_last_RTT_/3;	
	double avgRTT=avgRTT_;
	if ( !avgRTT)		//首個包返回
		avgRTT = rtt;
	else if ( scale > 256 )
	{
		avgRTT = ((scale-1) * avgRTT + rtt)/scale;
	}
	else
	{
		avgRTT = (avgRTT*255 + rtt)/256;
	}
	return (double)avgRTT;
}

/******************************************************************************/
/* We get average cwnd size which will be used as a history record. */
double
FastTcpAgent::fast_est_update_avg_cwnd(int inst_cwnd)
{
#if 0
	unsigned int scale = avg_cwnd_last_RTT_/3;
	double avg_cwnd=avg_cwnd_last_RTT_;
	
	if ( !avg_cwnd)
		avg_cwnd = inst_cwnd;
	else if ( scale > 256 )
	{
		avg_cwnd = ((scale-1) * avg_cwnd + inst_cwnd)/scale;
	}
	else
	{
		avg_cwnd = (avg_cwnd*255 + inst_cwnd)/256;
	}
	return avg_cwnd;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91精品入口| 亚洲一本大道在线| 国产成人啪免费观看软件 | 免费成人你懂的| 欧美喷潮久久久xxxxx| 亚洲成人777| 欧美精品成人一区二区三区四区| 一区二区三区四区高清精品免费观看| 99在线精品观看| 一级精品视频在线观看宜春院 | 亚洲成va人在线观看| 欧美图片一区二区三区| 日本中文字幕一区二区有限公司| 日韩女优av电影| 成人av在线资源| 亚洲国产日韩a在线播放| 欧美精品一卡二卡| 国产成人av电影在线| 亚洲三级久久久| 欧美一区二视频| 国产+成+人+亚洲欧洲自线| 亚洲欧美日韩精品久久久久| 欧美伦理影视网| 国产精品正在播放| 亚洲午夜在线观看视频在线| 26uuu亚洲| 欧洲国内综合视频| 国产毛片精品一区| 亚洲一线二线三线久久久| 精品久久久久久亚洲综合网| a美女胸又www黄视频久久| 日韩经典一区二区| 亚洲人成亚洲人成在线观看图片| 欧美一区欧美二区| 色综合久久精品| 久久精品国产999大香线蕉| 中文字幕日韩一区| www国产成人免费观看视频 深夜成人网| 成人av动漫在线| 久久精品99久久久| 一区二区三区国产精华| 久久久久亚洲蜜桃| 欧美一级二级三级乱码| 色老汉av一区二区三区| 国产黄色精品视频| 日韩avvvv在线播放| 亚洲精品久久久久久国产精华液| 久久先锋资源网| 欧美二区三区的天堂| 91年精品国产| 豆国产96在线|亚洲| 另类综合日韩欧美亚洲| 一区二区成人在线| 亚洲欧美在线另类| 一区二区在线观看不卡| 久久精品视频一区二区| 日韩三级视频在线观看| 欧美三区在线视频| 在线观看国产精品网站| 99国产精品一区| 不卡的av电影在线观看| 国产一区不卡精品| 精彩视频一区二区三区 | 视频在线观看一区二区三区| 中文字幕字幕中文在线中不卡视频| 久久日一线二线三线suv| 91精品视频网| 91精品麻豆日日躁夜夜躁| 精品视频一区三区九区| 在线免费观看日韩欧美| 91在线云播放| 色噜噜狠狠色综合欧洲selulu| av电影一区二区| 99视频一区二区| 91在线视频观看| 色悠悠久久综合| 欧美私人免费视频| 欧美系列一区二区| 欧美久久婷婷综合色| 在线精品视频免费播放| 色欧美片视频在线观看| 91豆麻精品91久久久久久| 一本到不卡精品视频在线观看| 色综合久久99| 欧美日韩国产大片| 日韩一区二区三区免费观看| 日韩无一区二区| 国产亚洲综合性久久久影院| 久久久午夜电影| 亚洲欧洲日本在线| 一区二区视频免费在线观看| 亚洲国产中文字幕| 青青草国产成人av片免费| 精品一区二区在线观看| 久久99精品久久久久| 大胆欧美人体老妇| 欧美主播一区二区三区| 制服丝袜中文字幕一区| 久久久精品人体av艺术| 亚洲婷婷在线视频| 日韩福利电影在线| 国产精品18久久久久久久久久久久 | 亚洲自拍偷拍图区| 日韩 欧美一区二区三区| 国产精品自拍毛片| 91黄色小视频| 欧美sm美女调教| 国产精品国产三级国产普通话三级| 亚洲三级视频在线观看| 日本免费在线视频不卡一不卡二| 国产精品一区久久久久| 色婷婷综合久久久中文一区二区 | 欧美日韩国产首页| 精品国精品自拍自在线| 国产精品国产精品国产专区不蜜| 午夜一区二区三区视频| 国产精品资源站在线| 欧美亚洲动漫制服丝袜| 精品99一区二区三区| 亚洲免费观看高清完整版在线| 日韩高清不卡在线| 99久久精品国产观看| 日韩免费性生活视频播放| 中文字幕亚洲一区二区va在线| 日韩和的一区二区| 97久久精品人人做人人爽50路 | 欧洲av在线精品| 久久久久久久久久久久久久久99 | 精品人在线二区三区| 亚洲日穴在线视频| 久久不见久久见免费视频1| 一本到不卡精品视频在线观看| 精品国产乱码久久久久久浪潮| 一区二区三区四区av| 国产成人精品亚洲午夜麻豆| 在线观看91av| 亚洲精品亚洲人成人网在线播放| 国产一区二区在线视频| 7777精品伊人久久久大香线蕉的| 中文字幕一区av| 福利91精品一区二区三区| 欧美www视频| 午夜av电影一区| 欧美中文字幕一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整 | 在线成人免费视频| 亚洲三级电影网站| aaa欧美大片| 国产蜜臀av在线一区二区三区| 全国精品久久少妇| 欧美视频一区二区三区四区 | 亚洲高清不卡在线| 91老师片黄在线观看| 亚洲欧洲一区二区在线播放| 国产成人av电影在线| 精品粉嫩aⅴ一区二区三区四区| 国产成人在线观看| ww久久中文字幕| 国产原创一区二区| 久久先锋资源网| 国产成人无遮挡在线视频| 久久精品网站免费观看| 国产麻豆日韩欧美久久| 久久久久久久综合色一本| 狠狠狠色丁香婷婷综合久久五月| 91麻豆精品国产91久久久久| 午夜影视日本亚洲欧洲精品| 欧美性大战xxxxx久久久| 一区二区三区中文字幕| 欧美午夜理伦三级在线观看| 亚洲影院久久精品| 欧美精品日韩综合在线| 精品久久国产97色综合| 国产乱码精品1区2区3区| 久久久久久久久免费| 成人av资源网站| 一区二区在线观看视频在线观看| 色悠悠亚洲一区二区| 亚洲成人三级小说| 日韩精品中文字幕一区二区三区| 麻豆精品在线看| 国产日韩av一区| 不卡的电视剧免费网站有什么| 亚洲卡通动漫在线| 欧美日韩成人高清| 经典三级视频一区| 国产精品美女视频| 色婷婷久久久亚洲一区二区三区 | 国产91在线|亚洲| 亚洲国产精品ⅴa在线观看| 99热这里都是精品| 日韩一区欧美二区| 久久精品欧美日韩| 91麻豆免费观看| 日本欧美久久久久免费播放网| 精品国产一区久久| 色综合久久综合网欧美综合网| 日韩综合小视频| 国产精品美女视频| 欧美二区在线观看|