The Internet provides a way to get packets (convenient units of data for computers and routers) from any host computer to one or more other host computers. However, the network protocols make no guarantees about delivering a packet. In fact, a packet may get lost, may arrive after others sent later or may be distorted. A packet might even arrive that simply wasn't sent!
To counter this, host computers incorporate transport protocols, which use the Internet to carry the application information around, but also send a variety of other information to provide checking and correction or recovery from such errors.
There is a spectrum of complexity in transport protocols, depending on the application requirements. The three representative ones are:
UDP is a ``send and forget'' protocol. It provides just enough control information at the start of each packet to tell what application is running, and to check if the packet got distorted on route. UDP is used by applications that have no requirement for an answer, typically, and don't really care if the other end received the message. A typical example of this might be a server that announces the time on the network, unsolicited.
RDP is a generic name for a collection of protocols - the most relevant here is the one used by Prospero (see later). RDP type protocols are similar to TCP, but with reduced complexity at the start and end of a conversation, and with good support for sequences of exchanges of chunks of data, often known as Remote Procedure Calls, or sometimes incorrectly called transactions.
TCP is the protocol module that provides reliability and safety. TCP is designed to cope with the whole gamut of network failures, and adapts elegantly to the available resources in the network. It even tries to be fair to all users.