View Single Post
  #4 (permalink)  
Old November 21st, 2001
Moak's Avatar
Moak Moak is offline
Join Date: September 7th, 2001
Location: Europe
Posts: 816
Moak is flying high
Post ping/pong

Okay, I wanna give a more detailed overview on what is ping/pong for.

A ping on "traditional" TCP/IP is a tool for testing the network topology and functionality (Actually it uses ICMP protocoll. You send a small package of data and wait until a reply comes back. If nothing comes back, oops, you found a problem which may point to wrong configuration or physical problems. If something comes back you have a proof that route between you and another host is up. Ping is a perfect tool for fault isolation, it usually is run on the local host or LAN gateway to verify that the local network interface and routing is up and running. But it can also used to test the network between you and a foreign peer. Together with sending multiple pings you receive a short overview on round trips or detect droped packets or duplicated packets.)

A ping on Gnutella is different to what we know from above. Gnutella's ping and pong descriptors serve two functions:

1) Provide a measure of the horizon size, to get knowledge of the current number of hosts and files available.
2) Return IP addresses of other servents so you can establish more connections.

Notes to 1: Ping/pong messages caused a high amount of Gnutella's backbone traffic in past (ca 50%). It is highly recommended IMHO _not_ to use this feature in a future gnutella client. The Gnutella newtork should be scalable and not waste bandwith by a high percentage of broadcasts. AFAIK it is still a topic to find new ways to approximate the horizon in normal clients (ideas?). But I guess it still makes sense to use pings/pongs for special gnutella tools which map the network or for statistic purpose. If you code a kind of statistic tool, don't expect "deeper scans" with a high TTL, most clients lower a high TTL to something healthy (TTL<=7) while they route it.

Notes to 2: It is not a optimal way to harvest IPs by using pings. Because you will generate a high broadcast, get IPs which are allready located in your local horizon (results in smaller horizon fou you in general, less available files, higher possibility to stuck in a seperated network, more duplicated traffic) and finally you get a high amount of IPs which do not allow incoming connections. A much better idea to get IPs of other gnutella clients -> use a gnutella host cache [3].

Additional Links:
[1] New ping/pong ideas
[2] Gnutella Protocoll
[3] Host caches

Hope it helps, Moak

PS: Please correct me if my english is bad

Last edited by Moak; January 29th, 2002 at 09:11 PM.
Reply With Quote