So far, you have only seen how packets move from host to host on the Internet. That's clear enough, but it says nothing about how your computer presents the packet data it receives to its running processes. You want more than one application to be able to talk to the network at the same time (for example, you might have email and several Web clients running), and you also want to receive the data in some form that's easier to handle than packets.
Transport layer protocols and services perform these tasks. The two most popular transport protocols are the Transmission Control Protocol (TCP) and the User Datagram Protocol (UDP). Both define ports on network nodes. When a program on your machine wants to talk to a service on a remote machine, it opens a port on the local machine and requests a connection to a port on the remote machine (a connection is defined by the two hosts, the ports on each side, and a special packet sequence). After the transport layer services on both sides establish the connection, the hosts can exchange data.
Transport layer services have complex implementations because they must convert a series of packets (not necessarily arriving in the correct order) into a data stream for programs. Luckily, you need to know next to nothing about this mess.
In TCP and UDP, a port is a number. If a program accepts connections on a port, it is said to listen on that port. There are well-known ports for various services; for example, email servers listen on TCP port 25, and most Web servers listen on TCP port 80. Only the superuser may use ports 1 through 1023. All users may listen on and create connections from ports 1024 on up.
On a Unix system, the /etc/services file maps service names to port numbers and transport layer protocols. This plain-text file consists of lines like these:
ssh 22/tcp # SSH Remote Login Protocol smtp 25/tcp domain 53/udp
The first column holds the service names. The second column in the /etc/services file defines the port number and a transport layer protocol. Take a look at /etc/services on your machine. Notice that the services file does not define the programs that listen on ports on your computer.
You will learn more about how programs listen and connect to the application layer in the next chapter. The rest of this chapter is devoted to three advanced networking topics: firewalls, NAT (IP masquerading), and wireless networking.