How does that tcp traffic work

David Tonhofer d.tonhofer at m-plify.com
Fri Aug 4 17:59:31 UTC 2006


Bliss, Aaron wrote:
> I know this is a bit of a networking question more than a redhat
> question, however I'm sure you guys will be able to explain this to me;
> I'm trying to understand exactly how this works, and have not been able
> to find any solid authority on the subject; I understand the concept of
> ports, well know ports, and part of the initial 3 way handshake of a new
> tcp session; My question is, does the initial receiving host of a
> session (usually a server) use the port that it's listening for the tcp
> session, or does it negotiate a port number that is not in use like the
> client does?  For example, host A is a client, host B is a webserver
> listening on port 80; host A wants some data from host B's port 80; lets
> say host A wants to use port 6785; will the tcp session then use port
> 6785 for host A and port 80 for host B, or will they also pick an
> available port from host B as well; if port 80 is used, how are multiple
> sessions possible; i.e. how can the host B serve up more web traffic if
> port 80 is busy?  Thanks for your help.
>
> Aaron
>   
Here is what happens:

1) TCP Server listens on port X at address IP1
2) TCP Client connects ("handshake")
   to port X at address IP1
   from port Z at address IP2
3) TCP Server code will spawn a thread or process to handle this 
connection. The
  abstraction used to represent the connection is the 'socket', which is 
a source and sink
  of bytes, but basically it's a I/O buffer.

The TCP session identifier is: (IP1,Z,IP2,X), all TCP packets carry that 
information.
The OS at IP1 will correctly route the packet to its destination I/O 
buffer (to be picked up
by the handling thread) based on that identifier. Thus the packets can 
STILL go to the
same port X on the Server.

Note that for FTP, there is first a connection from the client to server 
port 21, then
a negotiation over the TCP connection whereupon the server opens another 
server
port (high-numbered) on the the server machine and the client 
additionally connects to
that to transfer data. But this means *two* TCP connections.


Best regards,

-- David

"four fifty -- press return"




More information about the redhat-list mailing list