Understanding PNRP Clouds

In the next few days, I'd like to post portions of the debugging guide that we've been compiling. First, we need to explain PNRP clouds and cloud states and run through our powerful but cryptic netsh commands. We'll start with clouds.

A PNRP cloud is a group of connected PNRP nodes. By connected, I mean that paths exist between peers such that any node in the cloud can resolve a name published by any other node.

When you start the PNRP service, it joins multiple clouds. Actually, PNRP bootstraps are lazy and will wait for an application to register or resolve a name before spending any bandwidth.

You can list the clouds your machine is participating in with the netsh p2p pnrp cloud show list command. Here’s an example from my computer:

Scope Id Addr State Name

----- ----- ----- ---------------- -----

    3 8 1 Active LinkLocal_2001:4898:28:2::/64

    1 0 2 Active Global_

 

 

PNRP clouds can be classified by the ipv6 scope that they operate on. Your machine will join clouds in the global, link local and site local scopes. The site local scope has been deprecated, so it’s unlikely you’ll encounter it. We won’t talk about it further.

In the listing above, the scope heading refers to the ipv6 scope of the cloud. Global (1), Site Local (2) or Link Local (3) are all valid possibilities.

 

PNRP will join a link local cloud for every link local address on your machine. Here’s the output of netsh p2p pnrp cloud show list on a machine with two network cards:

netsh p2p pnrp cloud>show list

 

Scope Id Addr State Name

----- ----- ----- ------- -----

    3 8 1 Active LinkLocal_{1FFC205C-6D0D-43A0-B471-59E9FE0CFF}

    3 12 1 Active LinkLocal_2001:4898:28:2::/64

    1 0 4 Active Global_

 

Note the naming scheme. PNRP names the link local cloud using the prefix of the Global address assigned to the interface. If you have two interfaces, and they share a Global prefix, PNRP will name the second link local cloud with a GUID.

 

The Global Scope

PNRP will join the Global_ cloud if you have a global ipv6 address. If you don’t have a global IPv6 address, the Global_ cloud won’t appear. Here’s the output of netsh p2p pnrp cloud show list on a machine without global connectivity

netsh p2p pnrp cloud>show list

Scope Id Addr State Name

----- ----- ----- ---------------- -----

    3 8 1 Active LinkLocal_ff00::%8/8

 

A PNRP node can only join one global cloud at a time. If you’re interested in running a private PNRP cloud, you can set up your own seed node and configure your clients to bootstrap from it. If you do this, your clients won’t be able to resolve names in the global cloud hosted by Microsoft. Be careful!

 

Cloud States

Active

The node is connected and has neighbors. You can publish and resolve names. Excepting a few very strange situations, an active cloud is a healthy cloud.

Alone

You don’t have any neighbors, so your publications won’t be reachable and you won’t be able to resolve peers in this cloud. It can be perfectly normal for your link local clouds to be alone. There might not be any other PNRP nodes on your link.

Underlying network problems can prevent your clouds from going active. If you’re alone in a cloud, but don’t think you should be, the cloud probably failed to bootstrap correctly. If your Global_ cloud is in the alone state, you’re likely not able to communicate with the seed server. Your firewall might be misconfigured or your packets might be filtered upstream.

If you’re alone in a link local cloud you might have difficulty communicating with computers nearby. PNRP uses the simple service discovery protocol (SSDP) to find neighboring on-link nodes. If SSDP is disabled on your system, or blocked by the firewall, your link local clouds will not bootstrap correctly.

Virtual

We mentioned earlier that PNRP cloud bootstrapping is a lazy operation. A PNRP cloud that has been created, but not used, will be in the virtual state.

As a further optimization, PNRP suspends itself after fifteen minutes of inactivity. If you don’t have a name published and you aren’t resolving any names you can expect to find your clouds in the virtual state.

No Net

If you pull the wire or wander out of your hotspot, your clouds will switch to the no net state.

Synchronizing

Your cloud is in the process of bootstrapping. The bootstrap operation is pretty quick for both link local and global clouds. You have to be sneaky to catch your cloud synchronizing.

Questions about PNRP clouds? Ask us!

Thanks!

Tyler

tylbart at microsoft.com