Archive for the 'Networking' Category

How to Use BGP++ for Simulations

Below is an old, partially complete tutorial I had up on my old site. If I ever get around to it, I’ll update this with the rest of the tutorial.

Installing BGP++

The first step in doing some network simulations is to actually build and install the simulator. I chose to use a very common one called ns2. In order to do simulations of BGP, you’ll need a patch called BGP++. BGP++ is basically a port of a program called Zebra, and is placed inside the ns2 code so that it can do BGP simulations. With that out of the way, you’ll want to start downloading the source code. You can get the BGP++ code from here, and the ns2 code from here. You should be careful to make sure that the version of the patch is intended for the version of ns2 that you download.

However, instead of downloading the code from the sites, which is very old by now, you may want to consider downloading my set of the code. I have already gone through and made several changes to fix various compiling errors. Inside of the tarball, you’ll find errorCorrections.txt that explains some of the fixes. You’ll need to make sure that you have gcc-3.3 and gcc-4.1 installed, as both were needed during the compiling. You will only need to execute the “install” script with `./install`, but there is a good chance you’ll come across some errors, which you’ll have to figure out what to fix. With any luck, this will only be with dependency issues because I have already gone through most of the current problems. Note that my set of the code has been run as of April 9, 2008, so the longer it has been since then, the better the chances of issues developing. Feel free to send me an email if you have questions, and I can try to help you out some.

A Measurement-Based Study of the Optimal Value of DNS Timeouts

A Measurement-Based Study of the Optimal Value of DNS Timeouts

While in college at Ursinus, I did a research paper over a summer and a semester on DNS.  Below are links to my paper, the tools I used, and my abstract.

Abstract Paper Tools (tar.gz) Tools (zip)

The Domain Name System (DNS) is an Internet service that allows domain names, such as, to be used in place of IP addresses, such as DNS is consulted every time a host attempts to use a domain name for email, instant messaging, and many other Internet applications. Despite having been developed over 20 years ago, DNS is extremely robust. However, it is still possible for errors to occur. Since DNS queries and responses are sent via UDP, DNS implements its own reliability mechanism. When a system does not respond to a query, another request is sent after a timeout under the assumption that an error occurred. Our research explored the plausibility of reducing the default timeout for DNS queries.

To examine this timeout we used several methods and scripts to compile a large list of remote nameservers. We then measured the round-trip times from a local DNS server to a sample of the remote nameservers. We found that the vast majority of round-trip times were less than 1 second. We noted that current implementations of nameservers use a default timeout starting at 5 seconds. We therefore propose that the default timeout can be significantly reduced, noticeably enhancing user-perceived performance while limiting the overall negative impact on the network.