Istnieje 65536 portów dla każdego systemu w sieci i każde połączenie lub Wyślij / Odbierz użyje jednego z nich.
Moje pytanie brzmi: co się stanie, jeśli będziemy mieć 65536 + 1 połączeń ?!
Wiem, że nie dzieje się to normalnie, ale jestem ciekawy, jak radzą sobie z tym systemy operacyjne.
networking
operating-systems
Omid Golparvar
źródło
źródło
Odpowiedzi:
Należy pamiętać, że system może obsługiwać więcej niż 65536 równoczesnych połączeń, ponieważ oni nie koniecznie każdym użyciu oddzielnego portu.
Połączenie TCP lub przepływ UDP jest definiowany przez 4-krotkę:
Więc nawet jeśli masz maszynę serwera WWW z jednym adresem IP i pojedynczym pakietem oprogramowania serwera HTTP nasłuchującego tylko na porcie 80, teoretycznie może obsłużyć 65536 połączeń na każdy adres IP klienta, który się z nim łączy . Więc połączenia 64Ki z adresu IP klienta 1, plus połączenia 64Ki z adresu IP klienta 2 itd.
Tak więc protokoły obsługują, zgodnie z pierwszym przybliżeniem, 2 48 połączeń / przepływów do jednego portu TCP lub UDP na jednym adresie IPv4. Rozważ razem zarówno TCP, jak i UDP, a także przestrzeń adresową IPv4 i kosmicznie / komicznie dużą przestrzeń adresową IPv6, i można zauważyć, że same protokoły prawdopodobnie nigdy nie będą źródłem ograniczenia liczby równoczesnych połączeń hosta może obsługiwać.
Podobnie, w protokołach TCP lub UDP nie ma nic, co powstrzymałoby maszynę klienta przed użyciem jednego portu źródłowego na jednym adresie IP do wykonania wielu połączeń wychodzących z różnymi adresami i portami serwera. Czasami sieciowe interfejsy API danego systemu operacyjnego mogą nie ułatwiać tego, ale ważne jest, aby pamiętać, że powiedzmy, że czcigodny stary interfejs API „[BSD] Sockets” jest tylko jednym interfejsem API dla TCP i UDP. TCP i UDP mogą mieć funkcje, które nie są ujawniane przez tradycyjny interfejs API gniazd.
Tak więc liczba równoczesnych połączeń TCP lub przepływów UDP, które dany host może obsłużyć, jest ograniczona nie tyle przez numery portów, ale przez zasoby systemowe, takie jak miejsce w pamięci RAM i czas procesora potrzebny do śledzenia wszystkich tych połączeń i ich obsługi. Również szczegóły specyficzne dla implementacji systemu operacyjnego mogą narzucić sztuczne ograniczenia. Na przykład w uniksowej filozofii „wszystko jest plikiem” może istnieć deskryptor pliku dla każdego połączenia TCP lub przepływu UDP. Jeśli twoje jądro uniksowe ma ograniczenie liczby deskryptorów plików, które może śledzić, ten limit deskryptorów plików jest sztucznym ograniczeniem liczby równoczesnych połączeń TCP lub przepływów UDP, które jądro może obsłużyć.
źródło