Количество возможных сетевых подключений - PullRequest
9 голосов
/ 10 мая 2011

Поскольку номера портов ограничены 65536, есть ли ограничение для номера соединения?

Чем каждое соединение отличается друг от друга?

Если это порт, то не может быть одновременно более 65536 соединений?

Ответы [ 2 ]

9 голосов
/ 10 мая 2011

В игре много разных фигур.Поскольку соединение определяется (Src IP, Src Port, Dest IP, Dest Port) кортежами, вам разрешено 65536 ^ 2 соединений между двумя заданными одноранговыми узлами в любой момент времени: от 1 до 1, от 1 до 2, .. от 1 до 65535 и т. Д. И это простомежду двумя одноранговыми узлами - конечно, вы можете иметь множество соединений, открытых для нескольких одноранговых узлов одновременно.

НО , большинство операционных систем ограничивают количество открытых файловых дескрипторов / дескрипторов на процесс.Этот предел был исторически низким (20), но теперь часто выше (1024 в моей системе, ulimit -a покажет ограничения для каждого процесса в bash(1)).

В дополнение к ограничениям setrlimit(3) дляUnix-системы, также существуют общесистемные ограничения;/proc/sys/fs/file-max в системе Linux сообщит о максимально допустимом количестве открытых файлов во всей системе.(Это 596118 в моей системе.) Другие системы будут иметь другие ограничения.

И, возможно, может быть ограничение на количество открытых соединений, поддерживаемых межсетевым экраном с контролем состояния в середине.Поскольку каждому состоянию требуется память в таблицах брандмауэра, любое из них, вероятно, будет устанавливать какой-то произвольный предел, чтобы избежать нехватки памяти.

7 голосов
/ 10 мая 2011

TCP-соединение фактически идентифицируется по IP-адресу однорангового узла + одноранговому порту + локальному IP-адресу + локальному порту, так что на самом деле у вас может быть более 64 КБ, но я не знаю, работают ли ОС, чтобы разрешить более 64 КБза локальный IP-адрес.Windows этого не делает.

Одна вещь, представляющая интерес, заключается в том, что порты могут оставаться зарезервированными в течение короткого времени после их закрытия.(Это делается для того, чтобы избежать случайных или преднамеренных перекрестных помех между старыми и новыми соединениями.) Просто создавая и закрывая соединение по замкнутому циклу, вы фактически можете заставить свою машину исчерпать порты.См. http://www.perlmonks.org/?node_id=897591 для кода Perl, который будет вешать вызовы соединения сокетов (на некоторых машинах), используя все сокеты.

UDP также имеет порты, но UDP не имеет соединений.Поэтому сокет идентифицируется только по локальному IP-адресу + локальный порт, поэтому на локальном IP-адресе можно использовать не более 64 тыс. Портов UPD.

Обновление : добавлен абзац дляUDP.

...