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

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

?? tcp-fack.cc

?? Ns2 TCP 協議改進 版本 提高goodput
?? CC
字號:
/* -*-	Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- *//* * Copyright (c) 1990, 1997 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by the University of California, Lawrence Berkeley Laboratory, * Berkeley, CA.  The name of the University may not be used to * endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */#ifndef lintstatic const char rcsid[] =    "@(#) /home/ctk21/cvsroot//hssstcp/ns/ns-2.1b9/tcp/tcp-fack.cc,v 1.2 2002/08/12 10:43:58 ctk21 Exp (PSC)";#endif#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include "ip.h"#include "tcp.h"#include "flags.h"#include "scoreboard.h"#include "random.h"#include "tcp-fack.h"#include "template.h"static class FackTcpClass : public TclClass {public:	FackTcpClass() : TclClass("Agent/TCP/Fack") {}	TclObject* create(int, const char*const*) {		return (new FackTcpAgent());	}} class_fack;FackTcpAgent::FackTcpAgent() : 	timeout_(FALSE), wintrim_(0),	wintrimmult_(.5), rampdown_(0), fack_(-1), retran_data_(0),	ss_div4_(0)		// What about fastrecov_ and scb_{	bind_bool("ss-div4_", &ss_div4_);	bind_bool("rampdown_", &rampdown_);	scb_ = new ScoreBoard(new ScoreBoardNode[SBSIZE],SBSIZE);}FackTcpAgent::~FackTcpAgent(){	delete [] scb_;}int FackTcpAgent::window() {	int win;	win = int((cwnd_ < wnd_ ? (double) cwnd_ : (double) wnd_) + wintrim_);	return (win);}void FackTcpAgent::reset (){	scb_->ClearScoreBoard();	TcpAgent::reset ();}/* * Process a dupack. */void FackTcpAgent::oldack(Packet* pkt){	hdr_tcp *tcph = hdr_tcp::access(pkt);	last_ack_ = tcph->seqno();	highest_ack_ = last_ack_;	fack_ = max(fack_,highest_ack_);	/* 	 * There are conditions under which certain versions of TCP (e.g., tcp-fs)	 * retract maxseq_. The following line of code helps in those cases. For	 * versions of TCP, it is a NOP.*/	maxseq_ = max(maxseq_, highest_ack_);	if (t_seqno_ < last_ack_ + 1)		t_seqno_ = last_ack_ + 1;	newtimer(pkt);	if (rtt_active_ && tcph->seqno() >= rtt_seq_) { 		rtt_active_ = 0;		t_backoff_ = 1;	}	/* with timestamp option */	double tao = Scheduler::instance().clock() - tcph->ts_echo();	rtt_update(tao);	if (ts_resetRTO_) {		// From Andrei Gurtov		// FACK has not been updated to make sure the ECN works		//   correctly in this case - Sally.		t_backoff_ = 1;	}	/* update average window */	awnd_ *= 1.0 - wnd_th_;	awnd_ += wnd_th_ * cwnd_;	/* if the connection is done, call finish() */	if ((highest_ack_ >= curseq_-1) && !closed_) {		closed_ = 1;		finish();	}}int FackTcpAgent::maxsack(Packet *pkt){	hdr_tcp *tcph = hdr_tcp::access(pkt);	int maxsack=-1, sack_index; 	for (sack_index=0; sack_index < tcph->sa_length(); sack_index++) {		if (tcph->sa_right(sack_index) > maxsack)			maxsack = tcph->sa_right(sack_index);	}	return (maxsack-1);}void FackTcpAgent::recv_newack_helper(Packet *pkt) {	newack(pkt);	opencwnd();	/* if the connection is done, call finish() */	if ((highest_ack_ >= curseq_-1) && !closed_) {		closed_ = 1;		finish();	}}void FackTcpAgent::recv(Packet *pkt, Handler*){	hdr_tcp *tcph = hdr_tcp::access(pkt);	int ms; #ifdef notdef	if (pkt->type_ != PT_ACK) {		Tcl::instance().evalf("%s error \"received non-ack\"",				      name());		Packet::free(pkt);		return;	}#endif	ts_peer_ = tcph->ts();	if (hdr_flags::access(pkt)->ecnecho() && ecn_)		ecn(tcph->seqno());	recv_helper(pkt);	if (!fastrecov_) {	// Not in fast recovery 		if ((int)tcph->seqno() > last_ack_ && tcph->sa_length() == 0) {			/*			 * regular ACK not in fast recovery... normal			 */			recv_newack_helper(pkt);			fack_ = last_ack_;			timeout_ = FALSE;			scb_->ClearScoreBoard();			retran_data_ = 0;			wintrim_ = 0;		} else if ((int)tcph->seqno() < last_ack_) {			// Do nothing; ack may have been misordered		} else {			retran_data_ -= scb_->UpdateScoreBoard (highest_ack_, tcph);			oldack(pkt);			ms = maxsack(pkt);			if (ms > fack_)				fack_ = ms;			if (fack_ >= t_seqno_)				t_seqno_ = fack_ + 1;			dupacks_ = (fack_ - last_ack_) - 1;			/* 			 * a duplicate ACK			 */			if (dupacks_ >= numdupacks_) {				/*				 * Assume we dropped just one packet.				 * Retransmit last ack + 1				 * and try to resume the sequence.				 */				recover_ = t_seqno_;				last_cwnd_action_ = CWND_ACTION_DUPACK;				if ((ss_div4_ == 1) && (cwnd_ <= ssthresh_ + .5)) {					cwnd_ /= 2;					wintrimmult_ = .75;				} else {					wintrimmult_ = .5;				}				slowdown(CLOSE_SSTHRESH_HALF|CLOSE_CWND_RESTART);				if (rampdown_) {					wintrim_ = (t_seqno_ - fack_ - 1) * wintrimmult_;				}				reset_rtx_timer(1,0);				fastrecov_ = TRUE;				scb_->MarkRetran (last_ack_+1, t_seqno_);				retran_data_++;				output(last_ack_ + 1, TCP_REASON_DUPACK);			}		}		if (dupacks_ == 0)			send_much(FALSE, 0, maxburst_);	} else {		// we are in fast recovery		oldack(pkt);		ms = maxsack(pkt);		if (ms > fack_) {			if (rampdown_) {				wintrim_ -= ((float)ms - (float)fack_)* wintrimmult_;				if (wintrim_< 0) 					wintrim_ = 0;			}			fack_ = ms;		}						if (fack_ >= t_seqno_)			t_seqno_ = fack_ + 1;		retran_data_ -= scb_->UpdateScoreBoard (highest_ack_, tcph);			// If the retransmission was lost again, timeout_ forced to TRUE		// if timeout_ TRUE, this shuts off send()		timeout_ |= scb_->CheckSndNxt (tcph);				opencwnd();		if (retran_data_ < 0) {			printf("Error, retran_data_ < 0");		}						if ((int)tcph->sa_length() == 0 && (last_ack_ >= recover_)) {			// No SACK blocks indicates fast recovery is over			fastrecov_ = FALSE;			timeout_ = FALSE;			scb_->ClearScoreBoard();			retran_data_ = 0;			wintrim_ = 0;			dupacks_ = 0;		}		send_much(FALSE, 0, maxburst_);	}	Packet::free(pkt);#ifdef notyet	if (trace_)		plot();#endif}void FackTcpAgent::timeout(int tno){	if (tno == TCP_TIMER_RTX) {		if (highest_ack_ == maxseq_ && !slow_start_restart_) {			/*			 * TCP option:			 * If no outstanding data, then don't do anything.			 */			return;		};		// Do not clear fastrecov_ or alter recover_ variable		timeout_ = FALSE;		if (highest_ack_ > last_ack_)			last_ack_ = highest_ack_;#ifdef DEBUGSACK1A		printf ("timeout. highest_ack: %d seqno: %d\n", 			highest_ack_, t_seqno_);#endif		retran_data_ = 0;		last_cwnd_action_ = CWND_ACTION_TIMEOUT;		/* if there is no outstanding data, don't cut down ssthresh_ */		if (highest_ack_ == maxseq_ && restart_bugfix_) 			slowdown(CLOSE_CWND_INIT);		else {			// close down to 1 segment			slowdown(CLOSE_SSTHRESH_HALF|CLOSE_CWND_RESTART);		}		scb_->ClearScoreBoard();		/* if there is no outstanding data, don't back off rtx timer */		if (highest_ack_ == maxseq_)			reset_rtx_timer(TCP_REASON_TIMEOUT,0);		else			reset_rtx_timer(TCP_REASON_TIMEOUT,1);		fack_ = last_ack_;		t_seqno_ = last_ack_ + 1;		send_much(0, TCP_REASON_TIMEOUT);	} else {		TcpAgent::timeout(tno);	}}void FackTcpAgent::send_much(int force, int reason, int maxburst){	register int found, npacket = 0;	send_idle_helper();	int win = window();	int xmit_seqno;	if (!force && delsnd_timer_.status() == TIMER_PENDING)		return;	/* 	 * If TCP_TIMER_BURSTSND is pending, cancel it. The timer is	 * set again, if necessary, after the maxburst pakts have been	 * sent out.*/	if (burstsnd_timer_.status() == TIMER_PENDING)		burstsnd_timer_.cancel();	found = 1;	/** as long as the pipe is open and there is app data to send...*/	while (( t_seqno_ <= fack_ + win - retran_data_) && (!timeout_)) {		if (overhead_ == 0 || force) {			found = 0;			xmit_seqno = scb_->GetNextRetran ();#ifdef DEBUGSACK1A			printf("highest_ack: %d xmit_seqno: %d timeout: %d seqno: %d fack: % d win: %d retran_data: %d\n",			       highest_ack_, xmit_seqno, timeout_, t_seqno_, fack_, win, retran_data_);#endif			if (xmit_seqno == -1) {  // no retransmissions to send				/* 				 * if there is no more application data to send,				 * do nothing				 */				if (t_seqno_ >= curseq_) 					return;				found = 1;				xmit_seqno = t_seqno_++;#ifdef DEBUGSACK1A				printf("sending %d fastrecovery: %d win %d\n",				       xmit_seqno, fastrecov_, win);#endif			} else {				found = 1;				scb_->MarkRetran (xmit_seqno, t_seqno_);				retran_data_++;				win = window();			}			if (found) {				output(xmit_seqno, reason);				if (t_seqno_ <= xmit_seqno) {					printf("Hit a strange case 2.\n");					t_seqno_ = xmit_seqno + 1;				}				npacket++;			}		} else if (!(delsnd_timer_.status() == TIMER_PENDING)) {			/*			 * Set a delayed send timeout.			 */			delsnd_timer_.resched(Random::uniform(overhead_));			return;		}		if (maxburst && npacket == maxburst)			break;	} /* while */	/* call helper function */	send_helper(maxburst);}/* * open up the congestion window -- Hack hack hack */void FackTcpAgent::opencwnd(){	TcpAgent::opencwnd();	// if maxcwnd_ is set (nonzero), make it the cwnd limit	if (maxcwnd_ && (int (cwnd_) > maxcwnd_))		cwnd_ = maxcwnd_;}void FackTcpAgent::plot(){#ifdef notyet	double t = Scheduler::instance().clock();	sprintf(trace_->buffer(), "t %g %d rtt %g\n", 		t, class_, t_rtt_ * tcp_tick_);	trace_->dump();	sprintf(trace_->buffer(), "t %g %d dev %g\n", 		t, class_, t_rttvar_ * tcp_tick_);	trace_->dump();	sprintf(trace_->buffer(), "t %g %d win %f\n", t, class_, cwnd_);	trace_->dump();	sprintf(trace_->buffer(), "t %g %d bck %d\n", t, class_, t_backoff_);	trace_->dump();#endif}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜久久久影院| 国产很黄免费观看久久| 欧美一区二区精品久久911| 日韩中文字幕麻豆| 欧美r级电影在线观看| 国产精品中文字幕一区二区三区| 日本一区二区免费在线| 91在线无精精品入口| 亚洲国产一区二区三区青草影视| 欧美福利电影网| 国产永久精品大片wwwapp| 亚洲国产成人午夜在线一区| 91视频精品在这里| 日韩经典一区二区| 久久久国际精品| 一本大道av伊人久久综合| 亚洲成av人**亚洲成av**| 欧美成人三级电影在线| 成人免费黄色在线| 亚洲国产视频a| 精品国产麻豆免费人成网站| 99这里只有久久精品视频| 亚洲成人福利片| 久久蜜桃一区二区| 一本色道久久加勒比精品| 日本午夜精品视频在线观看| 久久精品日产第一区二区三区高清版| 97久久超碰精品国产| 五月天丁香久久| 欧美激情一区二区三区| 欧美三级欧美一级| 国产精品一区二区男女羞羞无遮挡 | 成人免费在线观看入口| 欧美日韩精品一区二区三区| 国产一区二区三区不卡在线观看 | 紧缚捆绑精品一区二区| 综合精品久久久| 91精品国产综合久久福利| 国产成人aaaa| 性做久久久久久免费观看| 久久久亚洲精华液精华液精华液| 色综合久久久网| 精品一区二区三区日韩| 一区二区国产盗摄色噜噜| 2020国产精品自拍| 欧美三电影在线| 国产成人av一区二区| 日本最新不卡在线| 亚洲视频在线一区观看| 精品久久人人做人人爽| 欧美中文字幕一二三区视频| 国产高清视频一区| 天堂影院一区二区| 日韩伦理电影网| 欧美精品一区二区三区久久久 | 亚洲精品少妇30p| 久久精品视频一区二区| 欧美丰满一区二区免费视频| 99免费精品视频| 国产一区二区h| 日韩av在线发布| 亚洲黄色片在线观看| 国产日韩欧美麻豆| 777午夜精品免费视频| 91玉足脚交白嫩脚丫在线播放| 精品亚洲成av人在线观看| 午夜国产不卡在线观看视频| 亚洲欧美在线观看| 久久免费看少妇高潮| 欧美一区二区三区在| 91精品1区2区| 99久久亚洲一区二区三区青草| 国产真实乱对白精彩久久| 日韩影院在线观看| 亚洲一级二级在线| 亚洲免费av网站| 国产精品妹子av| 久久久国产精品麻豆| 欧美本精品男人aⅴ天堂| 欧美人妖巨大在线| 欧美体内she精视频| 色综合久久综合| 9l国产精品久久久久麻豆| 东方aⅴ免费观看久久av| 国内精品第一页| 久久精品国产**网站演员| 日韩国产欧美一区二区三区| 亚洲一区在线播放| 亚洲精品v日韩精品| 中文字幕一区二区三区在线观看| 国产欧美日韩在线视频| 久久日一线二线三线suv| 欧美大胆一级视频| 日韩一区二区三免费高清| 欧美另类z0zxhd电影| 欧美日韩一区小说| 欧美色窝79yyyycom| 在线免费观看一区| 在线观看一区不卡| 日本精品一区二区三区四区的功能| heyzo一本久久综合| www.一区二区| www.亚洲免费av| 91丨porny丨最新| 91丝袜美女网| 色综合一个色综合亚洲| 99九九99九九九视频精品| 99久久免费国产| 91麻豆蜜桃一区二区三区| 91国偷自产一区二区开放时间| 色94色欧美sute亚洲线路二| 在线亚洲精品福利网址导航| 欧洲一区在线电影| 欧美色区777第一页| 欧美精品色综合| 日韩午夜在线观看| 精品久久久久香蕉网| 久久久av毛片精品| 中文字幕欧美激情一区| 中文字幕一区在线观看| 玉足女爽爽91| 香蕉久久夜色精品国产使用方法| 婷婷开心久久网| 久久精品国产亚洲一区二区三区 | 久久成人精品无人区| 韩国中文字幕2020精品| 国产成人av电影| www.欧美亚洲| 欧美性xxxxxxxx| 日韩一区二区影院| 久久老女人爱爱| 亚洲欧洲精品一区二区精品久久久 | 亚洲一本大道在线| 天堂久久一区二区三区| 久久精品国产精品青草| 国产成人亚洲综合a∨婷婷图片| 成人激情校园春色| 在线观看视频欧美| 91精品欧美一区二区三区综合在 | 天天综合色天天| 狠狠色综合日日| k8久久久一区二区三区| 欧美综合一区二区| 日韩欧美中文字幕制服| 日本一区二区免费在线| 亚洲亚洲人成综合网络| 麻豆成人91精品二区三区| 国产成人精品一区二区三区四区| 91色porny| 91精品欧美综合在线观看最新| 久久精品夜色噜噜亚洲a∨| 亚洲女爱视频在线| 蜜臀av一区二区在线观看| 国产不卡免费视频| 欧美亚洲国产一区二区三区va| 日韩欧美一级二级三级久久久| 国产精品久久久久永久免费观看 | 欧美午夜视频网站| 精品国产乱码久久久久久蜜臀| 中文字幕视频一区二区三区久| 天天色图综合网| 成人精品视频.| 欧美高清你懂得| 欧美极品美女视频| 午夜精品视频一区| 国产91综合一区在线观看| 欧美三级韩国三级日本一级| 久久亚洲捆绑美女| 一区二区三区四区乱视频| 精品在线一区二区三区| 91丨porny丨户外露出| 日韩美女视频在线| 亚洲视频在线观看三级| 麻豆国产一区二区| 91蜜桃免费观看视频| 精品欧美久久久| 亚洲一区在线观看网站| 国产成人欧美日韩在线电影| 欧美精品少妇一区二区三区| 国产精品蜜臀av| 精品在线观看视频| 欧美丝袜自拍制服另类| 国产精品少妇自拍| 久久精品国产99国产| 欧美艳星brazzers| 国产精品美女一区二区三区| 久久精品国产亚洲高清剧情介绍 | 久久av资源站| 欧美性一二三区| 国产精品麻豆久久久| 玖玖九九国产精品| 欧美体内she精高潮| 国产精品麻豆久久久| 国内精品国产三级国产a久久| 欧美久久久影院| 亚洲激情在线激情| 成人一区二区三区中文字幕| 日韩精品一区二区三区三区免费| 亚洲一区二区黄色| 99久久夜色精品国产网站|