Czy dostawca usług internetowych buforuje wszystkie dane?

3

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?

Przyjaciel Kim
źródło
2
To, co opisujesz, nie ma miejsca. Klient nawiązuje bezpośrednie połączenie z serwerem plików i pobiera z prędkością 1 Mb / s.
Ramhound
@Ramhound Jak to działa? Czy masz na ten temat jakieś artykuły zewnętrzne? Skąd serwer może wiedzieć, że powinien wysyłać pakiety z prędkością 1 Mb / s? Co się stanie, jeśli nie ogranicza się do tej prędkości?
Przyjaciel Kim
Wyjaśnienie, jak działa serwer WWW, nie wchodzi w zakres twojego pytania. Zapytałeś, czy to, co opisałeś, to jak to działa, ale nie, dostawca usług internetowych klienta nigdy nie buforuje pliku. Co rozumiesz przez „Co się stanie, jeśli nie ograniczy się do tej prędkości?” co to dokładnie jest
Ramhound
1
Zobacz en.wikipedia.org/wiki/…
jjlin
4
Nie, nadawca musi poczekać, aż odbiorca przeczyta dane, zanim będzie mógł wysłać więcej danych. Jest trochę buforowania, ale nie ma buforowania (co oszczędza do późniejszego ponownego użycia). Nadawca prawdopodobnie nawet nie odczyta większości 100 GB z dysku z większą szybkością, niż odbiorca zużywa.
mgkrebbs

Odpowiedzi:

11

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.

  • Warstwa łącza : protokół, który pozwala zepchnąć sygnał w dół przewodu (fal radiowych, błysków światła itp.) Do innej maszyny na drugim końcu. Przykłady obejmują PPP, WiFi i Ethernet.
  • Warstwa sieci : protokół, który pozwala przepchnąć sygnał przez łańcuch maszyn, dzięki czemu można uzyskać dane między maszynami, które nie są bezpośrednio połączone. Tutaj mieszkają IP i IPv6.
  • Transport Layer : Protokół, który pozwala na zrozumienie tego sygnału. Niektóre, takie jak TCP, ustanawiają „wirtualne połączenia” między dwoma maszynami, tak jakby między nimi był drut. Inne, takie jak UDP, po prostu wysyłają bity danych z jednej maszyny na drugą. Różne protokoły mają różne mocne i słabe strony, dlatego jest ich tak wiele.
  • Warstwa aplikacji : są to, co zwykle nazywamy „protokołami”. Specjalizują się w określonych typach danych przeznaczonych do określonych celów. Niektóre przykłady obejmują FTP, HTTP i BitTorrent, które wszystkie pliki przesyłają.

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.

The Spooniest
źródło
3
Jedno - TCP obsługuje (i prawie każde połączenie korzysta) z funkcji okienkowania, która pozwala serwerowi wysyłać pewną liczbę pakietów bez konieczności odpowiedzi. Klient może potwierdzić wiele pakietów jednocześnie. Może to znacznie przyspieszyć połączenie powolne lub dalekobieżne.
uSlackr
Twoja odpowiedź w połączeniu z komentarzem @uSlackr jest idealną odpowiedzią na to pytanie. Dziękuję wam obu!
Przyjaciel Kim
Wyjątkiem byłby przezroczysty buforujący serwer proxy po stronie dostawcy usług internetowych, który pobierałby dane tak szybko, jak tylko usługodawca internetowy może je otrzymać, ale serwer proxy usługodawcy internetowego wysyłałby je wolniej do klienta.
Monstieur
Czy wszystkie węzły w Internecie muszą obsługiwać używany protokół? Więc wszystkie węzły muszą na przykład obsługiwać TCP i UDP?
Przyjaciel Kim
1
@FriendOfKim: Muszą obsługiwać ten sam protokół warstwy sieci (IP, w przypadku Internetu), aby mogli przepychać sygnały przez łańcuch maszyn, aby dostać się tam, gdzie musi. Ale to jedyny, który wszyscy muszą wspierać. Właśnie dlatego zestawiają protokoły w ten sposób: pod adresem IP można tworzyć różnego rodzaju łącza oraz wszelkiego rodzaju transporty i aplikacje powyżej adresu IP, i dopóki wszyscy znają adres IP, sygnał przechodzi.
Spooniest
2

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.

JSanchez
źródło