Удаляются ли соединения TCP в другой порт после их открытия?

Если сервер сокета TCP прослушивает порт 28081 для входящих подключений, а затем принимает соединение и начинает получать данные. Является ли порт данными, поступающими во все еще 28081 или порт изменится.

например, какой порт вводит входящие данные в псевдо-код ниже? Все еще 28081 или ОС назначает новый порт?:

bind
listen (on port 28081)

while 1
  fd = accept
  fork
  if child process incoming data 

Ответ 1

TCP-соединение однозначно идентифицируется двумя кортежами (IP address, TCP port) (по одному для каждой конечной точки). Поэтому по определению нельзя перемещать порт или IP-адрес соединения, а просто открывать другой.

Если сервер связывается с портом 28081, все принятые соединения будут иметь этот порт на стороне сервера (хотя они, скорее всего, будут иметь разные номера портов на стороне клиента).

Например, если два процесса с одного и того же клиентского компьютера будут подключаться к одному и тому же серверу, то теги IP address и TCP port на стороне сервера будут одинаковыми для обоих соединений. Однако на стороне клиента они будут иметь два разных номера порта, позволяя операционной системе с обеих сторон однозначно идентифицировать, какой процесс и файловый дескриптор должны быть назначены принятым TCP-пакетам.

Ответ 2

Да, он остается на этом порту, хотя некоторые протоколы (FTP) могут открыть второе соединение на другом порту. Не думайте о порте как о физическом пути или подключаемом модуле, например, о USB-порту, в который может входить только одна штука. Но подумайте об этом как о идентификаторе запрашиваемой услуги.

Часто, однако, новое соединение сокета передается другому потоку, который обрабатывает чтение/запись для этого конкретного соединения.

Ответ 3

К одному порту может подключаться более одного клиента, так как соединение идентифицируется как IP-адресом сервера, так и сервером. Таким образом, прием соединения с одного клиента не блокирует других от соединения. Вы даже можете подключить другое время от одного и того же клиента (используя другой клиентский порт).