Jaka jest teoretyczna maksymalna liczba otwartych połączeń TCP, jakie może mieć nowoczesny Linux box

Zakładając nieskończoną wydajność sprzętu, czy Linux box może obsługiwać >65536 otwartych połączeń TCP?

Rozumiem, że liczba efemerycznych portów (

Krotka (local ip, local port, remote ip, remote port) jest tym, co jednoznacznie definiuje połączenie TCP; czy oznacza to, że więcej niż 65K połączeń może być obsługiwanych, jeśli więcej niż jeden z tych parametrów jest wolny. np. połączenia z jednym numerem portu na wielu zdalnych hostach z wielu lokalnych adresów IP.

Czy jest jeszcze 16-bitowy limit w systemie? Liczba deskryptorów plików może?

Author: tshepang, 2010-02-25

3 answers

Pojedynczy port nasłuchowy może przyjmować więcej niż jedno połączenie jednocześnie.

Istnieje limit' 64K', który jest często cytowany, ale to jest na klienta na port serwera i wymaga wyjaśnienia.

Każdy pakiet TCP / IP ma w zasadzie cztery pola adresowania. Są to:

source_ip source_port destination_ip destination_port
<----- client ------> <--------- server ------------>

Wewnątrz stosu TCP, te cztery pola są używane jako klucz złożony do dopasowania pakietów do połączeń (np. deskryptorów plików).

Jeśli klient ma wiele połączeń do tego samego portu na to samo miejsce docelowe, wtedy trzy z tych pól będą takie same - tylko source_port różni się w celu rozróżnienia różnych połączeń. Porty są numerami 16-bitowymi, dlatego Maksymalna liczba połączeń, jakie może mieć dany klient do dowolnego portu hosta, wynosi 64K.

Jednak wielu Klientów może mieć do 64K połączeń do portu jakiegoś serwera, a jeśli serwer ma wiele portów lub jest multi-homed, można to pomnożyć dalej.

Więc prawdziwym limitem jest plik deskryptory. Każde pojedyncze połączenie gniazd ma deskryptor pliku, więc tak naprawdę limitem jest liczba deskryptorów plików, na które System został skonfigurowany, i zasoby do obsługi. Maksymalny limit wynosi zazwyczaj ponad 300K, ale można go konfigurować np. za pomocą sysctl.

Realistyczne limity, którymi się chwalimy dla zwykłych skrzynek, to około 80K, na przykład jednowątkowe serwery wiadomości Jabbera.

 373
Author: Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-15 23:56:36

Jeśli myślisz o uruchomieniu serwera i próbujesz zdecydować, ile połączeń może być obsługiwanych z jednego komputera, możesz przeczytać o problem C10k i potencjalnych problemach związanych z obsługą wielu klientów jednocześnie.

 18
Author: Spaceghost,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-07 18:30:14

Jeśli użyłeś surowego gniazda (SOCK_RAW) i ponownie zaimplementowałeś TCP w userland, myślę, że odpowiedź jest ograniczona w tym przypadku tylko liczbą krotek (local address, source port, destination address, destination port) (~2^64 na lokalny adres).

Oczywiście potrzeba dużo pamięci, aby utrzymać stan wszystkich tych połączeń, i myślę, że trzeba by skonfigurować pewne reguły iptables, aby stos jądra TCP nie denerwował się i / lub nie odpowiadał w Twoim imieniu.

 12
Author: sbirch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-11 19:44:10