Guhan S
Guhan S

Reputation: 19

On successful TCP connection between server and client

RELATED POST

The post here In UNIX forum describes

QUESTION

I have a server application S which is constantly listening on port 18333 (this is actually bitcoind testnet). When another client node C connects with it on say 53446 (random port). According to the above post, S will be able to send/receive data of 'C' only from port 53446.

But when I run a bitcoind testnet. This perfectly communicates with other node with only one socket connection in port 18333 without need for another for sending/receiving. Below is snippet and I even verified this

bitcoin-cli -testnet -rpcport=16591 -datadir=/home/user/mytest/1/ 

  {
    "id": 1,
    "addr": "178.32.61.149:18333"
  }

Can anyone help me understand what is the right working in TCP socket connection?

Upvotes: 0

Views: 1201

Answers (2)

Danny_ds
Danny_ds

Reputation: 11406

The server will accept a clients connect() request using accept(). As soon as the server accepts the client request, the kernel allocates a random port number for the server for further send() and receive().

On normal TCP traffic this is not the case. If a webserver is listening on port 80, all packets sent back to the client wil be over server port 80 (this can be verified with WireShark for example) - but there will be a different socket for each connection (srcIP:port - dstIP:port). That information is sent in the headers of the network packets - IP and protocol code (TCP, UDP or other) in the IP header, port numbers as part of the TCP or UDP header).

But changing ports can happen when communicating over ftp, where there can be a control port (ususally 21) and a negotiated data port.

Upvotes: 0

Philip Stuyck
Philip Stuyck

Reputation: 7467

A TCP connection is identified by a socket pair and this is uniquely identified by 4 parameters :

  • source ip
  • source port
  • dest ip
  • dest port

For every connection that is established to a server the socket is basically cloned and the same port is being used. So for every connection you have a socket using the same server port. So you have n+1 socket using the same port when there are n connections.

The TCP kernel is able to make distinction between all these sockets and connections because the socket is either in the listening state, or it belongs to the socket pair where all 4 parameters are considered.

Your second bullet is therefore wrong because the same port is being used as i explained above.

Upvotes: 2

Related Questions