Czy istnieje sztywny limit 65536 otwartych połączeń TCP na adres IP w systemie Linux?

23

Czy istnieje sztywny limit 65536 otwartych połączeń TCP na adres IP w systemie Linux? Czytałem gdzieś, że tam był, ale ktoś prosi o potwierdzenie i po prostu nie mogę go znaleźć.

Wydaje mi się, że pamiętam, że było coś w tym, że deskryptory plików były 16-bitową liczbą całkowitą, co jakoś je ogranicza?

A może to hokum i czy po prostu nie ma żadnych ograniczeń poza tym, jak potężny jest serwer?

Chris
źródło

Odpowiedzi:

35

Być może myślisz o liczbie portów. W bieżącej wersji IPv4 dostępnych jest 65536 portów w TCP. To nie jest tylko ograniczenie Linuksa, to część protokołu. Twój adres IP identyfikuje twój komputer, a port identyfikuje program na twoim komputerze.

Ale liczba połączeń nie jest przez to ograniczona. Połączenie składa się z 5 informacji, w geeku mów 5-krotkę. Jest on określony przez protokół (TCP, UDP), lokalny adres IP i port oraz zdalny adres IP i port. Więc weź serwer WWW. Może obsługiwać wiele połączeń na tym samym porcie (najprawdopodobniej 80). Twój serwer może obsługiwać wiele połączeń z tym samym komputerem klienckim. Załóżmy, że łączysz się z google.com z dwóch okien. Twoje urządzenie wybierze nieużywany port dla każdego połączenia. Tak więc serwer google będzie musiał śledzić (TCP, google.com, 80, twoja maszyna, someport1) i (TCP, google.com, 80, twoja maszyna, someport2). W pewnym momencie wpadniesz na limity, ale nie jest to twardy limit i jest bardzo zależny od systemu.

I tak, każde gniazdo jest deskryptorem pliku, ale nie wszystkie maszyny używają skrótów do tabeli fd. W moim systemie, który nie jest dostrojony w ogóle, cat /proc/sys/fs/file-maxdaje 323997. Jestem pewien, że mógłbym go poprawić, jeśli zajdzie taka potrzeba.

Istnieje więc limit 65336, ale dotyczy on adresowania, a nie liczby połączeń. Liczba połączeń jest ograniczona, ale bardziej z powodu konfiguracji systemu i ilości pamięci.

Rich Homolka
źródło
2
Tak więc, ponownie 5-krotek: chociaż jestem ograniczony do 65536 portów, co ogranicza mnie tylko do 64 000 połączeń na przychodzący adres IP , prawda? Zatem jedynym ograniczeniem są deskryptory plików, ale niekoniecznie są one 16-bitowe? Więc w zasadzie mówisz, że nie ma żadnych ograniczeń?
Chris
1
tak. Zobacz także: en.wikipedia.org/wiki/Transmission_Control_Protocol sekcja „Wykorzystanie zasobów”
12889
3
@Chris: 64 tys. Połączeń na przychodzący adres IP na jednym porcie lokalnym , tak.
grawity
@Chris, co powiedziała grawitacja. 5-krotek będzie miał do (ale nigdy nie osiągnie) 65536 kombinacji z drugą maszyną. W rzeczywistości nigdy się tam nie dostaniesz, ponieważ komputer nie może użyć starego portu do połączenia - niektóre są zastrzeżone z określonych powodów.
Rich Homolka