242 lines
11 KiB
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="" /> <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"> </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>
|
|
|