A node sends a neighbor solicitation message, which has a value of 135 in the Type field of the ICMP packet header, on the local link when it wants to determine the link-layer address of another node on the same local link. The source address is the IPv6 address of the node that sends the neighbor solicitation message. The destination address is the solicited-node multicast address that corresponds to the IPv6 address of the destination node. The neighbor solicitation message also includes the link-layer address of the source node.
Figure 12. IPv6 Neighbor Discovery-Neighbor Solicitation Message
After receiving the neighbor solicitation message, the destination node replies by sending a neighbor advertisement message, which has a value of 136 in the Type field of the ICMP packet header, on the local link. The source address is the IPv6 address of the node (the IPv6 address of the node interface that sends the neighbor advertisement message). The destination address is the IPv6 address of the node that sends the neighbor solicitation message. The data portion includes the link-layer address of the node that sends the neighbor advertisement message.
After the source node receives the neighbor advertisement, the
source node and destination node can communicate.
Neighbor solicitation messages can verify the reachability of a
neighbor after a node identifies the link-layer address of a
neighbor. When a node wants to verify the reachability of a
neighbor, it uses the destination address in a neighbor
solicitation message as the unicast address of the neighbor.
Neighbor advertisement messages are also sent when there is a
change in the link-layer address of a node on a local link. When
there is a change, the destination address for the neighbor
advertisement is the all-nodes multicast address.
Neighbor unreachability detection identifies the failure of a
neighbor or the failure of the forward path to the neighbor and is
used for all paths between hosts and neighboring nodes (hosts or
routers). Neighbor unreachability detection is performed for
neighbors to which only unicast packets are being sent and is not
performed for neighbors to which multicast packets are being
A neighbor is considered reachable when a positive
acknowledgment is returned from the neighbor (indicating that
packets previously sent to the neighbor have been received and
processed). A positive acknowledgment-from an upper-layer protocol
(such as TCP)-indicates that a connection is making forward
progress (reaching its destination). If packets are reaching the
peer, they are also reaching the next-hop neighbor of the source.
Forward progress is also a confirmation that the next-hop neighbor
For destinations that are not on the local link, forward
progress implies that the first-hop router is reachable. When
acknowledgments from an upper-layer protocol are not available, a
node probes the neighbor using unicast neighbor solicitation
messages to verify that the forward path is still working. The
return of a solicited neighbor advertisement message from the
neighbor is a positive acknowledgment that the forward path is
still working (neighbor advertisement messages that have the
solicited flag set to a value of 1 are sent only in response to a
neighbor solicitation message). Unsolicited messages confirm only
the one-way path from the source to the destination node; solicited
neighbor advertisement messages indicate that a path is working in
A neighbor advertisement message that has the solicited flag set to a value of 0 is not considered as a positive acknowledgment that the forward path is still working.
Neighbor solicitation messages are also used in the stateless autoconfiguration process to verify the uniqueness of unicast IPv6 addresses before the addresses are assigned to an interface. Duplicate address detection is performed first on a new, link-local IPv6 address before the address is assigned to an interface (the new address remains in a tentative state while duplicate address detection is performed). A node sends a neighbor solicitation message with an unspecified source address and a tentative link-local address in the body of the message. If another node is already using that address, the node returns a neighbor advertisement message that contains the tentative link-local address. If another node is simultaneously verifying the uniqueness of the same address, that node also returns a neighbor solicitation message. If no neighbor advertisement messages are received in response to the neighbor solicitation message and no neighbor solicitation messages are received from other nodes that are attempting to verify the same tentative address, the node that sent the original neighbor solicitation message considers the tentative link-local address to be unique and assigns the address to the interface.