The application for this assignment is somewhat arti?cial. Normally, an application would not interact directly with IP. Instead, it would create a UDP or TCP socket and interact with the transport layer and then the transport layer would interact with the IP layer. However, in this assignment we are ignoring the transport layer - it doesn't exist in our simulation even though you're ?lling in the protocol ?eld of the IP header with the number for UDP.
Write a single application program that runs at all 4 hosts. Design it so that at any given moment it is either in "transmit mode" or "receive mode," but not both simultaneously.
When in transmit mode, the application should gather the following information from the user then pass it down to the IP layer:
- Destination IP address
- "Don't fragment" bit
- TTL (time to live)
- Whether "record route" option should be enabled
- A string
The string will be used as IP data.
An application in receive mode will await data coming up from IP. When IP receives a datagram, it pass up the following information, which the receiving application will display:
Source IP address
- If "record route" option was enabled, the route the datagram traveled
- The string in the IP data ?eld
It is possible that an application in transmit mode will receive an ICMP error message in response. To handle this case, have a transmit-mode application brie?y listen for input from IP before re-prompting the user. That is, the application in transmit mode should behave like this:
Await user input forever
- Get user input and send to IP
- Await input from IP (i.e., ICMP error message) for ?xed length of time
- Either display ICMP message or timeout
- Await user input forever, etc.
When an ICMP message is received, display its type, code, and "original IP datagram" ?elds.