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

Comments

  • Anonymous
    June 21, 2007
    Hello Tyler. Please let me ask about Cloud. Global_ cannot be Active but Alone like below, and also it seems not to reach teredo server. Could you please let me know what is the problem. Scope  Id     Addr   State             Name -----  -----  -----  ----------------  -----    1      0      1  Alone             Global_    3      5      1  Alone             LinkLocal_{68A674B3-57BF-4228-A32A-B68A01 4B241D} Here is the state of teredo, showing error 2nd Server is not reachable. netsh interface ipv6>show teredo Teredo parameters

種類(kind)             : enterpriseclient サーバー名(servername): teredo.ipv6.microsoft.com クライアント更新間隔(interval)    : default クライアント ポート(port)     : default 状態(state)            : offline エラー(error)          : セカンダリ サーバーのアドレスに到達できません(it's meaning it cannot reach at secondary server address)

  • Anonymous
    August 07, 2007
    The comment has been removed

  • Anonymous
    June 19, 2008
    Subscribe to EVERYTHING <-- What you REALLY WANT TO DO! Subscribe to WMV Video only . Subscribe to

  • Anonymous
    June 19, 2008
    Subscribe to EVERYTHING <-- What you REALLY WANT TO DO! Subscribe to WMV Video only . Subscribe to

  • Anonymous
    June 19, 2008
    The comment has been removed

  • Anonymous
    June 19, 2008
    The comment has been removed

  • Anonymous
    June 20, 2008
    Subscribe to EVERYTHING <-- What you REALLY WANT TO DO! Original Url: http://aspnetpodcast.com/CS11

  • Anonymous
    April 20, 2009
    Hi, Is there a connection between cloud guid and interface name? I would like to show the list of interfaces on which user can create PeerGroup. Do you know how to start group on more than one interface. Thanks, Lukasz

  • Anonymous
    January 20, 2011
    Hi, I'm not sure if anyone is still reading this, but I have run into situations where Global_ state says it is "No net" even though I'm able to connect to this computer via Internet (a PC located in one city from another).  I've searched the web and only thing I can find is the the network cable is unplugged for this state, but it is clearly not the case here.  Any insight?