Aby wyraźnie pokazać moje pytanie, użyję dość wysokich liczb. Serwer plików jest podłączony do Internetu za pomocą linii 1 Gb / s. Serwer wysyła plik 100 GB do klienta. Plik jest pofragmentowany na pakiety i wysyłany z szybkością 1 Gb / s do ISP klienta. Klient jest jednak połączony z usługodawcą internetowym za pomocą linii 1 Mb / s. Oznaczałoby to, że dostawca usług internetowych musiałby zapisać / buforować wszystkie dane wysyłane do niego z serwera plików, dopóki wszystkie nie zostaną odebrane przez klienta.
Czy tak to się robi, czy też serwer w jakiś sposób wysyła pakiety z tą samą prędkością co najwolniejsza linia między serwerem a klientem?
networking
internet
cache
Przyjaciel Kim
źródło
źródło
Odpowiedzi:
Internet nie korzysta tylko z jednego protokołu. Nie używa nawet tylko jednego protokołu naraz: w rzeczywistości używa kilku jednocześnie, które układają się jeden na drugim, aby wykonywać różne czynności. Jeśli trochę uproszczymy, można powiedzieć, że używa czterech.
Te protokoły przesyłania plików, o których wspomniałem, są zwykle ułożone na wierzchu TCP (który sam jest ułożony na szczycie IP), i tam właśnie docieramy do konkretnego pytania. TCP próbuje najlepiej, jak to możliwe, aby działać jak drut prosto między maszynami: kiedy serwer wysyła pakiet, może być pewien, że klient go dostał, i może być pewien, że klient otrzymał swoje pakiety w tej samej kolejności, w której serwer je wysłał. Po części polega to na tym, że każdy pakiet wysyłany przez serwer musi zostać potwierdzony przez klienta: wysyła mały sygnał zwrotny z informacją: „OK, dostałem ten pakiet, który wysłałeś; jestem gotowy na następny”. Jeśli serwer nie otrzyma tego potwierdzenia, wysyła pakiety, dopóki tak się nie stanie (lub zdecyduje, że to nigdy nie zadziała i się nie poddaje).
To jest klucz do odpowiedzi na twoje pytanie. Serwer nie może wysłać Pakiet 2 dopóki nie wie, że Pakiet 1 dotarło, co nie może się zdarzyć, dopóki nie zostanie potwierdzony Packet 1, i że nie może się zdarzyć, dopóki pakiet 1 jest naprawdę skończony. Serwery w środku łańcucha nie muszą buforować żadnych danych (w każdym razie nie więcej niż jednego pakietu), ponieważ zanim maszyna zobaczy pakiet 2, wie, że nie potrzebuje już pakietu 1 .
Ostatni punkt: technicznie oznacza to tylko, że Internet nie musi buforować danych tak, jak mówisz. Jeśli ktoś naprawdę chciał buforować wszystkie te dane, mógł; w protokołach nie ma nic, co mogłoby naprawdę to powstrzymać. Ale Internet nie potrzebuje tych pamięci podręcznych do działania.
źródło
Większość serwerów (WWW, FTP, co masz) korzysta z ograniczania przepustowości, aby uniknąć sytuacji, w której jeden komputer ma dostęp do całej dostępnej przepustowości. Każde połączenie może być ograniczone do określonej prędkości, dzięki czemu wielu klientów może się łączyć i nie będą miały wpływu spowolnienia. Przynajmniej za dużo. Pamiętaj, że twoje połączenie jest ograniczone najwolniejszym linkiem w twoim łańcuchu.
źródło