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.