When a Host A sends for the first time a NS request to another Host B, host B answers with a NA.

In Host A Neighbor Cache, the state Entry for host B gets from INCOMPLETE to REACHABLE, when NA comes back.

But what happens in the remote Host B ?
RFC4861 describes :

Nodes send Neighbor Solicitations to request the link-layer address of a target node while also providing their own link-layer address to the target.

So that means that Host B should take advantage of the situation and make a new entry for Host A in his cache.
But what would the state for this entry be ?

The standard describes:

Receipt of other Neighbor Discovery messages, such as Router Advertisements and Neighbor Advertisement with the Solicited flag set to zero, MUST NOT be treated as a reachability confirmation. Receipt of unsolicited messages only confirms the one-way path from the sender to the recipient node. In contrast, Neighbor Unreachability Detection requires that a node keep track of the reachability of the forward path to a neighbor from its perspective, not the neighbor’s perspective. Note that receipt of a solicited advertisement indicates that a path is working in both directions. The solicitation must have reached the neighbor, prompting it to generate an advertisement. Likewise, receipt of an advertisement indicates that the path from the sender to the recipient is working. However, the latter fact is known only to the recipient; the advertisement’s sender has no direct way of knowing that the advertisement it sent actually reached a neighbor. From the perspective of Neighbor Unreachability Detection, only the reachability of the forward path is of interest.

So, in our case the Host A shouldn't be declared REACHABLE for Host B ?
Could it be, that it's declared STALE ?

If you could also provide some kind of source document together with your explanation, it would be really appreciated. :)


Yes, an entry SHOULD be created or updated as STALE, but what a particular OS actually does is off-topic here. RFC 4861, Neighbor Discovery for IP version 6 (IPv6) clearly spells out what happens when Host B receives a Neighbor Solicitation from Host A (I have highlighted the relevant text):

7.2.3. Receipt of Neighbor Solicitations

A valid Neighbor Solicitation that does not meet any of the following requirements MUST be silently discarded:

  • The Target Address is a "valid" unicast or anycast address assigned to the receiving interface [ADDRCONF],

  • The Target Address is a unicast or anycast address for which the node is offering proxy service, or

  • The Target Address is a "tentative" address on which Duplicate Address Detection is being performed [ADDRCONF].

If the Target Address is tentative, the Neighbor Solicitation should be processed as described in [ADDRCONF]. Otherwise, the following description applies. If the Source Address is not the unspecified address and, on link layers that have addresses, the solicitation includes a Source Link-Layer Address option, then the recipient SHOULD create or update the Neighbor Cache entry for the IP Source Address of the solicitation. If an entry does not already exist, the node SHOULD create a new one and set its reachability state to STALE as specified in Section 7.3.3. If an entry already exists, and the cached link-layer address differs from the one in the received Source Link-Layer option, the cached address should be replaced by the received address, and the entry's reachability state MUST be set to STALE.

If a Neighbor Cache entry is created, the IsRouter flag SHOULD be set to FALSE. This will be the case even if the Neighbor Solicitation is sent by a router since the Neighbor Solicitation messages do not contain an indication of whether or not the sender is a router. In the event that the sender is a router, subsequent Neighbor Advertisement or Router Advertisement messages will set the correct IsRouter value. If a Neighbor Cache entry already exists, its IsRouter flag MUST NOT be modified.

If the Source Address is the unspecified address, the node MUST NOT create or update the Neighbor Cache entry.

After any updates to the Neighbor Cache, the node sends a Neighbor Advertisement response as described in the next section.

  • Nice! But maybe a point stays vague.. Could the the Neighbor Advertisement response packet that comes after trigger the transition from STALE to DELAY ? – Fillipos Christou Jun 19 '19 at 22:09
  • Great answer, thanks! – Yagiz Degirmenci Mar 17 at 19:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.