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

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

?? tcp-newreno.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[] =    "@(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/tcp/tcp-newreno.cc,v 1.56 2004/10/26 22:59:42 sfloyd Exp $ (LBL)";#endif//// newreno-tcp: a revised reno TCP source, without sack//#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include "packet.h"#include "ip.h"#include "tcp.h"#include "flags.h"extern  double 		rts_retry;static class NewRenoTcpClass : public TclClass {public:	NewRenoTcpClass() : TclClass("Agent/TCP/Newreno") {}	TclObject* create(int, const char*const*) {		return (new NewRenoTcpAgent());	}} class_newreno;NewRenoTcpAgent::NewRenoTcpAgent() : newreno_changes_(0),   newreno_changes1_(0), acked_(0), firstpartial_(0),   partial_window_deflation_(0), exit_recovery_fix_(0){	bind("newreno_changes_", &newreno_changes_);	bind("newreno_changes1_", &newreno_changes1_);	bind("exit_recovery_fix_", &exit_recovery_fix_);	bind("partial_window_deflation_", &partial_window_deflation_);}/*  * Process a packet that acks previously unacknowleges data, but * does not take us out of Fast Retransmit. */void NewRenoTcpAgent::partialnewack(Packet* pkt){	hdr_tcp *tcph = hdr_tcp::access(pkt);	if (partial_window_deflation_) {		// Do partial window deflation before resetting last_ack_		unsigned int deflate = 0; // Should initialize it?? - haoboy		if (tcph->seqno() > last_ack_) // assertion			deflate = tcph->seqno() - last_ack_;		else 		  	printf("False call to partialnewack:  deflate %u \last_ack_ %d\n", deflate, last_ack_);		if (dupwnd_ > deflate)			dupwnd_ -= (deflate - 1);		else {			cwnd_ -= (deflate - dupwnd_);			// Leave dupwnd_ > 0 to flag "fast recovery" phase			dupwnd_ = 1; 		}		if (cwnd_ < 1) {cwnd_ = 1;}	}	last_ack_ = tcph->seqno();	highest_ack_ = last_ack_;	if (t_seqno_ < last_ack_ + 1)		t_seqno_ = last_ack_ + 1;	if (rtt_active_ && tcph->seqno() >= rtt_seq_) {		rtt_active_ = 0;		t_backoff_ = 1;	}}void NewRenoTcpAgent::partialnewack_helper(Packet* pkt){	if (!newreno_changes1_ || firstpartial_ == 0) {		firstpartial_ = 1;		/* For newreno_changes1_, 		 * only reset the retransmit timer for the first		 * partial ACK, so that, in the worst case, we		 * don't have to wait for one packet retransmitted		 * per RTT.		 */		newtimer(pkt);	}	partialnewack(pkt);	output(last_ack_ + 1, 0);}intNewRenoTcpAgent::allow_fast_retransmit(int /* last_cwnd_action_*/){	return 0;}voidNewRenoTcpAgent::dupack_action(){        int recovered = (highest_ack_ > recover_);	int recovered1 = (highest_ack_ == recover_);        int allowFastRetransmit = allow_fast_retransmit(last_cwnd_action_);        if (recovered || (!bug_fix_ && !ecn_) || allowFastRetransmit) {                goto reno_action;        }	if (bug_fix_ && less_careful_ && recovered1) {		/*		 * For the Less Careful variant, allow a Fast Retransmit		 *  if highest_ack_ == recover.		 * RFC 2582 recommends the Careful variant, not the 		 *  Less Careful one.		 */                goto reno_action;	}        if (ecn_ && last_cwnd_action_ == CWND_ACTION_ECN) {                last_cwnd_action_ = CWND_ACTION_DUPACK;                /*                 * What if there is a DUPACK action followed closely by ECN                 * followed closely by a DUPACK action?                 * The optimal thing to do would be to remember all                 * congestion actions from the most recent window                 * of data.  Otherwise "bugfix" might not prevent                 * all unnecessary Fast Retransmits.                 */                reset_rtx_timer(1,0);                output(last_ack_ + 1, TCP_REASON_DUPACK);		dupwnd_ = numdupacks_;                return;        }        if (bug_fix_) {		if (bugfix_ts_ && tss[highest_ack_ % tss_size_] == ts_echo_)			goto reno_action;		else if (bugfix_ack_ && cwnd_ > 1 && highest_ack_ - prev_highest_ack_ <= numdupacks_)			goto reno_action;		else                /*                 * The line below, for "bug_fix_" true, avoids                 * problems with multiple fast retransmits in one                 * window of data.                 */                	return;        }reno_action:        recover_ = maxseq_;        reset_rtx_timer(1,0);        if (!lossQuickStart()) {                trace_event("NEWRENO_FAST_RETX");        	last_cwnd_action_ = CWND_ACTION_DUPACK;// ////////////////////////////////////////////////////////////////////////////		printf("%f\n",rts_retry);		if((afew_==0) ||((afew_==1) &&(rts_retry>2) ) ) //by chen add// ////////////////////////////////////////////////////////////////////////        		slowdown(CLOSE_SSTHRESH_HALF|CLOSE_CWND_HALF);        	output(last_ack_ + 1, TCP_REASON_DUPACK);       // from top		dupwnd_ = numdupacks_;	}        return;}void NewRenoTcpAgent::recv(Packet *pkt, Handler*){	hdr_tcp *tcph = hdr_tcp::access(pkt);	int valid_ack = 0;	/* Use first packet to calculate the RTT  --contributed by Allman */        if (qs_approved_ == 1 && tcph->seqno() > last_ack_)		endQuickStart();        if (qs_requested_ == 1)                processQuickStart(pkt);	if (++acked_ == 1) 		basertt_ = Scheduler::instance().clock() - firstsent_;	/* Estimate ssthresh based on the calculated RTT and the estimated	   bandwidth (using ACKs 2 and 3).  */	else if (acked_ == 2)		ack2_ = Scheduler::instance().clock();	else if (acked_ == 3) {		ack3_ = Scheduler::instance().clock();		new_ssthresh_ = int((basertt_ * (size_ / (ack3_ - ack2_))) / size_);		if (newreno_changes_ > 0 && new_ssthresh_ < ssthresh_)			ssthresh_ = new_ssthresh_;	}#ifdef notdef	if (pkt->type_ != PT_ACK) {		fprintf(stderr,			"ns: confiuration error: tcp received non-ack\n");		exit(1);	}#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();	if (hdr_flags::access(pkt)->ecnecho() && ecn_)		ecn(tcph->seqno());	recv_helper(pkt);	recv_frto_helper(pkt);	if (tcph->seqno() > last_ack_) {		if (tcph->seqno() >= recover_ 		    || (last_cwnd_action_ != CWND_ACTION_DUPACK)) {			if (dupwnd_ > 0) {			     dupwnd_ = 0;			     if (last_cwnd_action_ == CWND_ACTION_DUPACK)				last_cwnd_action_ = CWND_ACTION_EXITED;			     if (exit_recovery_fix_) {				int outstanding = maxseq_ - tcph->seqno() + 1;				if (ssthresh_ < outstanding)                                        cwnd_ = ssthresh_;                                else                                        cwnd_ = outstanding;			    }			}			firstpartial_ = 0;			recv_newack_helper(pkt);			if (last_ack_ == 0 && delay_growth_) {				cwnd_ = initial_window();			}		} else {			/* received new ack for a packet sent during Fast			 *  Recovery, but sender stays in Fast Recovery */			if (partial_window_deflation_ == 0)				dupwnd_ = 0;			partialnewack_helper(pkt);		}	} else if (tcph->seqno() == last_ack_) {		if (hdr_flags::access(pkt)->eln_ && eln_) {			tcp_eln(pkt);			return;		}		if (++dupacks_ == numdupacks_) {			dupack_action();                        if (!exitFastRetrans_)                                dupwnd_ = numdupacks_;		} else if (dupacks_ > numdupacks_ && (!exitFastRetrans_		      || last_cwnd_action_ == CWND_ACTION_DUPACK)) {			trace_event("NEWRENO_FAST_RECOVERY");			++dupwnd_;	// fast recovery			/* For every two duplicate ACKs we receive (in the			 * "fast retransmit phase"), send one entirely new			 * data packet "to keep the flywheel going".  --Allman			 */			if (newreno_changes_ > 0 && (dupacks_ % 2) == 1)				output (t_seqno_++,0);		} else if (dupacks_ < numdupacks_ && singledup_ ) {                        send_one();                }	}        if (tcph->seqno() >= last_ack_)                // Check if ACK is valid.  Suggestion by Mark Allman.                valid_ack = 1;	Packet::free(pkt);#ifdef notyet	if (trace_)		plot();#endif	/*	 * Try to send more data	 */        if (valid_ack || aggressive_maxburst_)		if (dupacks_ == 0) 			/*			 * Maxburst is really only needed for the first			 *  window of data on exiting Fast Recovery.			 */			send_much(0, 0, maxburst_);		else if (dupacks_ > numdupacks_ - 1 && newreno_changes_ == 0)			send_much(0, 0, 2);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利一区在线观看| 免费欧美在线视频| 日韩欧美一级精品久久| 97se亚洲国产综合自在线观| 免费成人av资源网| 一区二区三区中文字幕| 国产欧美精品一区二区三区四区| 精品污污网站免费看| 成人av在线观| 麻豆成人免费电影| 亚洲午夜一区二区| 国产精品看片你懂得| 精品粉嫩aⅴ一区二区三区四区| 在线观看日韩高清av| 成人免费视频视频在线观看免费 | 色综合夜色一区| 大胆欧美人体老妇| 日韩精品亚洲专区| 最近中文字幕一区二区三区| 久久综合久久综合亚洲| 欧美一级专区免费大片| 蜜臀av一区二区在线免费观看| 一级日本不卡的影视| 中文字幕乱码一区二区免费| 久久综合久久综合九色| 日韩欧美第一区| 91精品黄色片免费大全| 欧美日韩国产影片| 91高清视频免费看| 色94色欧美sute亚洲13| 99久久精品99国产精品| 日韩一区和二区| 欧美中文字幕久久| 色网站国产精品| 91久久精品一区二区三| 91一区二区三区在线观看| 成人黄色免费短视频| 99久久精品国产网站| voyeur盗摄精品| 一本大道久久精品懂色aⅴ| 91在线观看污| 91福利在线观看| 欧美日韩精品高清| 欧美美女喷水视频| 91精品国产色综合久久不卡电影| 欧美日本免费一区二区三区| 在线不卡免费av| 日韩午夜激情免费电影| 欧美精品一区二区久久久| 久久精品欧美一区二区三区麻豆| 久久综合狠狠综合久久激情| 国产欧美1区2区3区| 国产精品久久久久久久久果冻传媒 | 蜜桃av噜噜一区| 久久精品999| 国产乱国产乱300精品| 国产成+人+日韩+欧美+亚洲| av不卡免费在线观看| 在线免费观看日本一区| 欧日韩精品视频| 91精品一区二区三区在线观看| 日韩视频不卡中文| 国产片一区二区| 亚洲色欲色欲www| 丝袜国产日韩另类美女| 极品少妇xxxx精品少妇| 福利电影一区二区| 91电影在线观看| 亚洲免费伊人电影| 日韩1区2区3区| 国产成人无遮挡在线视频| 99视频精品免费视频| 欧美日韩www| 久久久精品影视| 亚洲精品第一国产综合野| 久久久久久久久蜜桃| 成人欧美一区二区三区白人| 午夜天堂影视香蕉久久| 国产在线精品免费| 色欲综合视频天天天| 欧美一级二级在线观看| 国产精品国模大尺度视频| 图片区日韩欧美亚洲| 国产成人精品亚洲午夜麻豆| 欧美午夜理伦三级在线观看| 欧美精品一区二区高清在线观看 | 亚洲在线视频网站| 国产综合色精品一区二区三区| 99精品视频在线观看免费| 欧美精品欧美精品系列| 国产精品五月天| 蜜臀99久久精品久久久久久软件 | 一本久久a久久精品亚洲| 欧美电影免费观看完整版| 亚洲视频一区在线| 久久99精品久久久久| 色婷婷综合久久久中文一区二区| 日韩免费性生活视频播放| **网站欧美大片在线观看| 久久精品国产在热久久| 91视频国产观看| 久久亚洲二区三区| 波多野结衣视频一区| 日韩欧美国产小视频| 夜夜嗨av一区二区三区中文字幕| 国产乱码精品一区二区三区av | 欧美成人a视频| 亚洲欧美日韩在线播放| 国产成人亚洲综合色影视| 日韩亚洲欧美中文三级| 一区二区三区**美女毛片| 国产v综合v亚洲欧| 久久夜色精品一区| 免费高清视频精品| 欧美日韩夫妻久久| 艳妇臀荡乳欲伦亚洲一区| 99久久国产综合精品麻豆| 欧美激情一区在线观看| 精品一区二区三区视频在线观看| 欧美日韩大陆在线| 亚洲国产成人av网| 一本在线高清不卡dvd| 国产精品亲子伦对白| 国产剧情一区二区| 久久午夜国产精品| 狠狠色狠狠色综合系列| 精品免费视频一区二区| 欧美96一区二区免费视频| 69久久99精品久久久久婷婷| 亚洲国产一二三| 欧美色老头old∨ideo| 伊人婷婷欧美激情| 色噜噜狠狠成人中文综合| 亚洲精品视频在线| 色哟哟国产精品免费观看| 中文字幕综合网| 日本精品一区二区三区四区的功能| 国产精品美女久久福利网站| 国产成人在线影院| 国产精品天干天干在线综合| 国产a级毛片一区| 国产欧美一区二区在线观看| 国产成人免费视频| 国产精品国产三级国产a | 成人免费视频视频| 亚洲婷婷在线视频| 色先锋aa成人| 视频一区欧美精品| 精品日韩一区二区| 国产精品 欧美精品| 亚洲国产精品国自产拍av| 成人h版在线观看| 一区二区三区在线不卡| 欧美日韩精品电影| 精品一区精品二区高清| 国产欧美va欧美不卡在线| 91在线云播放| 调教+趴+乳夹+国产+精品| 日韩精品一区二| 日韩欧美国产一区二区三区| 国产精品中文字幕日韩精品| 国产精品久久久久三级| 在线观看国产91| 美脚の诱脚舐め脚责91| 欧美国产精品v| 91高清视频在线| 麻豆精品久久久| 国产精品久久看| 欧美日韩和欧美的一区二区| 美女看a上一区| 国产精品每日更新| 欧美日韩和欧美的一区二区| 国产中文字幕一区| 亚洲欧美成aⅴ人在线观看| 4438x成人网最大色成网站| 国产乱对白刺激视频不卡| 一级女性全黄久久生活片免费| 精品少妇一区二区三区免费观看| www.成人网.com| 免播放器亚洲一区| 亚洲视频资源在线| 日韩亚洲欧美综合| 91麻豆精东视频| 久草中文综合在线| 依依成人精品视频| 久久精品亚洲一区二区三区浴池| 色狠狠色狠狠综合| 国产伦精品一区二区三区免费 | 成人免费视频播放| 麻豆成人91精品二区三区| 亚洲欧洲成人av每日更新| 91精品国产一区二区三区香蕉| 成人免费高清在线观看| 日本欧美一区二区| 亚洲免费观看高清完整版在线 | 五月天婷婷综合| 激情成人综合网| 亚洲国产一区二区视频| 中文字幕在线不卡国产视频| 日韩精品中文字幕在线一区|