jbn@wdl1.UUCP (11/07/85)
How to Build an Echo Host, and Why One useful device for the network software implementor working without access to a big network is an echo host. An echo host (in the IP world) receives datagrams, interchanges the source and destination IP addresses, recomputes the IP checksum, and sends them out again. This is a useful device to have around. It's a mirror. If you try to make a connection to it, you end up with a connection to yourself. You can exercise protocols with only one copy of your development system yet actually generate traffic over the network hardware. Especially useful are echo hosts that introduce errors and delays. With these, one can find out if your transport protocol really works. There are several echo hosts on the ARPANET; they all have names with "ECHO" in them. You can TELNET or FTP to them, but you end up connected back to yourself. Some of them are far away, and allow testing over satellite links. Some fragment IP datagrams. Some have limited bandwidth. These are good for exercising an implementation. It is left as an exercise to the reader to implement echo host software for the IBM PC, starting from the MIT package. Such a device would be excellent for testing out TCP implementations to make sure that the hard cases really work, especially if error insertion (change one bit in every Nth packet), delay (hold all packets N seconds before returning), and congestion (if more than N packets are in the delay queue, send back a Source Quench and/or drop one) are provided. John Nagle
chris@umcp-cs.UUCP (Chris Torek) (11/09/85)
It is surprisingly easy to build an Echo Host for 4.2 or 4.3 BSD. Try connecting to umd-echo: it is a poor underpowered 750 doing the IP packet turnaround in user code. Jim O'Toole wrote the `IP Magic Address' hacks we are using to implement this. Basically, it allows a raw socket to turn on a new IP address. The Ethernet ARP code is modified to respond to requests for the magic address; the inet input code is modified to accept packets destined for the magic address and hand them to the raw socket code; and the raw code knows to hand these only to the magic socket. (In case it is not in your host tables, umd-echo is 128.8.128.30.) -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 4251) UUCP: seismo!umcp-cs!chris CSNet: chris@umcp-cs ARPA: chris@mimsy.umd.edu