Interest NACK
description
Transcript of Interest NACK
Interest NACKJunxiao Shi, 2014-07-18
Introduction• Interest NACK, aka "negative acknowledgement", is sent from
upstream to downstream to inform that Data could not be retrieved in response to an Interest.• Interest NACK is useful in forwarding strategy as a explicit signal, for
congestion control and other purposes.• This document is a proposal for including Interest NACK in NDN-TLV
packet format, and in NFD forwarding pipelines.
Semantics
Interest NACK• An Interest NACK is a packet sent by upstream to inform the
downstream that Data cannot be retrieved or delivered in response to an Interest.• An Interest NACK contains an Interest and a reason code.
Interest in Interest NACK• The Interest in an Interest NACK is the Interest that triggers the
Interest NACK.• After an Interest packet is forwarded from downstream to upstream,
the upstream can either return a Data, or return an Interest NACK that contains this Interest.• On each point to point link, with absence of packet loss, there is a flow
balance between Interests vs Data + Interest NACKs.
Reason in Interest NACK• The reason code in an Interest NACK indicates why the upstream
wants to send an Interest NACK in response to the enclosed Interest.• Commonly used reason codes include Duplicate, Congestion, NoData,
Busy, etc (defined in this section)
Reason: Duplicate• An Interest NACK with reason code Duplicate informs the
downstream that the Interest is a duplicate, because the combination of Name and Nonce is previously seen by the upstream.• This means either the Interest is looped, or the Interest has reached
the upstream via another path.
Reason: Congestion• An Interest NACK with reason code Congestion informs the
downstream that there is a congestion on the forwarding path of the Interest.• The congestion can occur on the link between downstream and
upstream, or on the path from upstream toward the content source(s).• The congestion can occur in either direction.
Reason: NoData• An Interest NACK with reason code NoData informs the downstream
that the upstream has no route to forward the Interest.
Reason: Busy• An Interest NACK with reason code Busy informs the downstream that
the Interest has reached a producer, but the producer is too busy to handle this Interest.
Packet Format
Packet FormatInterestNack ::= INTEREST-NACK-TYPE TLV-LENGTH Interest NackCode
NackCode ::= NACK-CODE-TYPE TLV-LENGTH nonNegativeInteger
Interest NACK is not an Interest• An Interest is intended to retrieve some content.• An Interest NACK is to inform the downstream about a problem, and
upstream is not expecting a response from the downstream.
Interest NACK is not a Data• A Data is a piece of content in response to an Interest, that should be
forwarded toward the consumer.• An Interest NACK is in response to an Interest, but it's a hop-by-hop
message that is useful in the network, but useless for the consumer.
Interest NACK is a third packet type• The processing path for Interest NACKs is different from either
Interest or Data, so it should be a third packet type.
Interest NACK is unsigned• Interest NACK is hop-by-hop, so it cannot be used to confuse a
faraway node.• Malicious nodes can gain nothing by sending bogus Interest NACKs.
Sending an Interest NACK informs the downstream that the upstream doesn't work for the Interest, while the malicious node may as well silently drop the Interest.
Forwarding Pipelines
Incoming NACK pipeline
PIT match
receive NACK
trigger strategy: after receive NACK
(drop)
mark out-record as NACKed
N
has out-record?
Y
(drop)
N
Y
Outgoing NACK pipeline
send NACKstrategy action: send NACK
mark in-record as NACKed
has in-record?
(drop)
N
Y
NACKed field in PIT in-record• A NACKed field is added to PIT in-record.• This field is cleared in Incoming Interest pipeline.• This field is set to the reason code in Outgoing NACK pipeline.• The purpose of this field is to help forwarding strategy make
decisions.
NACKed field in PIT out-record• A NACKed field is added to PIT out-record.• This field is cleared in Outgoing Interest pipeline.• This field is set to the reason code in Incoming NACK pipeline.• The purpose of this field is to help forwarding strategy make
decisions.