Hoppa till innehålletHisnLabs
← TCP/IP: adresser, portar och anslutningar

Lektion 3 av 4 · 7 min

TCP-handslaget och en anslutnings liv

Hur två datorer kommer överens om att prata innan någon av dem skickar riktig data, hur de avslutar konversationen och vad en brandvägg som tittar i mitten faktiskt ser.

Innan din Mac skickar en enda byte av en webbsidaförfrågan har den redan utbytt tre korta meddelanden med servern. Det utbytet, TCP trevägshandskakning, är det som gör TCP:s tillförlitlighetslöften från föregående lektion till en faktisk, spårbar anslutning mellan två maskiner.

Tre meddelanden före det första ordet

RFC 9293, den nuvarande TCP-specifikationen, beskriver processen som en synkroniserad växel: "synkroniseringen kräver att varje sida skickar sitt eget initiala sekvensnummer och får en bekräftelse på det som bekräftelse från den fjärranslutna TCP-peeren."

  1. SYN. Enheten som öppnar anslutningen skickar ett segment med SYN-flaggan inställd, med ett startsekvensnummer.
  2. SYN-ACK. Den andra sidan svarar med sin egen SYN, plus en bekräftelse på det första numret.
  3. ACK. Den första enheten bekräftar det svaret. RFC 9293 noterar att "eftersom steg 2 och 3 kan kombineras i ett enda meddelande kallas detta trevägs (eller tre meddelanden) handskakning." När det är klart, räknar båda sidor anslutningen som ETABLISTERAD och börjar skicka riktiga data.

Cloudflares utbildningscenter ger en enkelspråkig version av samma idé, med ett e-postmeddelande som exemplet: "först skickar källan ett SYN 'initial request'-paket till målservern för att starta dialogen. Sedan skickar målservern ett SYN-ACK-paket för att godkänna processen. Slutligen skickar källan ett ACK-paket till målet, efter vilket meddelandet kan skickas för att bekräfta meddelandet."

Avsluta en anslutning rent

Att stänga är mer medvetet än att öppna. RFC 9293 förklarar att "den normala TCP-stängningssekvensen levererar buffrad data på ett tillförlitligt sätt i båda riktningarna" innan anslutningen avslutas: varje sida skickar ett FIN-segment när den inte har mer data att skicka, den andra sidan bekräftar det, och först när båda riktningarna har avslutats stängs anslutningen helt. En kort vänteperiod (TIME-WAIT) följer, så att eventuella herrelösa, försenade paket från den gamla anslutningen inte kan förväxlas med en del av en ny.

Vad en brandvägg i mitten ser

En tillståndsfull brandvägg, den typ som är inbyggd i de flesta routrar och i själva macOS, behöver inte inspektera varje paket för att fatta ett beslut. Cloudflares förklaring av brandväggar beskriver det så här: det "sparar information om öppna anslutningar och använder denna information för att analysera inkommande och utgående trafik, snarare än att inspektera varje paket." I praktiken betyder det att den tittar efter SYN som öppnar en anslutning, kommer ihåg att den här appen bad om ett svar och sedan tyst låter den matchande SYN-ACK komma in igen; ett svar som inte matchar någon utgående SYN tas bort. Det är också så en brandvägg kan skilja ett normalt svar från ett oönskat anslutningsförsök som kommer från ingenstans, vilket är grunden för att blockera oönskad inkommande trafik.

Inget av detta utbyte är krypterat av TCP själv; SYN, SYN-ACK och ACK är synliga i vanlig form för alla som tittar på nätverksvägen, inklusive din Wi-Fi-router. Vad som är dolt eller inte beror på lagret ovanför TCP, till exempel TLS för en HTTPS-sida, som kursen hur-internet-fungerar täcker separat.

Viktigt att minnas

  • TCP-anslutningar öppnas med en trevägshandskakning: SYN, sedan SYN-ACK, sedan ACK, enligt RFC 9293.
  • Först efter att handskakningen är klar börjar de två sidorna utbyta riktiga data.
  • Att stänga en anslutning är ett tvåvägsutbyte av FIN-segment så buffrad data levereras innan anslutningen avslutas.
  • En tillståndsfull brandvägg spårar vilka SYN:er som gick ut så att den kan känna igen och tillåta matchande svar och släppa oönskade.
  • Själva handslaget är inte krypterat; det är synligt för allt på nätverksvägen.

Testa dig själv

  1. 1. Vilken är den korrekta ordningen på TCP trevägshandskakning?

    • ACK, SYN, SYN-ACK
    • SYN, SYN-ACK, ACK — Rätt.
    • SYN-ACK, SYN, ACK
    • FIN, SYN, ACK

    RFC 9293 beskriver den anslutande sidan som skickar SYN först, den andra sidan svarar med SYN-ACK och den anslutande sidan bekräftar med ACK.

  2. 2. När börjar riktig applikationsdata flöda över en TCP-anslutning?

    • Innan SYN skickas
    • Först efter att trevägshandslaget är klart — Rätt.
    • Under SYN-ACK-steget
    • Data flödar kontinuerligt utan handskakning

    Handskakningen existerar för att synkronisera sekvensnummer innan någon sida litar tillräckligt på anslutningen för att skicka riktig data.

  3. 3. Hur beslutar en brandvägg att tillåta ett inkommande svarspaket?

    • Det tillåter alla inkommande paket som standard
    • Den kontrollerar om paketet matchar en anslutning som denna enhet öppnade, ihågkommen från den tidigare utgående SYN — Rätt.
    • Den inspekterar paketets innehåll efter nyckelord
    • Den tittar bara på destinationsporten, aldrig anslutningstillståndet

    Cloudflare beskriver en tillståndsfull brandvägg som en som "sparar information om öppna anslutningar" för att känna igen legitima svar snarare än att inspektera varje paket från början.

  4. 4. Är själva TCP-handskakningen krypterad?

    • Ja, alltid
    • Nej, det är enkelt och synligt för allt på nätverksvägen — Rätt.
    • Endast SYN är krypterad
    • Endast på HTTPS-anslutningar

    TCP tillhandahåller beställning och tillförlitlighet, inte konfidentialitet. Kryptering, när den finns, kommer från ett lager ovanför TCP som TLS.

Testa det med FireAI

Omsätt den här lektionen i praktiken på din egen Mac.

Källor

Omsätt det på din Mac

Prova alla funktioner gratis i 17 dagar, inget kort behövs.

Ladda ner för Mac Dokumentation