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

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

?? tcp.cc

?? Ns2 TCP 協議改進 版本 提高goodput
?? CC
?? 第 1 頁 / 共 5 頁
字號:
#ifdef QS_DEBUG		printf("Quick Start approved, rate %d, window %d\n", 				     qsh->rate(), app_rate);#endif                if (app_rate > initial_window()) {			qs_cwnd_ = app_rate;                        qs_approved_ = 1;                }        } else { // Quick Start rejected#ifdef QS_DEBUG                printf("Quick Start rejected\n");#endif        }}/* * ACK has been received, hook from recv() */void TcpAgent::recv_frto_helper(Packet *pkt){	hdr_tcp *tcph = hdr_tcp::access(pkt);	if (tcph->seqno() == last_ack_ && frto_ != 0) {		/*		 * Duplicate ACK while in F-RTO indicates that the		 * timeout was valid. Go to slow start retransmissions.		 */		t_seqno_ = highest_ack_ + 1;		cwnd_ = frto_;		frto_ = 0;		// Must zero dupacks (in order to trigger send_much at recv)		// dupacks is increased in recv after exiting this function		dupacks_ = -1;	}}/* * A spurious timeout has been detected. Do appropriate actions. */void TcpAgent::spurious_timeout(){	frto_ = 0;	switch (spurious_response_) {	case 1:	default:		/*		 * Full revert of congestion window		 * (FlightSize before last acknowledgment)		 */		cwnd_ = t_seqno_ - prev_highest_ack_;		break; 	case 2:		/*		 * cwnd = reduced ssthresh (approx. half of the earlier pipe)		 */		cwnd_ = ssthresh_; break;	case 3:		/*		 * slow start, but without retransmissions		 */		cwnd_ = 1; break;	}	/*	 * Revert ssthresh to size before retransmission timeout	 */	ssthresh_ = pipe_prev_;	/* If timeout was spurious, bugfix is not needed */	recover_ = highest_ack_ - 1;}/* * Loss occurred in Quick-Start window. * If Quick-Start is enabled, packet loss in the QS phase should * trigger slow start instead of the regular fast retransmit, * see [draft-amit-quick-start-03.txt] (to appear). * We use variable tcp_qs_recovery_ to toggle this behaviour on and off. * If tcp_qs_recovery_ is true, initiate slow start to probe for * a correct window size. * * Return value: non-zero if Quick-Start specific loss recovery took place */int TcpAgent::lossQuickStart(){       if (qs_window_ && tcp_qs_recovery_) {                //recover_ = maxseq_;                //reset_rtx_timer(1,0);                slowdown(CLOSE_CWND_INIT);		// reset ssthresh to half of W-D/2?                qs_window_ = 0;                output(last_ack_ + 1, TCP_REASON_DUPACK);                return 1;       }       return 0;}/* * main reception path - should only see acks, otherwise the * network connections are misconfigured */void TcpAgent::recv(Packet *pkt, Handler*){	hdr_tcp *tcph = hdr_tcp::access(pkt);	int valid_ack = 0;	if (qs_approved_ == 1 && tcph->seqno() > last_ack_) 		endQuickStart();	if (qs_requested_ == 1)		processQuickStart(pkt);#ifdef notdef	if (pkt->type_ != PT_ACK) {		Tcl::instance().evalf("%s error \"received non-ack\"",				      name());		Packet::free(pkt);		return;	}#endif	/* W.N.: check if this is from a previous incarnation */	if (tcph->ts() < lastreset_) {		// Remove packet and do nothing		Packet::free(pkt);		return;	}	++nackpack_;	ts_peer_ = tcph->ts();	int ecnecho = hdr_flags::access(pkt)->ecnecho();	if (ecnecho && ecn_)		ecn(tcph->seqno());	recv_helper(pkt);	recv_frto_helper(pkt);	/* grow cwnd and check if the connection is done */ 	if (tcph->seqno() > last_ack_) {		recv_newack_helper(pkt);		if (last_ack_ == 0 && delay_growth_) { 			cwnd_ = initial_window();		}	} else if (tcph->seqno() == last_ack_) {                if (hdr_flags::access(pkt)->eln_ && eln_) {                        tcp_eln(pkt);                        return;                }		if (++dupacks_ == numdupacks_ && !noFastRetrans_) {			dupack_action();		} else if (dupacks_ < numdupacks_ && singledup_ ) {			send_one();		}	}	if (QOption_ && EnblRTTCtr_)		process_qoption_after_ack (tcph->seqno());	if (tcph->seqno() >= last_ack_)  		// Check if ACK is valid.  Suggestion by Mark Allman. 		valid_ack = 1;	Packet::free(pkt);	/*	 * Try to send more data.	 */	if (valid_ack || aggressive_maxburst_)		send_much(0, 0, maxburst_);}/* * Process timeout events other than rtx timeout. Having this as a separate  * function allows derived classes to make alterations/enhancements (e.g., * response to new types of timeout events). */ void TcpAgent::timeout_nonrtx(int tno) {	if (tno == TCP_TIMER_DELSND)  {	 /*	 	* delayed-send timer, with random overhead	 	* to avoid phase effects	 	*/		send_much(1, TCP_REASON_TIMEOUT, maxburst_);	}}	void TcpAgent::timeout(int tno){	/* retransmit timer */	if (tno == TCP_TIMER_RTX) {		// There has been a timeout - will trace this event		trace_event("TIMEOUT");		frto_ = 0;		// Set pipe_prev as per Eifel Response		pipe_prev_ = (window() > ssthresh_) ?			window() : (int)ssthresh_;	        if (cwnd_ < 1) cwnd_ = 1;		if (qs_approved_ == 1) qs_approved_ = 0;		if (highest_ack_ == maxseq_ && !slow_start_restart_) {			/*			 * TCP option:			 * If no outstanding data, then don't do anything.  			 */			 // Should this return be here?			 // What if CWND_ACTION_ECN and cwnd < 1?			 // return;		} else {			recover_ = maxseq_;			if (highest_ack_ == -1 && wnd_init_option_ == 2)				/* 				 * First packet dropped, so don't use larger				 * initial windows. 				 */				wnd_init_option_ = 1;			if (highest_ack_ == maxseq_ && restart_bugfix_)			       /* 				* if there is no outstanding data, don't cut 				* down ssthresh_.				*/				slowdown(CLOSE_CWND_ONE|NO_OUTSTANDING_DATA);			else if (highest_ack_ < recover_ &&			  last_cwnd_action_ == CWND_ACTION_ECN) {			       /*				* if we are in recovery from a recent ECN,				* don't cut down ssthresh_.				*/				slowdown(CLOSE_CWND_ONE);				if (frto_enabled_ || sfrto_enabled_) {					frto_ = 1;				}			}			else {				++nrexmit_;				last_cwnd_action_ = CWND_ACTION_TIMEOUT;				slowdown(CLOSE_SSTHRESH_HALF|CLOSE_CWND_RESTART);				if (frto_enabled_ || sfrto_enabled_) {					frto_ = 1;				}			}		}		/* if there is no outstanding data, don't back off rtx timer */		if (highest_ack_ == maxseq_ && restart_bugfix_) {			reset_rtx_timer(0,0);		}		else {			reset_rtx_timer(0,1);		}		last_cwnd_action_ = CWND_ACTION_TIMEOUT;		send_much(0, TCP_REASON_TIMEOUT, maxburst_);	} 	else {		timeout_nonrtx(tno);	}}/*  * Check if the packet (ack) has the ELN bit set, and if it does, and if the * last ELN-rxmitted packet is smaller than this one, then retransmit the * packet.  Do not adjust the cwnd when this happens. */void TcpAgent::tcp_eln(Packet *pkt){        //int eln_rxmit;        hdr_tcp *tcph = hdr_tcp::access(pkt);        int ack = tcph->seqno();        if (++dupacks_ == eln_rxmit_thresh_ && ack > eln_last_rxmit_) {                /* Retransmit this packet */                output(last_ack_ + 1, TCP_REASON_DUPACK);                eln_last_rxmit_ = last_ack_+1;        } else                send_much(0, 0, maxburst_);        Packet::free(pkt);        return;}/* * This function is invoked when the connection is done. It in turn * invokes the Tcl finish procedure that was registered with TCP. */void TcpAgent::finish(){	Tcl::instance().evalf("%s done", this->name());}void RtxTimer::expire(Event*){	a_->timeout(TCP_TIMER_RTX);}void DelSndTimer::expire(Event*){	a_->timeout(TCP_TIMER_DELSND);}void BurstSndTimer::expire(Event*){	a_->timeout(TCP_TIMER_BURSTSND);}/* * THE FOLLOWING FUNCTIONS ARE OBSOLETE, but REMAIN HERE * DUE TO OTHER PEOPLE's TCPs THAT MIGHT USE THEM * * These functions are now replaced by ecn() and slowdown(), * respectively. *//* * Respond either to a source quench or to a congestion indication bit. * This is done at most once a roundtrip time;  after a source quench, * another one will not be done until the last packet transmitted before * the previous source quench has been ACKed. */void TcpAgent::quench(int how){	if (highest_ack_ >= recover_) {		recover_ =  maxseq_;		last_cwnd_action_ = CWND_ACTION_ECN;		closecwnd(how);	}}/* * close down the congestion window */void TcpAgent::closecwnd(int how){   	static int first_time = 1;	if (first_time == 1) {		fprintf(stderr, "the TcpAgent::closecwnd() function is now deprecated, please use the function slowdown() instead\n");	}	switch (how) {	case 0:		/* timeouts */		ssthresh_ = int( window() / 2 );		if (ssthresh_ < 2 && increase_num_ >= 1.0)      // ktnahm mod			ssthresh_ = 2;		if (ssthresh_ < 0)      // ktnahm add			ssthresh_ = 0;  // ktnahm		cwnd_ = int(wnd_restart_);		break;	case 1:		/* Reno dup acks, or after a recent congestion indication. */		// cwnd_ = window()/2;		cwnd_ = decrease_num_ * window();		ssthresh_ = int(cwnd_);		if (ssthresh_ < 2 && increase_num_ >= 1.0)      // ktnahm mod			ssthresh_ = 2;		if (ssthresh_ < 0)      // ktnahm add			ssthresh_ = 0;  // ktnahm		break;	case 2:		/* Tahoe dup acks  				 * after a recent congestion indication */		cwnd_ = wnd_init_;		break;	case 3:		/* Retransmit timeout, but no outstanding data. */ 		cwnd_ = int(wnd_init_);		break;	case 4:		/* Tahoe dup acks */		ssthresh_ = int( window() / 2 );		if (ssthresh_ < 2 && increase_num_ >= 1.0)      // ktnahm mod			ssthresh_ = 2;		if (ssthresh_ < 0)      // ktnahm add			ssthresh_ = 0;  // ktnahm		cwnd_ = 1;		break;	default:		abort();	}	fcnt_ = 0.;	count_ = 0;}/* * Check if the sender has been idle or application-limited for more * than an RTO, and if so, reduce the congestion window. */void TcpAgent::process_qoption_after_send (){	int tcp_now = (int)(Scheduler::instance().clock()/tcp_tick_ + 0.5);	int rto = (int)(t_rtxcur_/tcp_tick_) ; 	/*double ct = Scheduler::instance().clock();*/	if (!EnblRTTCtr_) {		if (tcp_now - T_last >= rto) {			// The sender has been idle.		 	slowdown(THREE_QUARTER_SSTHRESH|TCP_IDLE) ;			for (int i = 0 ; i < (tcp_now - T_last)/rto; i ++) {				slowdown(CWND_HALF_WITH_MIN|TCP_IDLE);			}			T_prev = tcp_now ;			W_used = 0 ;		}		T_last = tcp_now ;		if (t_seqno_ == highest_ack_+ window()) {			T_prev = tcp_now ; 			W_used = 0 ; 		}		else if (t_seqno_ == curseq_-1) {			// The sender has no more data to send.			int tmp = t_seqno_ - highest_ack_ ;			if (tmp > W_used)				W_used = tmp ;			if (tcp_now - T_prev >= rto) {				// The sender has been application-limited.				slowdown(THREE_QUARTER_SSTHRESH|TCP_IDLE);				slowdown(CLOSE_CWND_HALF_WAY|TCP_IDLE);				T_prev = tcp_now ;				W_used 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品美国一| 亚洲精品中文在线观看| 欧美日韩综合一区| 色激情天天射综合网| caoporn国产精品| 91丝袜国产在线播放| 色综合天天综合网天天狠天天| 成人午夜大片免费观看| 成人午夜在线播放| 99国产精品视频免费观看| 91香蕉视频mp4| 欧美日韩亚洲另类| 精品日韩欧美在线| 国产精品欧美一区二区三区| 亚洲色图欧美偷拍| 亚洲福利一区二区三区| 日本欧美加勒比视频| 国内精品国产成人| 99久久久无码国产精品| 欧美日韩成人综合在线一区二区 | 精品日韩在线一区| 精品av综合导航| 国产精品免费aⅴ片在线观看| 亚洲色图第一区| 蜜臀av国产精品久久久久| 国产经典欧美精品| 欧日韩精品视频| 2020国产精品久久精品美国| ㊣最新国产の精品bt伙计久久| 亚洲国产中文字幕在线视频综合 | 亚洲大型综合色站| 韩国午夜理伦三级不卡影院| 91麻豆精品一区二区三区| 精品视频1区2区| 日本一区二区三区电影| 亚洲综合色在线| 国产精品一区不卡| 欧美精品久久99久久在免费线 | 国产日韩视频一区二区三区| 一区二区三区久久久| 国产一区美女在线| 欧美日韩美女一区二区| 中文字幕在线不卡一区| 奇米888四色在线精品| 91免费在线播放| 久久亚洲精华国产精华液| 亚洲综合在线电影| 岛国av在线一区| 精品裸体舞一区二区三区| 亚洲高清三级视频| www.欧美.com| 日韩毛片精品高清免费| 久色婷婷小香蕉久久| 99精品国产热久久91蜜凸| 久久久久久久久蜜桃| 天天av天天翘天天综合网色鬼国产 | 日韩午夜在线观看| 一区二区三区四区亚洲| 成人涩涩免费视频| 久久久精品国产免费观看同学| 午夜av一区二区三区| 在线视频你懂得一区二区三区| 欧美高清一级片在线观看| 韩国精品主播一区二区在线观看| 91.com视频| 亚洲成a人v欧美综合天堂下载| 91丨porny丨在线| 中文字幕在线视频一区| 国产乱国产乱300精品| 久久综合色之久久综合| 精品一区二区三区在线观看国产| 91精品国产色综合久久久蜜香臀| 亚洲精品一二三| 色香色香欲天天天影视综合网| 亚洲欧美日韩国产综合在线| 91天堂素人约啪| 一区二区三区小说| 欧美色倩网站大全免费| 亚洲成av人影院在线观看网| 欧美日韩午夜影院| 日韩国产精品久久久久久亚洲| 91麻豆精品国产91久久久久久| 日本欧美一区二区| 久久色中文字幕| 成人激情av网| 一区二区三区精密机械公司| 在线免费观看不卡av| 色综合中文综合网| 国产成人在线视频网站| xf在线a精品一区二区视频网站| 久久er精品视频| 欧洲另类一二三四区| 欧洲在线/亚洲| 日本免费在线视频不卡一不卡二| 国产精品久久夜| 欧美本精品男人aⅴ天堂| 欧美日韩精品一区视频| 91美女在线视频| 成人午夜在线免费| 国产激情一区二区三区| 久久99精品久久久久婷婷| 亚洲va中文字幕| 亚洲成av人影院在线观看网| 亚洲日本va在线观看| 国产精品欧美久久久久一区二区| 国产偷v国产偷v亚洲高清| 精品国产不卡一区二区三区| 91麻豆精品久久久久蜜臀| 欧美日本在线播放| 精品视频123区在线观看| 在线免费观看视频一区| 91麻豆精品国产91久久久更新时间 | 欧美在线一区二区三区| 色综合久久中文综合久久97| 97久久精品人人澡人人爽| 成人h动漫精品| 99re这里只有精品视频首页| 91在线云播放| 在线免费观看日本欧美| 欧美日韩一卡二卡三卡| 欧美顶级少妇做爰| 51久久夜色精品国产麻豆| 日韩一区二区电影在线| 精品久久久久久久久久久久久久久久久 | 久久成人麻豆午夜电影| 激情图区综合网| 国产成人在线视频网址| 成人av电影免费观看| 一本高清dvd不卡在线观看| 欧美在线观看视频在线| 欧美蜜桃一区二区三区| 日韩欧美一级在线播放| 2014亚洲片线观看视频免费| 国产蜜臀97一区二区三区| 日韩伦理av电影| 日韩精品91亚洲二区在线观看| 国内外成人在线| av一区二区不卡| 欧美精品xxxxbbbb| 日本一区二区三区视频视频| 亚洲一区二区三区视频在线| 奇米888四色在线精品| 成人精品国产福利| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 91欧美激情一区二区三区成人| 欧美色精品天天在线观看视频| 欧美浪妇xxxx高跟鞋交| 久久久国产午夜精品| 亚洲欧美色图小说| 久久福利视频一区二区| 99国产精品久| 精品国产精品网麻豆系列 | 欧美aaaaaa午夜精品| 丰满放荡岳乱妇91ww| 3atv在线一区二区三区| 国产精品网站一区| 日本色综合中文字幕| 色婷婷久久综合| 久久久夜色精品亚洲| 午夜电影久久久| 99久久免费精品| wwww国产精品欧美| 视频一区二区三区中文字幕| 99热99精品| 一区二区三区91| 国产剧情一区在线| 欧美日韩高清一区二区| 综合激情网...| 国产麻豆9l精品三级站| 欧美精品一二三| 亚洲欧美一区二区三区久本道91| 国产在线视频不卡二| 欧美福利一区二区| 国产精品久久三| 黑人精品欧美一区二区蜜桃| 欧美裸体一区二区三区| 亚洲乱码国产乱码精品精的特点| 国内精品免费**视频| 日韩欧美视频一区| 午夜欧美视频在线观看 | av中文字幕不卡| 精品sm在线观看| 久久99精品一区二区三区三区| 欧美群妇大交群中文字幕| 亚洲综合一二区| 91久久精品一区二区| 亚洲日本在线视频观看| 国产成人精品免费在线| 久久精品一区二区| 国产综合久久久久影院| 精品美女被调教视频大全网站| 青青草成人在线观看| 欧美福利一区二区| 婷婷六月综合网| 欧美一区二区免费观在线| 日本大胆欧美人术艺术动态| 6080午夜不卡| 蜜臀va亚洲va欧美va天堂| 欧美精品在线一区二区三区| 丝袜美腿亚洲色图|