В описании TCP в Википедии указано, что
Количество сеансов на стороне сервера ограничено только памятью и может увеличиваться по мере поступления новых соединений, но клиент должен выделить случайный порт перед отправкой первого SYN на сервер.
Первая часть кажется логичной: сервер просто использует порт, к которому подключены клиенты, в качестве порта источника, и поэтому он ограничен только (числом клиентских IP-адресов) * (числом временных портов клиента) - большим числом.
Но почему клиенты не могут делать то же самое? Если сокет А подключается к серверу 1 с помощью временного порта 12345 (например, клиент:12345 -> сервер 1:80), почему сокет В не может подключиться к серверу 2 путем повторного использования того же порта источника (клиент:12345 -> сервер 2:80)? Это позволило бы более (количество портов) исходящих TCP-соединений с одного хоста.
Есть ли что-то в спецификации TCP, которая запрещает такое повторное использование порта, или это ограничение является лишь практическим результатом распространенных реализаций TCP? Если да, действительно ли первый случай обрабатывается иначе, чем второй, или число входящих TCP-соединений на один порт сервера практически также ограничено 65535?
Чтобы уточнить, я ищу теоретические (в соответствии со спецификациями) и практические (реализации; особенно Linux) ограничения для:
- Исходящие соединения с одного клиента на ЛЮБОЙ сервер / порт.
(client:* -> *:*)
- Соединения от одного клиента к тому же самому серверу и порту
(client:* -> server:port)
- это, очевидно, не может быть больше чем 65535. - Входящие подключения к одному порту сервера от ЛЮБОГО клиента
(*:* -> server:port)
- я подозреваю, что это больше чем 65535 в соответствии с цитируемым параграфом и причинами, указанными выше.