Return to BSD News archive
From: mfuhr@dimensional.com (Michael Fuhr)
Newsgroups: comp.unix.bsd.freebsd.misc
Subject: Re: Listening at a socket
Date: 19 Jun 1997 14:36:56 -0600
Organization: Dimensional Communications
Lines: 75
Message-ID: <5oc598$3qn@flatland.dimensional.com>
References: <5oblqi$4re@ui-gate.utell.co.uk>
NNTP-Posting-Host: flatland.dimensional.com
X-Newsreader: NN version 6.5.1 (NOV)
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!ns.saard.net!spasun.tpa.com.au!duster.adelaide.on.net!news.ade.connect.com.au!news.mel.connect.com.au!munnari.OZ.AU!spool.mu.edu!sol.net!spool.mu.edu!newsspool.sol.net!howland.erols.net!newsfeed.internetmci.com!dimensional.com!flatland.dimensional.com!not-for-mail
Xref: euryale.cc.adfa.oz.au comp.unix.bsd.freebsd.misc:43169
brian@shift.utell.net (Brian Somers) writes:
> This *has* to be a dumb question, but can anyone tell me
> how an OS, once it's received a packet for a given port
> X, can distinguish which process of all the processes that
> are using that port should get that packet.
This is a bit simplistic, but here goes (I'll use TCP for this example):
1. Daemon starts on server and listens on some port, say 21 (FTP).
2. Client starts on some host and says "I want to connect to
server port 21". The client gets a socket bound to some
arbitrary port on its own host (say 5678), then connects that
socket to server port 21. The connection is now uniquely
identified as this:
client:5678 <====> server:21
3. Another client on the same host also wishes to connect to
the server. It gets a socket bound to another arbitrary port,
say 6789. Its connection is uniquely identified as this:
client:6789 <====> server:21
4. An OS uses the remote address, remote port, local address, and
local port to decide which process gets a particular TCP segment.
> For example, if I run an ftp server, I have my ftpd
> listening on *.21. If I currently have 2 established
> connections from the same remote machine, I'll have two
> additional ftpd processes running (forked from the first).
> When a packet is received from the other machine destined
> for port 21, how does the OS decide which process to deliver
> the packet to ?
Your example would look something like this:
ftpd parent
listening on server:21
ftpd child #1 client software
server:21 <=====> client:5678
ftpd child #2 client software
server:21 <=====> client:6789
If the OS receives a new connection, it'll hand it to the daemon that's
listening for connections, which then forks a child to handle the
request. Each child's connection can be uniquely identified by the
local address, local port, remote address, and remote port of the
packet in question.
To understand all this better, check out a good book on TCP/IP. A
couple I recommend are:
TCP/IP Illustrated, Vol I
W. Richard Stevens
Addison-Wesley
ISBN 0-201-63346-9
TCP/IP Network Administration
Craig Hunt
O'Reilly & Associates
ISBN 0-937175-82-X
There's also a TCP/IP resource list at:
http://www.qnx.com/~mphunter/tcpip_resources.html
Hope this helps.
--
Michael Fuhr
http://www.dimensional.com/~mfuhr/