old-www/LDP/LG/issue97/wilson.html

242 lines
11 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><base href="http://www.linuxgazette.com/" />
<title>
Linux, At Your Service - Linux Gazette </title>
</head>
<body>
<!-- node: "Linux, At Your Service" -->
<table cellpadding="0" cellspacing="0" style="border 0px; width: 100%;">
<tr><td colspan="2"><img src="themes/lg/images/drop.gif" alt="" title="" /> &nbsp; <b>Linux, At Your Service</b></td></tr>
<tr style="vertical-align: bottom;"><td colspan="2" style="background-color: #000000; width: 100%;"><img src="themes/lg/images/pixel.gif" width="1" height="1" alt="" title="" /></td></tr>
<tr><td><div style="color: #7c7c7c;"><small>Submitted by <a href="http://www.linuxgazette.com/user/view/550" title="View user profile.">BobW</a> on Friday, November 21, 2003 - 03:20</small></div></td><td style="text-align: right; vertical-align: top;"></td></tr>
<tr><td colspan="2">&nbsp;</td></tr>
<tr><td colspan="2"><p>For the first few years of working with Linux I heard people talk about
ports, protocols and services and I just hoped I could ignore them and
keep getting my work done. Usually, this was the case but I eventually
decided to bite the bullet and see what all this was about. This
article won't tell you everything there is to know but it should help
you put together the pieces.
<p>
One of the most helpful crib sheets in learning about all this stuff is
a file on your system.
In virtually all systems it is named <code>/etc/services</code>. It is
just an plain ASCII file which provides a mapping between textual names
for services and their assigned port numbers and protocol types. You
may have noticed that all three buzzwords appeared in that one
sentence. They appear in that file as well. I include a few lines from
that file to give you an idea what I am talking about. I have included
the comments from the top of the file so we can talk about them as
well.
<pre>
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
#
# This list could be found on:
# http://www.iana.org/assignments/port-numbers
#
# (last updated 2002 January 15)
#
# The port numbers are divided into three ranges: the Well Known Ports,
# the Registered Ports, and the Dynamic and/or Private Ports.
#
# The Well Known Ports are those from 0 through 1023.
#
# The Registered Ports are those from 1024 through 49151
#
# The Dynamic and/or Private Ports are those from 49152 through 65535
#
#### UNASSIGNED PORT NUMBERS SHOULD NOT BE USED. THE IANA WILL ASSIGN
# THE NUMBER FOR THE PORT AFTER YOUR APPLICATION HAS BEEN APPROVED ###
#
#
# WELL KNOWN PORT NUMBERS
#
# The Well Known Ports are assigned by the IANA and on most systems can
# only be used by system (or root) processes or by programs executed by
# privileged users.
#
# Ports are used in the TCP [RFC793] to name the ends of logical
# connections which carry long term conversations. For the purpose of
# providing services to unknown callers, a service contact port is
# defined. This list specifies the port used by the server process as
# its contact port. The contact port is sometimes called the
# "well-known port".
#
# To the extent possible, these same port assignments are used with the
# UDP [RFC768].
#
# The range for assigned ports managed by the IANA is 0-1023.
#
# Port Assignments:
#
# 0/tcp Reserved
# 0/udp Reserved
tcpmux 1/tcp # TCP Port Service Multiplexer
tcpmux 1/udp # TCP Port Service Multiplexer
...
ftp-data 20/tcp # File Transfer [Default Data]
ftp-data 20/udp # File Transfer [Default Data]
ftp 21/tcp # File Transfer [Control]
fsp 21/udp # official is File Transfer, ftp use no udp
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp # SSH Remote Login Protocol
telnet 23/tcp # Telnet
telnet 23/udp # Telnet
</pre>
<p>
There is a whole lot to talk about already. If you look at the last few
lines you will see lines that start with ftp, ssh and telnet. If you
have never heard of any of those names you probably need to read a
different article. However, if you do know what they are, a light may
have just come on for you.
<p>
What these lines tell you is that ftp uses ports 20 and 21, ssh uses
port 22 and telnet uses port 23. If you use command line versions of
these programs you might have noticed you could specify a port number.
If you are curious, type <code>ftp --help</code> or <code>telnet
--help</code> and see what you get. With ftp, you use the -P option to
specify a port. With telnet, the port number just follows the hostname.
With either command, the port number is optional. What that means is
that if you don't specify it then the program uses the default port.
<p>
Looking back at the file you can see that each port number is followed
by a slash and "tcp" or "udp". These are two standard Internet
protocols. UDP is connectionless. What this means is that one computer
can sent a message to another computer without asking permission first.
The problem is that the sender will not know if the other system ever
received the message. The buzzword here is <i>unreliable</i>.
<p>
The TCP protocol is <i>reliable</i> which just means that the sender
and receiver talk to each other to make sure everything worked. Each
protocol has a purpose. For example, when the systems want to establish
a connection, sending a UDP message to that effect makes sense. It is
just faster and easier.
<p>
So far, we have been talking about services that run on well known port
numbers. Here are a few more that will likely be familiar to you.
<pre>
smtp 25/tcp mail # Simple Mail Transfer
smtp 25/udp mail # Simple Mail Transfer
http 80/tcp # World Wide Web HTTP
http 80/udp # World Wide Web HTTP
pop2 109/tcp # Post Office Protocol - Version 2
pop2 109/udp # Post Office Protocol - Version 2
pop3 110/tcp # Post Office Protocol - Version 3
pop3 110/udp # Post Office Protocol - Version 3
nntp 119/tcp # Network News Transfer Protocol
nntp 119/udp # Network News Transfer Protocol
imap 143/tcp imap2 # Internet Message Access Protocol
imap 143/udp imap2 # Internet Message Access Protocol
imap3 220/tcp # Interactive Mail Access Protocol v3
imap3 220/udp # Interactive Mail Access Protocol v3
imaps 993/tcp # imap4 protocol over TLS/SSL
imaps 993/udp # imap4 protocol over TLS/SSL
</pre>
<p>
You will certainly know about port 80. In addition, you can see that
the various mail protocols have an assortment of ports. imaps is a
secure connection for fetching your mail from a mail server. I should
mention that you now can see two uses of the word protocol. First, in
TCP or UDP and second in the protocol of the actual content. For
example, SMTP stands for Simple Mail Transfer Protocol. Don't get
confused--TCP and UDP have to do with the protocol for getting the
message to the other end. The second use of the word protocol has to do
with the specifics of the message content.
<p>
SMTP is the most common way a computer sends email to another computer.
Your computer might send the message directly or it might send it thru
what is called a smart host. In any case, the mail message is
transfered by some computer connecting to the recipient computer using
port 25 and then communicating using the SMTP protocol. This is a
simple protocol and you can use your local telnet command to explore
how it works. Just for kicks, try a command like this<br>
<code> telnet My_Favorite_Host.com 25</code><br>
but replace My_Favorite_Host.com with a computer that is listening on
port 25. I tried mail.osdn.com.
<p>
You should see a message about the connection succeeding and then you
are likely to not even get a prompt. If you are connected, try typing
<code>help</code> and pressing the Enter key. Generally you will get a
terse message of the commands that are supported. Here is what I got.
<pre>
sid@firefly:/tmp> telnet mail.osdn.com 25
Trying 66.35.250.105...
Connected to mail.osdn.com.
Escape character is '^]'.
220 sc8-osdn-mail.osdn.com ESMTP Exim 3.35 #1 Sun, 16 Nov 2003 11:44:51-0800
help
214-Commands supported:
214- HELO EHLO MAIL RCPT DATA AUTH
214 NOOP QUIT RSET HELP
quit
221 sc8-osdn-mail.osdn.com closing connection
Connection closed by foreign host.
sid@firefly:/tmp>
</pre>
<p>
Is this starting to make some sense? Ok, let me give you a new
buzzword. When I performed the telnet connection, the remote computer
was <i>listening</i> on port 25. This is actually just what it sounds
like. There was a programming running that was just waiting for someone
to try to connect to port 25. When telnet sent the request, that
program established the connection. Some programs that are listening
can only connect to one computer at a time, others can handle multiple
connections.
<p>
Finally, I want to explain about the registered ports, which are the
ports whose numbers are above 1024. In order for a program to listen on
the ports that we have already covered, it has to be started as root.
This didn't mean the program continued to run as root. This is actually
pretty common. The apache web server, for example, is generally started
as root, it does any necessary setup such as binding to port 80 and
then changes it user ID to something less powerful--generally nobody or
some other ordinary user.
<p>
On these higher numbered ports, any program can bind to them. Below I
have included a few of the more common ones.
<pre>
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
x11 6000/tcp # X Window System
x11 6000/udp # X Window System
...
x11 6019/tcp # X Window System
x11 6019/udp # X Window System
x11 6063/tcp # X Window System
x11 6063/udp # X Window System
gnutella-svc 6346/tcp # gnutella-svc
gnutella-svc 6346/udp # gnutella-svc
gnutella-rtr 6347/tcp # gnutella-rtr
gnutella-rtr 6347/udp # gnutella-rtr
http-alt 8008/tcp # HTTP Alternate
http-alt 8008/udp # HTTP Alternate
http-alt 8080/tcp # HTTP Alternate (see port 80)
http-alt 8080/udp # HTTP Alternate (see port 80)
</pre>
<p>
The first one, mysql, should help explain why it doesn't seem to matter
if MySQL is running on your local computer or another system.
Communication with it is thru a port so the only thing that changes is
the hostname in the connection message.
<p>
Ports 8008 and 8080 are of interest if you are testing out a new web
server or want to run more than one web server on the same computer.
Because you don't have to be root to bind to ports 8008 or 8080 you can
test a web server or even run one on a machine where you don't have
root access.
<p>
I hope this introduction to ports, protocols and services has been
helpful to you. I welcome your comments.</p></td></tr>
</table>
</body>
</html>