Re: [icnrg] Some background on draft-oran-icnrg-flowbalance-00.txt

"David R. Oran" <> Sat, 03 August 2019 14:08 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 4507F12009C for <>; Sat, 3 Aug 2019 07:08:04 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id kxg0UZbe8EDu for <>; Sat, 3 Aug 2019 07:08:02 -0700 (PDT)
Received: from ( [IPv6:2607:fca8:1530::c]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id EFB6A12008C for <>; Sat, 3 Aug 2019 07:08:01 -0700 (PDT)
Received: from [] ([IPv6:2601:184:4081:19c1:e157:8a14:eb06:38ca]) (authenticated bits=0) by (8.14.4/8.14.4/Debian-4+deb7u1) with ESMTP id x73E7ulh014378 (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256 verify=NO) for <>; Sat, 3 Aug 2019 07:07:58 -0700
Resent-From: "David R. Oran" <>
Resent-To: ICNRG <>
Resent-Date: Sat, 03 Aug 2019 10:07:55 -0400
Resent-Message-ID: <>
From: "David R. Oran" <>
To: "Naveen Nathan" <>
Date: Sat, 03 Aug 2019 09:13:35 -0400
X-Mailer: MailMate (1.12.5r5643)
Message-ID: <>
In-Reply-To: <>
References: <> <>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Archived-At: <>
Subject: Re: [icnrg] Some background on draft-oran-icnrg-flowbalance-00.txt
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Information-Centric Networking research group discussion list <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Sat, 03 Aug 2019 14:08:04 -0000

On 3 Aug 2019, at 7:41, Naveen Nathan wrote:

> (response off-list)
Do you mind if I post this reply to the list? These are really good 

> I briefly read the draft. My CCNx/NDN is a bit rusty, so excuse my 
> ignorance
> below.
> First minor corrections:
>   - "nunce" -> "nuance"
>   - "obver-" (allocation) -> "over-" (allocation)
>   - "reasonable algorithm is in sue" -> "[...] use"
>   - "Dealing with for malicious actors" -> minus "for"
Fixed in my local copy. Will re-post once more comments come in.

> Regarding the consumer under-estimating (i.e. too big objects), I 
> think it
> might be good to elaborate on a different dimension such a lossy 
> versus
> lossless protocols. E.g. video streaming can deal with a loss of a 
> large
> object, and be informed of what to request in subsequent chunks. But 
> this can
> get tricky with VBR style encoding. But perhaps this is actually a bad 
> example
> since most video stream will use a manifest mechanism so requests 
> would have
> accurate estimates.
The issue here isn’t the loss, since any dynamic congestion control 
algorithm will either wind up under-allocating bottleneck links by a 
large fraction, or occasionally allow buffers to overflow and drop 
packets. I didn’t put much of a tutorial on basic congestion control 
in the document since the reader is assumed familiar with the cited 
references. What may be worth reiterating is that even congestion 
control algorithm has an explicit fairness goal and associated objective 
function (usually either min-max fairness or proportional fairness). If 
your fairness is to be based on resource usage, pure interest counting 
doesn’t do the trick, since a consumer asking for large thing can 
saturate a link and shift loss to consumers asking for small things.

Does that make sense? Should the document say more about this?

> I also think you should mention that this mechanism can be used to 
> inform a
> congestion control algorithm. I do note that this is explicitly 
> mentioned in
> section 3.
Hmmm, maybe I need to be more direct?

> About section 3.4. where you describe interest aggregation. You 
> recommend the
> second policy of giving a large object to correctly/over-estimating 
> consumers,
> whereas underestimating consumers get T_MTU_TOO_LARGE (also does "MTU" 
> make
> sense instead of "REQUEST"?). Shouldn't all consumers get it, if the 
> link isn't
> congested? I think this T_MTU_TOO_LARGE should only be sent if there's
> contention on the link and insufficient bandwidth can be allocated.
That’s of course a possibility. I decided recommending the error for 
the following reasons (which perhaps ought to be explicitly stated in 
the spec):
1. The link can be congested quite quickly after the queuing decision is 
made, especially if the data has a long link-occupancy time, so this is 
a safer alternative.
2. The cost of returning the error is only one link RTT, since the 
consumer can immediately re-issue the interest with the correct size and 
pick up the cached object from the upstream forwarder’s CS.
3. I tried to completely avoid the issues of aggregate resource control 
and the associated billing swamp, since returning the data raises the 
messy issue of whether to “charge” the actual used bandwidth to the 
consumer, or only the requested bandwidth through the expected data 
size. The rabbit hole goes deeper if you add differential QoS to the 
equation (another subject intentioanally not talked about in the 
document for many reasons) as consumers “playing games” and 
intentionally underestimating so their interests get satisfied when 
links aren’t congested gets you into all the considerations of 
malicious actors discussed later.

> As for my opinion: I really like it, it's a simple technique, and 
> optional to
> consumers and routers. I hope Cisco IPR people can allow its use 
> without
> restriction.
Thanks for the support! As long as the Cisco folks use their regular IPR 
terms, for experimental RFCs the terms in the past have said “free to 
use” for anybody complying with the spec as approved by the IETF/IRTF.

> - Naveen
> On Sat, 3 Aug 2019, at 12:56 AM, David R. Oran wrote:
>> <Chair hat off> (obviously)
>> I just submitted
>> This is something I’ve been noodling on for a long time because of 
>> my
>> continuing interest in congestion control for ICN. It derives from 
>> some
>> work I did at Cisco a few years ago which I believe has become 
>> timely. A
>> number of interesting ICN use cases have either highly variable (e.g.
>> video), very large (e.g. scientific data), or very small (e.g. IoT
>> sensor) data objects, while all the congestion control schemes 
>> currently
>> published (to my knowledge) only do interest counting which can’t
>> account for this variability.
>> I’m obviously super-interested in what people think of this 
>> approach.
>> It is deceptively simple (only requires one new TLV with easy switch
>> from interest counting to fine-grained byte-based resource control 
>> for
>> congestion and possibly QoS extensions). However, like most things 
>> with
>> CCNx, it has interesting subtleties with respect to interest 
>> aggregation
>> and consumers trying to game the system, both of which are covered in
>> the spec.
>> As a final note, this has Cisco IPR on it. I’ve talked to the Cisco
>> folks and they’ll put in the usual Cisco IETF-oriented IPR 
>> declaration
>> when they get back from vacation (i.e. don’t hold your breath).
>> Thanks much!
>> DaveO
>> _______________________________________________
>> icnrg mailing list