亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
一本到不卡免费一区二区| 色哟哟国产精品免费观看| 亚洲精品v日韩精品| 日韩你懂的在线播放| www.在线欧美| 麻豆成人av在线| 有码一区二区三区| 中文字幕精品一区二区精品绿巨人| 欧美日韩国产成人在线91| 99re8在线精品视频免费播放| 蜜桃精品在线观看| 五月天国产精品| 国产精品免费看片| 久久精品人人做人人爽人人| 这里是久久伊人| 在线观看精品一区| 91在线观看成人| 国产精品一二三| 美国毛片一区二区三区| 亚洲不卡在线观看| 亚洲综合丁香婷婷六月香| 亚洲国产精品传媒在线观看| 精品成人一区二区三区四区| 在线播放国产精品二区一二区四区| 色综合天天综合狠狠| www.亚洲精品| av中文字幕一区| 国产不卡免费视频| 国产suv一区二区三区88区| 成人网页在线观看| 国产成人精品亚洲日本在线桃色| 国内精品自线一区二区三区视频| 蜜桃精品视频在线观看| 久久精品噜噜噜成人88aⅴ | 国产精品自拍毛片| 久久99在线观看| 国产在线观看免费一区| 国产一区在线精品| 国产在线播放一区二区三区| 国产主播一区二区| 国产麻豆视频一区二区| 国产精品一区二区男女羞羞无遮挡| 精品亚洲欧美一区| 精品一区二区免费| 国产精品一区二区无线| 成人激情文学综合网| 91老司机福利 在线| 91麻豆国产香蕉久久精品| 色综合 综合色| 欧美日本一区二区| 69成人精品免费视频| 精品乱码亚洲一区二区不卡| 久久久国产综合精品女国产盗摄| 国产欧美综合色| 亚洲日穴在线视频| 五月婷婷色综合| 精品一区二区免费| 99热在这里有精品免费| 色94色欧美sute亚洲线路二| 欧美精品日韩一本| 日韩免费在线观看| 国产精品久久久久久妇女6080| 亚洲男同1069视频| 午夜精品福利在线| 黄一区二区三区| 99久久精品99国产精品| 欧美日韩极品在线观看一区| 日韩西西人体444www| 欧美激情一区二区三区全黄| 亚洲欧美日韩小说| 日本美女一区二区| 成人综合婷婷国产精品久久蜜臀 | 国产精品福利一区二区| 一个色综合av| 美女视频网站黄色亚洲| 成人app网站| 这里只有精品免费| 国产精品污污网站在线观看| 午夜精品久久久久久久久| 黑人巨大精品欧美黑白配亚洲| 99国产欧美久久久精品| 欧美一级在线免费| 日韩美女视频一区| 国产一区二区在线视频| 91久久香蕉国产日韩欧美9色| 欧美成人r级一区二区三区| ㊣最新国产の精品bt伙计久久| 日韩成人午夜电影| 91片黄在线观看| 欧美精品一区二区三区在线播放| 亚洲猫色日本管| 国产美女娇喘av呻吟久久| 欧美日韩中文一区| 国产女主播在线一区二区| 日韩精品高清不卡| 在线成人小视频| 1000部国产精品成人观看| 国内外成人在线| 欧美伦理视频网站| 亚洲蜜臀av乱码久久精品| 国产精品资源网站| 日韩一区二区在线观看视频| 亚洲精品中文在线| 国产69精品久久777的优势| 777午夜精品视频在线播放| 亚洲色欲色欲www在线观看| 国产综合色视频| 日韩午夜在线观看| 午夜电影网一区| 欧美亚洲另类激情小说| 国产精品人人做人人爽人人添| 激情综合亚洲精品| 日韩欧美你懂的| 香蕉久久一区二区不卡无毒影院| 99久久精品国产网站| 国产喷白浆一区二区三区| 国产专区综合网| 亚洲精品在线网站| 免费日本视频一区| 欧美一区二区在线免费观看| 五月天中文字幕一区二区| 在线精品观看国产| 亚洲夂夂婷婷色拍ww47| 91浏览器在线视频| 国产精品国产自产拍高清av王其| 国产91精品在线观看| 欧美激情中文字幕| 懂色av一区二区三区免费看| 国产视频一区二区三区在线观看| 国产九色sp调教91| 久久精品网站免费观看| 国产在线视频一区二区三区| 精品免费视频一区二区| 麻豆一区二区99久久久久| 日韩亚洲欧美中文三级| 久久精品999| www国产成人免费观看视频 深夜成人网| 免费精品视频在线| 精品国产91久久久久久久妲己| 国产在线看一区| 国产欧美综合色| 91丨九色丨黑人外教| 一区二区三区鲁丝不卡| 欧美日韩精品一区二区三区蜜桃| 婷婷一区二区三区| 日韩区在线观看| 国产一区不卡视频| 中日韩av电影| 91搞黄在线观看| 日韩精品电影在线| 精品国产sm最大网站| 国产mv日韩mv欧美| 亚洲最快最全在线视频| 欧美一区二区视频在线观看2020 | 欧洲视频一区二区| 青青草91视频| 国产日本亚洲高清| 94-欧美-setu| 日韩精品亚洲一区| 久久日韩粉嫩一区二区三区| 成人av在线一区二区| 亚洲va韩国va欧美va精品| 精品国产麻豆免费人成网站| 国产99久久久国产精品潘金网站| 亚洲精品成人在线| 日韩久久久精品| 不卡大黄网站免费看| 天天综合网 天天综合色| 国产网红主播福利一区二区| 一本到三区不卡视频| 开心九九激情九九欧美日韩精美视频电影 | 久久久蜜桃精品| 色国产综合视频| 久久国产婷婷国产香蕉| 日韩一区有码在线| 日韩一区二区视频| 色哟哟一区二区在线观看| 美国欧美日韩国产在线播放| 国产精品国产三级国产普通话三级 | 亚洲综合激情网| 久久午夜羞羞影院免费观看| 在线看国产一区| 国产精品1024久久| 亚洲va欧美va人人爽午夜| 欧美激情一区二区三区不卡 | 国产一区不卡精品| 亚洲已满18点击进入久久| 欧美成人欧美edvon| 欧美怡红院视频| 成人午夜短视频| 蜜臀av一区二区| 亚洲福利视频一区| 亚洲国产高清aⅴ视频| 在线不卡欧美精品一区二区三区| 99精品国产99久久久久久白柏| 韩国女主播成人在线观看| 亚洲成av人片在线观看无码| 国产精品久久看| 久久精品人人做人人爽人人| 日韩一区二区三区视频在线|