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.


 



The Link Local Scope


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 (9)

  1. ksugie says:

    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)

  2. mishasoft says:

    Hey.

    I have two machines running WinXP connected through hub.

    On the PC#1 I have both IPv4 and IPv6 interfaces installed. Additionally there is FTP server installed on this mashine listening on 6to4 Tunneling Pseudo-Interface (Prefered Global IPv6: 2002:f00:b::f00:b)

    On the PC#2 I have IPv6 only installed. Additionally there is FTP client installed on this machine.

    I’m trying to connect from PC#2 to PC#1 through 6to4 incapsulation but it fails.

    When I’m trying "ping6 2002:f00:b::f00:b" from PC#2, I get "Invalid scope-id specified".

    What is wrong?

    Thanks in advance,

    Michael.

  3. Subscribe to EVERYTHING <– What you REALLY WANT TO DO! Subscribe to WMV Video only . Subscribe to

  4. Subscribe to EVERYTHING <– What you REALLY WANT TO DO! Subscribe to WMV Video only . Subscribe to

  5. Glavs Blog says:

    So I *finally* managed to get a videocast/podcast done. Wally has been harassing me for ages, and I eventually

  6. So I *finally* managed to get a videocast/podcast done. Wally has been harassing me for ages, and I eventually

  7. Subscribe to EVERYTHING <– What you REALLY WANT TO DO! Original Url: http://aspnetpodcast.com/CS11

  8. sosimple says:

    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

  9. Global_ state is set to "No net" even though I'm connected. says:

    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?