Lekcja 3 z 4 · 7 min
Uzgadnianie TCP i życie połączenia
Jak dwa komputery uzgadniają rozmowę, zanim którekolwiek wyśle prawdziwe dane, jak kończą rozmowę i co faktycznie widzi firewall obserwujący pośrodku.
Zanim twój Mac wyśle choćby jeden bajt żądania strony internetowej, wymienił już z serwerem trzy krótkie wiadomości. Ta wymiana, trójetapowe uzgadnianie TCP, zamienia obietnice niezawodności TCP z poprzedniej lekcji w rzeczywiste, możliwe do śledzenia połączenie między dwiema maszynami.
Trzy wiadomości przed pierwszym słowem
RFC 9293, obecna specyfikacja TCP, opisuje ten proces jako zsynchronizowaną wymianę: „synchronizacja wymaga, by każda strona wysłała własny początkowy numer sekwencyjny i otrzymała jego potwierdzenie od zdalnego partnera TCP”.
- SYN. Urządzenie otwierające połączenie wysyła segment z ustawioną flagą SYN, niosący początkowy numer sekwencyjny.
- SYN-ACK. Druga strona odpowiada własnym SYN, plus potwierdzeniem pierwszego numeru.
- ACK. Pierwsze urządzenie potwierdza tę odpowiedź. RFC 9293 zaznacza, że „ponieważ kroki 2 i 3 można połączyć w jedną wiadomość, nazywa się to uzgadnianiem trójetapowym (lub trójwiadomościowym)”. Gdy się zakończy, obie strony traktują połączenie jako NAWIĄZANE i zaczynają wysyłać prawdziwe dane.
Cloudflare Learning Center podaje prostszą wersję tej samej idei, używając e-maila jako przykładu: „najpierw źródło wysyła pakiet SYN, ‘wstępne żądanie’, do serwera docelowego, by rozpocząć dialog. Następnie serwer docelowy wysyła pakiet SYN-ACK, by zgodzić się na ten proces. Na koniec źródło wysyła pakiet ACK do celu, by potwierdzić ten proces, po czym można wysłać treść wiadomości”.
Czyste zakończenie połączenia
Zamykanie jest bardziej rozważne niż otwieranie. RFC 9293 wyjaśnia, że „normalna sekwencja zamknięcia TCP niezawodnie dostarcza zbuforowane dane w obu kierunkach” przed zakończeniem połączenia: każda strona wysyła segment FIN, gdy nie ma już więcej danych do wysłania, druga strona to potwierdza, i dopiero gdy obie strony skończą, połączenie w pełni się zamyka. Następuje krótki okres oczekiwania (TIME-WAIT), dzięki czemu żaden zabłąkany, opóźniony pakiet ze starego połączenia nie zostanie pomylony z częścią nowego.
Co widzi firewall pośrodku
Firewall stanowy (stateful), rodzaj wbudowany w większość routerów i w sam macOS, nie musi sprawdzać każdego pakietu, by podjąć decyzję. Wyjaśnienie Cloudflare dotyczące firewalli ujmuje to tak: „zapisuje informacje o otwartych połączeniach i wykorzystuje je do analizy ruchu przychodzącego i wychodzącego, zamiast sprawdzać każdy pakiet”. W praktyce oznacza to, że obserwuje SYN otwierający połączenie, zapamiętuje, że ta aplikacja poprosiła o odpowiedź, a potem po cichu przepuszcza z powrotem pasujący SYN-ACK; odpowiedź niepasująca do żadnego wychodzącego SYN jest odrzucana. Tak firewall potrafi też odróżnić normalną odpowiedź od niechcianej próby połączenia, przychodzącej znikąd, co jest podstawą blokowania niechcianego ruchu przychodzącego.
Nic w tej wymianie nie jest szyfrowane przez sam TCP; SYN, SYN-ACK i ACK są jawnie widoczne dla każdego obserwującego trasę sieciową, w tym twojego routera Wi-Fi. To, co jest ukryte, a co nie, zależy od warstwy powyżej TCP, takiej jak TLS dla strony HTTPS, co osobno omawia kurs o tym, jak działa internet.
Najważniejsze
- Połączenia TCP otwierają się trójetapowym uzgadnianiem: SYN, potem SYN-ACK, potem ACK, według RFC 9293.
- Dopiero po zakończeniu uzgadniania obie strony zaczynają wymieniać prawdziwe dane.
- Zamknięcie połączenia to dwukierunkowa wymiana segmentów FIN, dzięki czemu zbuforowane dane są dostarczone przed zakończeniem połączenia.
- Firewall stanowy śledzi, które SYN wyszły, dzięki czemu może rozpoznać i przepuścić pasujące odpowiedzi oraz odrzucić niechciane.
- Samo uzgadnianie nie jest szyfrowane; jest widoczne dla każdego na trasie sieciowej.
Sprawdź się
1. Jaka jest poprawna kolejność trójetapowego uzgadniania TCP?
- ACK, SYN, SYN-ACK
- SYN, SYN-ACK, ACK — Dobrze.
- SYN-ACK, SYN, ACK
- FIN, SYN, ACK
RFC 9293 opisuje stronę łączącą się jako wysyłającą najpierw SYN, drugą stronę odpowiadającą SYN-ACK, a stronę łączącą się potwierdzającą ACK.
2. Kiedy przez połączenie TCP zaczynają płynąć prawdziwe dane aplikacji?
- Przed wysłaniem SYN
- Dopiero po zakończeniu trójetapowego uzgadniania — Dobrze.
- W trakcie kroku SYN-ACK
- Dane płyną nieprzerwanie, bez uzgadniania
Uzgadnianie istnieje, by zsynchronizować numery sekwencyjne, zanim którakolwiek strona zaufa połączeniu na tyle, by wysłać prawdziwe dane.
3. Jak firewall stanowy decyduje, czy przepuścić przychodzący pakiet odpowiedzi?
- Domyślnie przepuszcza wszystkie pakiety przychodzące
- Sprawdza, czy pakiet pasuje do połączenia otwartego przez to urządzenie, zapamiętanego z wcześniejszego wychodzącego SYN — Dobrze.
- Sprawdza treść pakietu pod kątem słów kluczowych
- Patrzy wyłącznie na port docelowy, nigdy na stan połączenia
Cloudflare opisuje firewall stanowy jako taki, który „zapisuje informacje o otwartych połączeniach”, by rozpoznawać uzasadnione odpowiedzi, zamiast sprawdzać każdy pakiet od zera.
4. Czy samo uzgadnianie TCP jest szyfrowane?
- Tak, zawsze
- Nie, jest jawne i widoczne dla każdego na trasie sieciowej — Dobrze.
- Szyfrowany jest tylko SYN
- Tylko przy połączeniach HTTPS
TCP zapewnia kolejność i niezawodność, nie poufność. Szyfrowanie, gdy występuje, pochodzi z warstwy powyżej TCP, takiej jak TLS.
Wypróbuj to z FireAI
Zastosuj tę lekcję w praktyce na swoim Macu.
- Sprawdź, dokąd aplikacja wysyła dane, na Mapie świata — Zobacz dokładnie, z jaką firmą i w jakim kraju cicho rozmawia jedna aplikacja.
- Reguły: aplikacja, strona, domena, IP albo zakres — na zawsze albo do restartu — Napisz regułę tak precyzyjną jak jeden adres albo tak szeroką jak cała domena.
- Głęboka inspekcja, bez odszyfrowywania czegokolwiek — Uzyskaj prawdziwe szczegóły o bezpiecznym połączeniu bez ryzyka, że FireAI kiedykolwiek odczyta jego zawartość.
Źródła
- RFC 9293: Transmission Control Protocol (TCP)
- Cloudflare Learning: What is TCP/IP?
- Cloudflare Learning: What is a Firewall?
Zastosuj to na swoim Macu
Wypróbuj wszystkie funkcje za darmo przez 17 dni, bez karty.