Может ли одновременно быть активным более одного TCP-соединения между двумя портами на двух разных хостах? Ответьте, пожалуйста.
Если вы спрашиваете, можно ли открыть сокет из двух клиентских систем на сервер, на котором одни и те же порты источника и расширения совпадают, тогда да, это возможно.
# connections as seen by server
src_ip sce_port dest_ip dest_port
192.168.1.5 1234 192.168.1.1 1234
192.168.1.4 1234 192.168.1.1 1234
Сокеты идентифицируются (адрес источника + порт источника + адрес назначения + порт назначения). Два адреса назначения будут разными, и поэтому все будет работать нормально.
Это вряд ли будет происходить очень часто в реальном мире, поскольку исходный порт обычно выбирается из диапазона портов, доступных для использования в исходящих соединениях.
# connections as seen by server you would most likely see in the real world
src_ip sce_port dest_ip dest_port
192.168.1.5 49345 192.168.1.1 1234
192.168.1.4 51284 192.168.1.1 1234
Если вы спрашиваете, может ли одна система с одним IP-адресом открывать два соединения с одним и тем же адресом назначения + портом с одного и того же исходного адреса + порта, то ответ отрицательный. Когда второй экземпляр приложения пытается выполнить привязку к этой комбинации исходный адрес + порт, он получит сообщение об ошибке.
# cannot happen/invalid, client can't bind
src_ip sce_port dest_ip dest_port
192.168.1.4 1234 192.168.1.1 1234
192.168.1.4 1234 192.168.1.1 1234
TCP-соединения отслеживаются кортежем порт / адрес:
192.168.101.24:61213 <---> 192.168.105.50:80
Это соединение отслеживается с обеих сторон, и именно это сетевые стеки используют для определения фактического соединения. Из-за этого может быть одно и только одно соединение с этим кортежем. Вот почему создатель соединения использует для своей половины «эфемерный» порт, поэтому он может открыть более одного соединения с удаленной стороной.