Войти
ПрограммированиеФорумСеть

Windows 10 Maximum TCP-IP Connection Limit (2 стр)

Страницы: 1 2
#15
9:57, 14 фев. 2018

MrShoor
> Как ты определишь какие пакеты в какое соединение рассылать?
не, ну понятно, что тут должно быть что-то вроде проброски портов роутера и какие-то локальные порты или как их не назови
MrShoor
> Что как бы ограничивает количество локальных портов до 65535.
Да.. Похоже на правду, вот только не понятно, если есть 65535 портов и на каждый порт есть 65535 виртуальных портов, то есть максимальное кол-во соединений  65535*65535 == 4294836225, что странно, т.к. дескриптор сокета в винде типа int и вряд ли он может быть отрицательным, а положительных значений в int-е как известно  2147483647, то есть как бы максимальное кол-во соединений равно unsigned int-у, а если не брать отрицательные дескрипторы, то в два раза меньше... или они могут быть отрицательными?
А вообще, какой олень такой такой лимит придумал?....Для того, что бы завести больше коннектов, мне спецом нужно слушать дополнительный порт, бред какой-то...
На Linux-е надеюсь такого нет? :-)


#16
10:06, 14 фев. 2018
+ Показать

хотя как-то всё это подозрительно, здесь же речь идёт не о каких-то виртуальных портах, а о портах локал хоста... хз, это вообще к делу относится? С чего вдруг порт ОС будет коннекты перенаправлять на локал хост, если можно тупо завести сокет и по его номеру как-то там отсеивать...

Хмм... погуглил, вроде так и есть (хотя может плохо гуглил?), да и пёс с ним, для моей задачи хватит и 4-х ... 5-и тысяч коннектов )))

#17
10:47, 14 фев. 2018

-=MASTER=-
> На Linux-е надеюсь такого нет? :-)
Причем тут windows или linux? Это особенность TCP. Локальный порт передается в пакетах TCP соединения. Иначе непонятно на какое из приложений слать пакет.
https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_s… ent_structure
Вон там первые 4 байта это Source и Destination порты. Когда на сервер (скажем геймдевчик) отправляется запрос, твоя ОС поднимает TCP соединение, которому назначает локальный порт. Этот локальный порт кладется в source port в заголовок TCP. Когда хост геймдев.ру принимает TCP заголовок, он видит source port от которого пришел пакет. Вот он берет этот порт, и кладет в destination port заголовка TCP и посылает пакет обратно вместе с ответом клиенту.
Ну и твоя математика 65535*65535 == 4294836225 вообще бессмысленна. Идет от тотального непонимая работы TCP. Почитай уже наконец как TCP устроен.

#18
11:08, 14 фев. 2018

MrShoor
> 65535
Не. Это сколько всего портов можно использовать на некотором сетевом адресе.
А Мастера интересует, насколько я понял, количество коннектов на один порт. Это ограничивается количеством одновременно открытых файловых дескрипторов (в линухе по крайней мере, не думаю что в винде сильно отличается), а этих дескрипторов точно можно плодить больше чем влазит в 16 бит. Ну и это настраивается, что в винде, что в линуксе.

#19
11:28, 14 фев. 2018

youtube
> Не. Это сколько всего портов можно использовать на некотором сетевом адресе.
Ну так в этот лимит скорее всего и упрешься еще до того как дескрипторы исчерпаешь.

#20
11:55, 14 фев. 2018

MrShoor
> Вон там первые 4 байта это Source и Destination порты.
понял, спс
youtube
> А Мастера интересует, насколько я понял, количество коннектов на один порт.
именно
youtube
> Это ограничивается количеством одновременно открытых файловых дескрипторов (в
> линухе по крайней мере, не думаю что в винде сильно отличается), а этих
> дескрипторов точно можно плодить больше чем влазит в 16 бит. Ну и это
> настраивается, что в винде, что в линуксе.
MrShoor
> Ну так в этот лимит скорее всего и упрешься еще до того как дескрипторы
> исчерпаешь.
Всё понял, спс ребят! Как камень с горба)) короче в общем то ограничений нет, намного быстрее ресурсы сервака закончатся. Ограничения на винде есть только на полуоткрытые соединения, то есть на момент коннекта, не думаю, что мне это как-то навредит, вряд ли все 4000 пользователей будут одновременно рваться в сесть, а даже если будут - подождут, это ж не долго и единоразово...

#21
12:16, 14 фев. 2018

В юниксовых системах файловые дескриторы и дескрипторы сокетов это одно и тоже. В винде они раздельно.

#22
14:29, 14 фев. 2018

MrShoor
> Ну так в этот лимит скорее всего и упрешься еще до того как дескрипторы
> исчерпаешь.
Нет. Я не знаю как надо извратиться над сервером, чтобы выжрать все порты. Порт это номер, по которому ОС определяет какому процессу отдать данный tcp-пакет. Т. е. у тебя на сервере должно быть запущено
к примеру 64к процессов или один процесс должен отожрать все порты. Так никто не делает. Ну разве что позырить что получится. А вот дескрипторы запросто могут кончиться.

#23
20:54, 14 фев. 2018

youtube
> Порт это номер, по которому ОС определяет какому процессу отдать данный
> tcp-пакет.
Нет. Не процессу, а соединению. Т.е. достаточно иметь 65535 различных клиентских соединений.

youtube
> Т. е. у тебя на сервере должно быть запущено
> к примеру 64к процессов или один процесс должен отожрать все порты.
С сервером все по другому. На сервере ты сам определяешь порт, и например ты ну никак не сможешь открыть 2 слушающих сокета на 80 порт, даже в разных процессах. То есть http сервер будет выжирать только один порт вне зависимости от количества клиентов.
Я же говорил про клиентские машины, на которых можно открыть 100500 соединений.

youtube
> Так никто не делает. Ну разве что позырить что получится.
Достаточно иметь большую (скажем 5000 машин) сетку за одним NAT-ом.

#24
6:09, 15 фев. 2018

MrShoor
> DWORD
> only the lower 16 bits should be used
> The upper 16 bits may contain uninitialized data
"угадай компанию по документации"

#25
9:34, 15 фев. 2018

MrShoor
> Нет. Не процессу, а соединению. Т.е. достаточно иметь 65535 различных
> клиентских соединений.
Так... опять непонятно...) Так что получается, TCP коннект летит на порт ОС, оттуда на локальный порт ОС и только оттуда к процессу? То есть фактический, ограничение на кол-во одновременно подключенных TCP соединений на один порт ОС в 65535 штук существует и оно обусловлено лимитом локальных портов, ведь так?

P.S.: кстати, когда пакет летит по сети, на него ж каждый роутер довешивает подобные блоки с source/ dest, то есть это ограничение вообще глобально для любой "развилки" в интернете?

#26
12:34, 15 фев. 2018

-=MASTER=-
Ты когда-нибудь tcp программировал? Если "да", то откуда вопросы?
На сервере есть слушающий порт, куда стучатся клиенты. Когда происходит коннект, каждому соединению выдается еще один порт, через который и происходит вся работа.

#27
15:38, 15 фев. 2018

Zab
> Ты когда-нибудь tcp программировал? Если "да", то откуда вопросы?
Разумеется, но я не задумывался о кол-ве коннектов на один порт. Сервер слушает порт, принимает коннект и выдаёт мне дескриптор сокета под него, всё..., я создаю сокет и работаю. Вручную какие-то внутренние порты я никогда не прописывал, хотя возможно Qt из меня просто сделало домохазяьку в стиле c# проггера и стоит почитать про TCP поподробнее)))

Страницы: 1 2
ПрограммированиеФорумСеть

Тема в архиве.