TCP-protocol. TCP drieweghandshake - SYN- en ACK-vlaggen

Veel mensen zijn bekend met de afkorting TCP; veel minder mensen weten dat het een protocol voor gegevensoverdracht is. Maar bijna niemand weet hoe het werkt.

Aandacht! Dit materiaal is bedoeld voor degenen die echt geïnteresseerd zijn in de vraag: "Hoe het netwerk werkt en wat kan ik doen als ik het ken." Als je nog steeds in de war bent door woorden als DNS, Telnet, Socket, dan kun je dit materiaal meteen vergeten - zulke "enge" woorden zullen hier zeker niet verschijnen, maar dit zal de inhoud er niet duidelijker op maken...

Voor degenen die zijn gebleven:

Waarschijnlijk hebben velen van jullie wel eens woorden gehoord als SYN-flooding of IP-spoofing. Dit zijn allemaal soorten aanvallen: de eerste D.O.S., de tweede
bestaat uit het spoofen van een IP-adres. Op het eerste gezicht is er niets met elkaar gemeen tussen deze voorbeelden, maar ondertussen is dat niet het geval: beide aanvallen zijn niet mogelijk zonder diepgaande kennis van het TCP-protocol, het protocol waarop
Inet.

De TCP-protocolspecificatie wordt beschreven in RFC793. Ik raad u aan dit document te lezen, want hoewel ik zal proberen u de belangrijkste dingen over te brengen, door dit belangrijke te voorzien van relevante opmerkingen die u niet in de handleiding zult vinden, maar toch vanwege het kleine volume en de praktische kijkhoek Misschien mis ik enkele subtiliteiten.

Gegevens worden verzonden in de vorm van pakketten. Deze organisatie van de overdracht houdt in dat de gegevens, hoe groot deze ook zijn, worden opgedeeld in afzonderlijke fragmenten, die tot pakketten worden gevormd (bij de vorming van pakketten wordt ervan uitgegaan dat er een serviceheader aan de gegevens wordt toegevoegd), waarna de gegevens worden verzonden. in de vorm van pakketten via het netwerk (en de volgorde van pakketverzending kan worden geschonden). Het ontvangende systeem “samenstelt” de initiële data-array uit de pakketten op basis van de pakketheaders. Dit is niet erg duidelijk, maar alleen totdat we naar de structuur van de pakketten kijken.

TCP-pakketstructuur:

Ik zal alleen de belangrijkste punten toelichten:

Adres van ontvanger, poort van ontvanger en adres van afzender, poort van afzender - ik hoop dat dit duidelijk is.

Volgnummer (SYN) - wachtrijnummer of serienummer, toont het volgnummer van het pakket tijdens verzending. Daarom verzamelt het ontvangende systeem pakketten precies zoals ze zouden moeten, en niet in de volgorde waarin ze binnenkwamen.

Acknowledgement Number (ACK) - bevestigingsnummer, laat zien op welk pakket met welke SYN het externe systeem reageert, dus we hebben een idee dat het externe systeem ons pakket met deze gegevens heeft ontvangen
SYN.

Controlebits - 6 bits (in het diagram tussen omgekeerd en venster). Bitwaarden:

URG: dringend aanwijzerveld ingeschakeld
ACK: bevestigingsveld ingeschakeld
PSH: push-functie
RST: Start deze verbinding opnieuw op
SYN: synchronisatie van wachtrijnummers
FIN: geen gegevens meer over te dragen

DATA zijn direct de gegevens die we willen overdragen.

Ik denk dat dit alles is wat je nodig hebt om te beginnen om te begrijpen hoe het protocol werkt. Meer over de betekenis van de overige velden leest u in RFC793. Welnu, we zullen beter begrijpen hoe het in de praktijk werkt.

Wanneer we een verbinding tot stand willen brengen, sturen we een pakket met de volgende structuur naar het externe systeem:

Cliënt - SYN (856779) - Gastheer

Waar de klant ons is en de host het externe systeem is. Zoals je kunt zien, sturen we een pakket dat alleen SYN aangeeft - dit betekent dat dit pakket het eerste is, we reageren nergens op (er is geen ACK). Dit pakket ziet er ongeveer zo uit:

20 53 52 43 00 00 44 45 53 54 00 00 08 00 45 00 00 2C C3 00 40 00 20 06 10 0C CB 5E FD BA CB 5E F3 47 04 07 00 17 00 0D 12 CB 00 00 0 00 60 02 20 00 D9 70 00 00 02 04 05 B4 2D

Het interessante punt is waar SYN vandaan komt. SYN is afgeleid van het initiële wachtrijnummer
(ISN) is een 32-bits getal van 1 tot 4294967295 (2 tot de 32e macht). ISN wanneer het systeem opnieuw wordt opgestart is 1, daarna neemt het elke seconde toe met 128000 (strikt genomen vindt de verandering elke 4 microseconden plaats) + bij elke tot stand gebrachte verbinding neemt het toe met 64000. Het blijkt dat de ISN-uniciteitscyclus, op voorwaarde dat er geen verbindingen zijn werden vastgesteld, bedraagt ​​ongeveer 4,55 uur. Omdat geen enkel pakket zo lang over het netwerk reist, kunnen we ervan uitgaan dat de SYN volledig uniek zal zijn.

Nadat we ons pakket hebben ontvangen, antwoordt het externe systeem dat het het heeft ontvangen en klaar is om een ​​verbinding tot stand te brengen. Het datapakket ziet er als volgt uit:

Host - SYN (758684758) en ACK (856780) - Klant

Zoals u kunt zien, maakt het externe systeem duidelijk dat het ons pakket heeft ontvangen. Om dit te doen, stuurt het ons een ACK met het nummer “onze SYN+1”. Daarnaast stuurt het externe systeem ons zijn SYN (we zullen ook reageren). En ons antwoord zal als volgt zijn:

Cliënt - SYN (856780) en ACK (758684759) - Host

Ik denk dat alles je inmiddels duidelijk moet zijn. Als iemand het niet begrijpt, betekent het pakket het volgende: uw pakket met SYN (758684758) is ontvangen, de verbinding is tot stand gebracht, onze SYN is 856780.

Deze procedure wordt "drievoudige bevestiging" of "drievoudige handshake" genoemd. De eerste twee stappen zijn nodig om de SYN van onze systemen te synchroniseren, en de derde is om te bevestigen dat er synchronisatie heeft plaatsgevonden.

Vervolgens hebben we gegevensuitwisseling, d.w.z. daar is de verbinding voor gemaakt. Bovendien moet worden opgemerkt dat het garanderen van de veiligheid van gegevens die worden verzonden met behulp van het TCP-protocol in alle stadia als volgt wordt uitgevoerd: het verzonden pakket wordt in een buffer geplaatst en als er binnen een bepaalde tijd een bevestigingspakket (ACK) verschijnt niet aankomt vanaf het externe systeem, dan wordt het pakket opnieuw verzonden; als er een bevestiging is ontvangen, wordt het pakket als succesvol verzonden beschouwd en uit de buffer verwijderd.

Welnu, we hebben de verbinding niet meer nodig, we kunnen deze sluiten. Deze fase zal opnieuw plaatsvinden
bestaat uit verschillende fases - ik hoop dat je deze pakketten zelf al kunt lezen.

Klant - FIN(4894376) en ACK (1896955378) - Host

Host - ACK (4894377) - Klant

Host - FIN (1896955378) en ACK (4894377) - Klant

Klant - ACK (1896955378) - Host

Ik denk dat hier niets ingewikkelds aan de hand is. Het enige dat het vermelden waard is, is de FIN-vlag, wat betekent dat u de verbinding wilt verbreken.

Laten we, samenvattend het bovenstaande, noteren in welke gevallen de serienummers wel/niet veranderen:

Verzending van één FIN-pakket = +1
Verzending van één SYN-pakket = +1
Verzending van één ACK-pakket = 0
Verzending van één SYN/ACK-pakket = +1
Verzending van één FIN/ACK-pakket = +1
Verandering in 1 seconde = +128.000
Eén verbinding tot stand brengen = +64.000

Misschien zal iemand vragen: “Wat gebeurt er als de machine een pakket ontvangt met een ACK die er niet was?” (SYN=ACK-1, maar we hebben geen pakket met zo'n SYN verzonden). Nadat we een antwoord hebben gekregen op iets onduidelijks, zullen we op onze beurt reageren op het externe systeem met een NACK-pakket (betekent "Ik weet niet waar je het over hebt", er is geen verbinding tot stand gebracht), maar ik hoop dat de volgende keer zullen we hier uitgebreider met u over praten.

De UDP-header is altijd 64 bits lang. De velden die zijn gedefinieerd in het UDP-segment (zie afbeelding) omvatten het volgende:
1. Bronpoort: bronpoortnummer (16 bits)
2. Bestemmingspoort: bestemmingspoortnummer (16 bits)
3. Berichtlengte: lengte van UDP-header en UDP-gegevens (16 bits)
4. Checksum: berekende checksum van header- en datavelden (16 bits)
5. Gegevens: gegevens van het bovenste laagprotocol (ULP) (variabele lengte)
Voorbeelden van protocollen die UDP gebruiken zijn TFTP, SNMP, Network File System (NFS) en Domain Name System (DNS).

De TCP-header bevat informatie die is gedefinieerd door het TCP-protocol. In deze sectie worden de componenten van de TCP-header beschreven.

TCP-segmenten worden verzonden met behulp van IP-pakketten. De TCP-header volgt de IP-header. Deze scheiding maakt het bestaan ​​van andere protocollen op hostniveau dan TCP mogelijk. TCP-headervelden omvatten het volgende:

Bronpoort: Bronpoortnummer (16 bits)

Bestemmingspoort: Bestemmingspoortnummer (16 bits)

Volgnummer: volgnummer van het eerste octet van de gegevens
segment dat wordt gebruikt om ervoor te zorgen dat binnenkomende gegevens correct worden geordend
(32 bits)

Bevestigingsnummer: volgende verwachte octet
TCP (32-bits)

Lengte header: aantal 32-bits woorden in de header (4 bits)

Gereserveerd: ingesteld op 0 (3 bits)

Besturingsbits: Besturingsfuncties zoals instellen,
overbelasting en sessiebeëindiging (9 bits). Een enkel bitje dat iets bijzonders heeft
een waarde die vaak wordt gezien als een vlag.

Venster: aantal bytes dat het apparaat wil accepteren (16 bits)

Checksum: De berekende checksum van de header en
gegevens (16 bits)

Dringend: geeft het einde van urgente gegevens aan (16 bits)

Opties: Momenteel is er één optie gedefinieerd: maximale grootte
TCP-segment (0 of 32 bits)

Gegevens: gegevens van het bovenste laagprotocol (ULP).
(variabele lengte)

De meesten van ons kennen TCP/IP als de lijm die het internet bij elkaar houdt. Maar weinigen zijn in staat een overtuigende beschrijving te geven van wat dit protocol is en hoe het werkt. Wat is TCP/IP eigenlijk?

TCP/IP is een middel voor het uitwisselen van informatie tussen computers die op een netwerk zijn aangesloten. Het maakt niet uit of ze deel uitmaken van hetzelfde netwerk of verbonden zijn met afzonderlijke netwerken. Het maakt niet uit dat de ene een Cray-computer is en de andere een Macintosh. TCP/IP is een platformonafhankelijke standaard die de kloof overbrugt tussen ongelijksoortige computers, besturingssystemen en netwerken. Het is het protocol dat wereldwijd het internet beheert en grotendeels te danken is aan het TCP/IP-netwerk.

Het begrijpen van TCP/IP houdt vooral in dat je de geheimzinnige protocolsets kunt begrijpen die TCP/IP-hosts gebruiken om informatie uit te wisselen. Laten we eens naar enkele van deze protocollen kijken en ontdekken waaruit de TCP/IP-wrapper bestaat.
TCP/IP-basisbeginselen
TCP/IP is een afkorting voor Transmission Control Protocol/Internet Protocol. In computernetwerkterminologie is een protocol een vooraf overeengekomen standaard waarmee twee computers gegevens kunnen uitwisselen. In feite is TCP/IP niet één protocol, maar meerdere. Dit is de reden waarom je het vaak een suite of een reeks protocollen hoort noemen, waarbij TCP en IP de twee belangrijkste zijn.

De TCP/IP-software op uw computer is een platformspecifieke implementatie van TCP, IP en andere leden van de TCP/IP-familie. Het bevat meestal ook toepassingen op hoog niveau, zoals FTP (File Transfer Protocol), waarmee u het delen van bestanden via internet via de opdrachtregel kunt beheren.

TCP/IP is ontstaan ​​uit onderzoek dat in de jaren zeventig werd gefinancierd door het Advanced Research Project Agency (ARPA) van de Amerikaanse overheid. Dit protocol is ontwikkeld zodat de computernetwerken van onderzoekscentra over de hele wereld met elkaar verbonden konden worden in de vorm van een virtueel "netwerk van netwerken" (internet). Het oorspronkelijke internet is ontstaan ​​door het omzetten van een bestaand conglomeraat van computernetwerken, ARPAnet genaamd, met behulp van TCP/IP.

De reden dat TCP/IP tegenwoordig zo belangrijk is, is dat het zelfstandige netwerken in staat stelt verbinding te maken met internet of te combineren om privé-intranetten te creëren. De computernetwerken waaruit een intranet bestaat, zijn fysiek met elkaar verbonden via apparaten die routers of IP-routers worden genoemd. Een router is een computer die datapakketten van het ene netwerk naar het andere verzendt. Op een op TCP/IP gebaseerd intranet wordt informatie verzonden in afzonderlijke eenheden die IP-pakketten of IP-datagrammen worden genoemd. Dankzij TCP/IP-software worden alle computers die op een computernetwerk zijn aangesloten ‘naaste verwanten’. In wezen verbergt het de routers en de onderliggende netwerkarchitectuur, waardoor het allemaal op één groot netwerk lijkt. Net zoals Ethernet-verbindingen worden geïdentificeerd door 48-bit Ethernet-ID's, worden intranetverbindingen geïdentificeerd door 32-bit IP-adressen, die we uitdrukken in decimale vorm met stippellijnen (bijvoorbeeld 128.10.2.3). Door het IP-adres van een externe computer te nemen, kan een computer op het intranet of internet er gegevens naartoe sturen alsof deze deel uitmaken van hetzelfde fysieke netwerk.

TCP/IP biedt een oplossing voor het dataprobleem tussen twee computers die op hetzelfde intranet zijn aangesloten, maar op verschillende fysieke netwerken. De oplossing bestaat uit verschillende delen, waarbij elk lid van de TCP/IP-protocolfamilie bijdraagt ​​aan het algemene doel. IP, het meest fundamentele protocol in de TCP/IP-suite, transporteert IP-datagrammen over intranetten en voert een belangrijke functie uit die routing wordt genoemd, waarbij in wezen de route wordt gekozen die het datagram van punt A naar punt B zal nemen en routers worden gebruikt om de hoppen daartussen te maken netwerken.

TCP is een protocol op een hoger niveau waarmee toepassingsprogramma's die op verschillende hostcomputers in een netwerk draaien, gegevensstromen kunnen uitwisselen. TCP verdeelt gegevensstromen in ketens die TCP-segmenten worden genoemd en verzendt deze via IP. In de meeste gevallen wordt elk TCP-segment in één IP-datagram verzonden. Indien nodig zal TCP segmenten echter opsplitsen in meerdere IP-datagrammen die passen in de fysieke dataframes die worden gebruikt om informatie tussen computers op het netwerk over te dragen. Omdat IP niet garandeert dat datagrammen in dezelfde volgorde worden ontvangen als waarin ze zijn verzonden, verzamelt TCP TCP-segmenten aan het andere uiteinde van de route opnieuw om een ​​continue gegevensstroom te vormen. FTP en telnet zijn twee voorbeelden van populaire TCP/IP-toepassingen die afhankelijk zijn van het gebruik van TCP.

Een ander belangrijk lid van de TCP/IP-suite is User Datagram Protocol (UDP), dat vergelijkbaar is met TCP, maar primitiever. TCP is een "betrouwbaar" protocol omdat het foutcontrole- en bevestigingsberichten biedt om ervoor te zorgen dat gegevens hun bestemming zonder corruptie bereiken. UDP is een "onbetrouwbaar" protocol omdat het niet garandeert dat datagrammen aankomen in de volgorde waarin ze zijn verzonden, of zelfs dat ze überhaupt aankomen. Als betrouwbaarheid een gewenste voorwaarde is, zal software nodig zijn om deze te implementeren. Maar UDP heeft nog steeds zijn plaats in de TCP/IP-wereld en wordt in veel programma's gebruikt. Het toepassingsprogramma SNMP (Simple Network Management Protocol), geïmplementeerd in veel versies van TCP/IP, is een voorbeeld van UDP-programma's.

Andere TCP/IP-protocollen spelen een minder prominente maar even belangrijke rol bij de werking van TCP/IP-netwerken. Het Address Resolution Protocol (ARP) vertaalt IP-adressen bijvoorbeeld naar fysieke netwerkadressen, zoals Ethernet-identifiers. Een verwant protocol, het Reverse Address Resolution Protocol (RARP), doet het tegenovergestelde en converteert fysieke netwerkadressen naar IP-adressen. Internet Control Message Protocol (ICMP) is een escortprotocol dat IP gebruikt om besturingsinformatie en besturingsfouten uit te wisselen met betrekking tot de verzending van IP-pakketten. Als een router bijvoorbeeld geen IP-datagram kan verzenden, gebruikt hij ICMP om de afzender te informeren dat er een probleem is. Een korte beschrijving van enkele van de andere protocollen die zich onder de TCP/IP-paraplu verbergen, wordt gegeven in de zijbalk.
Korte beschrijving van de TCP/IP-protocolfamilie met afkortingen
ARP (Address Resolution Protocol): Converteert 32-bits IP-adressen naar fysieke netwerkadressen, zoals 48-bit Ethernet-adressen.

FTP (File Transfer Protocol): Hiermee kunt u bestanden van de ene computer naar de andere overbrengen via TCP-verbindingen. Een verwant maar minder gebruikelijk protocol voor bestandsoverdracht, Trivial File Transfer Protocol (TFTP), gebruikt UDP in plaats van TCP om bestanden over te dragen.

ICMP (Internet Control Message Protocol): Hiermee kunnen IP-routers foutmeldingen en controle-informatie naar andere IP-routers en hostcomputers in het netwerk verzenden. ICMP-berichten "reizen" als datavelden van IP-datagrammen en moeten in alle varianten van IP worden geïmplementeerd.

IGMP (Internet Group Management Protocol): Maakt het mogelijk IP-datagrammen te multicasten tussen computers die tot de juiste groepen behoren.

IP (Internet Protocol): Een protocol op laag niveau dat datapakketten routeert over afzonderlijke netwerken die door routers met elkaar zijn verbonden om het internet of intranet te vormen. Gegevens reizen in de vorm van pakketten die IP-datagrammen worden genoemd.

RARP (Reverse Address Resolution Protocol): Converteert fysieke netwerkadressen naar IP-adressen.

SMTP (Simple Mail Transfer Protocol): Definieert het berichtformaat dat een SMTP-client die op de ene computer draait, kan gebruiken om e-mail door te sturen naar een SMTP-server die op een andere computer draait.

TCP (Transmission Control Protocol): Een verbindingsgericht protocol dat gegevens verzendt als stromen van bytes. Gegevens worden verzonden in pakketten - TCP-segmenten - die bestaan ​​uit TCP-headers en gegevens. TCP is een "betrouwbaar" protocol omdat het controlesommen gebruikt om de gegevensintegriteit te verifiëren en bevestigingen verzendt om ervoor te zorgen dat verzonden gegevens zonder corruptie worden ontvangen.

UDP (User Datagram Protocol): Een verbindingsonafhankelijk protocol dat gegevens verzendt in pakketten die UDP-datagrammen worden genoemd. UDP is een "onbetrouwbaar" protocol omdat de afzender geen informatie ontvangt die aangeeft of het datagram daadwerkelijk is ontvangen.
TCP/IP-architectuur

Netwerkontwerpers gebruiken vaak het zevenlaagse ISO/OSI-model (International Standards Organization/Open Systems Interconnect) om de netwerkarchitectuur te beschrijven. Elke laag in dit model komt overeen met één niveau van netwerkfunctionaliteit. Helemaal aan de basis bevindt zich de fysieke laag, die de fysieke omgeving vertegenwoordigt waar gegevens doorheen ‘reizen’ – met andere woorden: het kabelsysteem van het computernetwerk. Daarboven bevindt zich een datalinklaag, of datalinklaag, waarvan de werking wordt verzorgd door netwerkinterfacekaarten. Helemaal bovenaan bevindt zich de applicatieprogrammalaag, waar programma's worden uitgevoerd die gebruik maken van netwerkhulpprogramma's.

De figuur laat zien hoe TCP/IP in het ISO/OSI-model past. Deze figuur illustreert ook de gelaagdheid van TCP/IP en toont de relaties tussen de belangrijkste protocollen. Wanneer een gegevensblok wordt overgedragen van een netwerktoepassing naar een netwerkadapterkaart, gaat het achtereenvolgens door een reeks TCP/IP-modules. Tegelijkertijd wordt bij elke stap de informatie aangevuld die nodig is voor de equivalente TCP/IP-module aan de andere kant van de keten. Tegen de tijd dat de gegevens de NIC bereiken, is het een standaard Ethernet-frame, ervan uitgaande dat het netwerk op die interface is gebaseerd. De TCP/IP-software aan de ontvangende kant reconstrueert de originele gegevens voor het ontvangende programma door het Ethernet-frame vast te leggen en deze achterwaarts door een reeks TCP/IP-modules te sturen. (Een van de beste manieren om de interne werking van TCP/IP te begrijpen is door een spionageprogramma te gebruiken om te zoeken naar informatie die is toegevoegd door verschillende TCP/IP-modules binnen de frames die door het netwerk vliegen.)

De linkerkant van dit diagram toont de lagen van het ISO/OSI-model. De rechterkant van het diagram illustreert de correlatie van TCP/IP met dit model.

Om de rol te illustreren die TCP/IP speelt in echte computernetwerken, moet u eens kijken wat er gebeurt als een webbrowser HTTP (HyperText Transfer Protocol) gebruikt om een ​​pagina met HTML-gegevens op te halen van een webserver die met internet is verbonden. Om een ​​virtuele verbinding met de server tot stand te brengen, gebruikt de browser een software-abstractie op hoog niveau, een socket genaamd. En om een ​​webpagina op te halen, stuurt het een GET HTTP-commando naar de server en schrijft het naar de socket. De socketsoftware gebruikt op zijn beurt TCP om de bits en bytes waaruit de GET-opdracht bestaat, naar de webserver te sturen. TCP segmenteert de gegevens en geeft de afzonderlijke segmenten door aan de IP-module, die de segmenten in datagrammen doorstuurt naar de webserver.

Als de browser en server draaien op computers die met verschillende fysieke netwerken zijn verbonden (zoals meestal het geval is), worden datagrammen van netwerk naar netwerk doorgegeven totdat ze het netwerk bereiken waarmee de server fysiek is verbonden. Uiteindelijk bereiken de datagrammen hun bestemming en worden ze opnieuw samengesteld, zodat de webserver, die de dataketens uit zijn socket leest, een continue stroom gegevens ontvangt. Voor de browser en de server verschijnen gegevens die naar de socket aan de ene kant worden geschreven, op magische wijze aan de andere kant. Maar tussen deze gebeurtenissen vinden allerlei complexe interacties plaats die de illusie creëren van voortdurende gegevensoverdracht tussen computernetwerken.

En dat is vrijwel alles wat TCP/IP doet: vele kleine netwerken in één groot netwerk veranderen en de diensten leveren die applicatieprogramma's nodig hebben om via het resulterende internet met elkaar te communiceren.
Korte conclusie

Er valt nog veel meer te zeggen over TCP/IP, maar er zijn drie belangrijke punten:
TCP/IP is een reeks protocollen waarmee fysieke netwerken met elkaar kunnen worden verbonden om het internet te vormen. TCP/IP verbindt individuele netwerken om een ​​virtueel computernetwerk te vormen, waarin individuele hostcomputers niet worden geïdentificeerd aan de hand van fysieke netwerkadressen, maar aan de hand van IP-adressen.
TCP/IP maakt gebruik van een gelaagde architectuur die duidelijk beschrijft wat elk protocol doet. TCP en UDP bieden hulpprogramma's voor gegevensoverdracht op hoog niveau voor netwerkprogramma's, en beide zijn afhankelijk van IP om datapakketten te transporteren. IP is verantwoordelijk voor het routeren van pakketten naar hun bestemming.
Gegevens die worden verplaatst tussen twee applicatieprogramma's die op internethosts draaien, 'reizen' op en neer door de TCP/IP-stacks op die hosts. De informatie die door de TCP/IP-modules aan de verzendende kant wordt toegevoegd, wordt door de overeenkomstige TCP/IP-modules aan de ontvangende kant "geknipt" en gebruikt om de originele gegevens opnieuw te creëren.

internet Protocol. De IP-module is het basiselement van internettechnologie. Het centrale deel is de routetabel. De routetabel wordt ingevuld door de netwerkbeheerder en wordt doorgaans geïnitialiseerd tijdens het opstarten van het systeem. Als het om een ​​eenvoudig lokaal IP-netwerk gaat, voegt het IP-protocol weinig toe aan Ethernet-diensten, behalve dat alle toepassingen die voor IP-technologie zijn geïmplementeerd op het netwerk zullen draaien. De situatie verandert echter als het gaat om netwerken die zijn verbonden door een gateway.

ProtocolRIP (Routing Informatie Protocol). Het protocol is ontworpen om de routetabel automatisch bij te werken. Hierbij wordt gebruik gemaakt van informatie over de status van het netwerk, die door routers wordt verzonden. Volgens het RIP-protocol kan elke machine een router zijn. In dit geval zijn alle routers verdeeld in actief en passief. Actieve routers rapporteren de routes die ze op het netwerk ondersteunen. Passieve routers lezen deze broadcastberichten en corrigeren hun routeringstabellen, maar verstrekken de informatie niet zelf aan het netwerk. Doorgaans fungeren gateways als actieve routers, en gewone machines (hosts) als passieve routers.

UDP-protocol. Dit protocol is een van de twee belangrijkste transportprotocollen die zich net boven IP bevinden. UDP voegt twee velden toe aan de IP-pakketheader: poort en controlesom. Met het veld “poort” kunt u informatie tussen verschillende applicatieprocessen multiplexen. Het controlesomveld helpt de gegevensintegriteit te behouden

TCP-protocol. Biedt een andere berichtbezorgingsmethode dan UDP. In plaats van een "onbetrouwbare" verbindingsloze levering van datagrammen, biedt TCP gegarandeerde verbindingsloze levering van bytestromen.

Applicatieprogramma's communiceren ook via poorten met de TCP-module. Er zijn poortnummers gedefinieerd door de standaard die worden toegewezen voor het onderhouden van standaard internetdiensten. Telnet wordt dus bediend via poort 23, mail (SMTP) - via 25, enz.

Wanneer twee processen via TCP-modules beginnen te communiceren, houden deze modules informatie over de verbindingsstatus bij, een virtueel kanaal genoemd. Het kanaal is duplex, d.w.z. informatie kan tegelijkertijd in twee richtingen worden verzonden.

Volgens het TCP-protocol wordt de bytestroom in pakketten verdeeld. Alle gegevens naar de TCP-module worden weergegeven als een stroom bytes. Aan de andere kant van het virtuele kanaal worden de gegevens opnieuw samengevoegd tot een stroom. De TCP-module handhaaft de scheiding van gegevensstromen in records niet. U kunt dus 5 records van elk 80 bytes naar het kanaal schrijven en er één van 400 bytes lang lezen

Gedetailleerde beschrijving van het TCP-protocol

TCP (Transmission Control Protocol) is ontworpen als een communicatieprotocol om interactieve werking tussen computers mogelijk te maken. TCP zorgt voor de betrouwbaarheid en betrouwbaarheid van gegevensuitwisseling tussen processen op computers die deel uitmaken van een gemeenschappelijk netwerk. TCP interageert enerzijds met het applicatieprotocol van de gebruikersapplicatie, en anderzijds met een protocol dat “low-level” -functies biedt: routering en adressering van pakketten, die in de regel worden uitgevoerd door IP .

In het besturingssysteem is de TCP-implementatie een afzonderlijke systeemmodule (driver), waardoor in de regel alle oproepen naar de protocolfuncties passeren. De interface tussen een applicatieproces en TCP is een bibliotheek met oproepen, net zoals de bibliotheek met systeemaanroepen bijvoorbeeld voor het werken met bestanden. U kunt een verbinding openen of sluiten (vergelijkbaar met het openen of sluiten van een bestand) en gegevens verzenden of ontvangen van een tot stand gebrachte verbinding (vergelijkbaar met het lezen en schrijven van een bestand). TCP-oproepen kunnen asynchroon met de applicatie werken. Natuurlijk kan de TCP-implementatie van elk systeem veel van zijn eigen functies implementeren, maar elk van deze implementaties moet de minimale functionaliteit bieden die vereist is door de TCP-standaarden.

Het schema van hoe een gebruikersapplicatie met TCP werkt, is in algemene termen als volgt. Om gegevens naar een gebruikersproces over te dragen, moet u de juiste TCP-functie aanroepen, die de buffer van de overgedragen gegevens aangeeft. TCP verpakt deze gegevens in segmenten van zijn stapel en roept de overdrachtsfunctie van het protocol op de lagere laag aan, zoals IP.

Aan de andere kant groepeert de TCP-ontvanger de gegevens die zijn ontvangen van het protocol van de lagere laag in de ontvangende segmenten van zijn buffer, controleert de integriteit van de gegevens, geeft de gegevens door aan het gebruikersproces en brengt de afzender op de hoogte van de ontvangst ervan.

De TCP-gebruikersinterface kan opdrachten uitvoeren zoals OPEN of CLOSE een verbinding, SEND- of RECEIVE-gegevens, of STATUS verkrijgen. Deze aanroepen zijn vergelijkbaar met alle andere functieaanroepen van het besturingssysteem vanuit een gebruikersprogramma, zoals het openen, lezen of sluiten van een bestand.

In het internetwerkmodel is de interactie tussen TCP en protocollen uit de lagere lagen over het algemeen niet gespecificeerd, behalve dat er een mechanisme moet zijn waarmee informatie asynchroon van de ene laag naar de andere kan worden overgedragen. Het effect van dit mechanisme is dat een protocol van een hoger niveau wordt ingekapseld in de hoofdtekst van een protocol van een lager niveau. Dit mechanisme wordt geïmplementeerd via de oproepinterface tussen TCP en IP.

Als resultaat van dit mechanisme wordt elk TCP-pakket ingesloten in een “envelop” van een protocol op een lager niveau, bijvoorbeeld IP. Het resulterende datagram bevat een TCP-pakket op dezelfde manier als een TCP-pakket gebruikersgegevens bevat.

Het eenvoudigste model van hoe het TCP-protocol werkt, ziet er bedrieglijk soepel uit, omdat het echte werk in feite vol zit met veel details en subtiliteiten.

De logische structuur van netwerksoftware die TCP/IP-familieprotocollen in elk internetknooppunt implementeert, wordt getoond in Fig. 2.12.

De rechthoeken vertegenwoordigen de gegevensverwerking en de lijnen die de rechthoeken verbinden vertegenwoordigen gegevenspaden. De horizontale lijn onderaan de afbeelding vertegenwoordigt een Ethernet-kabel, die wordt gebruikt als voorbeeld van een fysiek medium. Het begrijpen van deze logische structuur is de basis voor het begrijpen van alle TCP/IP-technologie.

Rijst. 2.12. Structuur van netwerksoftware van de TCP/IP-protocolfamilie

 Datastromen, protocolstack, socketmechanisme en verbindingsmultiplexing

 Procedure voor het tot stand brengen van de verbinding en gegevensoverdracht

 Mechanismen om de betrouwbaarheid van verzonden gegevens te garanderen

 Mechanisme voor gegevensstroomcontrole

 Vlag van pakketbelang, protocolbeveiligingsfuncties

Transport laag

De taak van de transportlaag is om gegevens over te dragen tussen verschillende applicaties die op alle netwerkknooppunten draaien. Nadat het pakket via IP bij de ontvangende computer is afgeleverd, moeten de gegevens naar een speciaal ontvangersproces worden verzonden. Elke computer kan meerdere processen uitvoeren en een applicatie kan meerdere toegangspunten hebben die als bestemming voor datapakketten fungeren.

Pakketten die aankomen op de transportlaag van het besturingssysteem worden georganiseerd in meerdere wachtrijen bij de ingangspunten van verschillende applicaties. In TCP/IP-terminologie worden deze toegangspunten poorten genoemd.

Transmissiecontroleprotocol

Transmissiecontroleprotocol(TCP) (Transmission Control Protocol) is een verplicht protocol van de TCP/IP-standaard, gedefinieerd in RFC 793, "Transmission Control Protocol (TCP)".

TCP is een transportlaagprotocol dat zorgt voor transport (transmissie) van een datastroom, waarbij eerst een verbinding tot stand moet worden gebracht, waardoor het vertrouwen in de integriteit van de ontvangen gegevens wordt gegarandeerd, en dat ook een herhaald verzoek om gegevens uitvoert in geval van gegevensverlies of corruptie. Bovendien controleert het TCP-protocol dubbele pakketten en vernietigt het, indien gedetecteerd, dubbele pakketten.

In tegenstelling tot het UDP-protocol garandeert het de integriteit van de verzonden gegevens en de bevestiging door de afzender van de resultaten van de overdracht. Gebruikt bij bestandsoverdrachten waarbij het verlies van één pakket het hele bestand kan beschadigen.

TCP bereikt zijn betrouwbaarheid door:

  • Gegevens uit de applicatie worden opgedeeld in blokken van een bepaalde grootte die worden verzonden.
  • Wanneer TCP een segment verzendt, wordt een timer ingesteld, die wacht op een bevestiging van dat segment vanaf de externe kant. Als er na het verstrijken van de tijd geen bevestiging wordt ontvangen, wordt het segment opnieuw verzonden.
  • Wanneer TCP gegevens ontvangt van de externe kant van de verbinding, verzendt het een bevestiging. Deze bevestiging wordt niet onmiddellijk verzonden, maar wordt meestal een fractie van een seconde vertraagd.
  • TCP berekent een controlesom voor zijn header en gegevens. Dit is een controlesom die wordt berekend aan de uiteinden van de verbinding en die tot doel heeft elke wijziging in de gegevens tijdens de verzending te detecteren. Als een segment arriveert met een onjuiste controlesom, verwijdert TCP dit en wordt er geen bevestiging gegenereerd. (Er wordt verwacht dat de afzender een time-out krijgt en opnieuw verzendt.)
  • Omdat TCP-segmenten als IP-datagrammen worden verzonden en IP-datagrammen willekeurig kunnen aankomen, kunnen TCP-segmenten ook willekeurig aankomen. Na ontvangst van de gegevens kan TCP deze indien nodig opnieuw rangschikken, zodat de applicatie de gegevens in de juiste volgorde ontvangt.
  • Omdat een IP-datagram kan worden gedupliceerd, moet de ontvangende TCP de gedupliceerde gegevens verwijderen.
  • TCP biedt stroomcontrole. Elke kant van een TCP-verbinding heeft een specifieke bufferruimte. TCP aan de ontvangende kant zorgt ervoor dat de externe kant alleen gegevens kan verzenden als de ontvanger deze in een buffer kan passen. Dit voorkomt dat langzame hosts hun buffers overstromen met snelle hosts.

  • Het volgnummer dient twee doelen:
    • Als de SYN-vlag is ingesteld, is dit de initiële waarde van het volgnummer - ISN (Initial Sequence Number), en de eerste byte aan gegevens die in het volgende pakket wordt verzonden, heeft een volgnummer gelijk aan ISN + 1.
    • Anders, als SYN niet is ingesteld, heeft de eerste byte aan gegevens die in een bepaald pakket wordt verzonden dit volgnummer.
  • Bevestigingsnummer - Als de ACK-vlag is ingesteld, bevat dit veld het volgnummer dat de ontvanger de volgende keer verwacht. Markeert dit segment als ontvangstbevestiging.
  • De headerlengte wordt gespecificeerd in 32-bits woorden.
  • Venstergrootte is het aantal bytes dat de ontvanger zonder bevestiging kan ontvangen.
  • Checksum - omvat pseudo-header, header en gegevens.
  • Urgentie-indicator - geeft de laatste byte aan urgente gegevens aan waarop onmiddellijk moet worden gereageerd.
  • URG - urgentievlag, bevat het veld "Urgency Indicator"; indien =0, wordt het veld genegeerd.
  • ACK - bevestigingsvlag, bevat het veld "Bevestigingsnummer", indien =0 wordt het veld genegeerd.
  • PSH - de vlag vereist een push-operatie, de TCP-module moet het pakket dringend naar het programma overbrengen.
  • RST - verbindingsonderbrekingsvlag, gebruikt om een ​​verbinding te weigeren
  • SYN - volgnummersynchronisatievlag, gebruikt bij het tot stand brengen van een verbinding.
  • FIN - einde van de transmissievlag vanaf de kant van de afzender

Laten we eens kijken naar de headerstructuur TCP met behulp van Wireshark-netwerkanalysator:


TCP-poorten

Omdat er meerdere programma's op dezelfde computer kunnen draaien, wordt voor het afleveren van een TCP-pakket aan een specifiek programma de unieke identificatie of poortnummer van elk programma gebruikt.

Poortnummer is een voorwaardelijk 16-bits getal van 1 tot 65535 dat aangeeft voor welk programma het pakket bedoeld is.

TCP-poorten gebruiken een specifieke programmapoort om gegevens te leveren die worden verzonden met behulp van het Transmission Control Protocol (TCP). TCP-poorten zijn complexer en werken anders dan UDP-poorten. Terwijl een UDP-poort fungeert als een enkele berichtenwachtrij en als toegangspunt voor een UDP-verbinding, is het uiteindelijke toegangspunt voor alle TCP-verbindingen een unieke verbinding. Elke TCP-verbinding wordt uniek geïdentificeerd door twee toegangspunten.

Elke individuele TCP-serverpoort kan gedeelde toegang tot meerdere verbindingen bieden, omdat alle TCP-verbindingen worden geïdentificeerd door twee waarden: een IP-adres en een TCP-poort (socket).

Alle TCP-poortnummers die kleiner zijn dan 1024 zijn gereserveerd en geregistreerd bij de Internet Assigned Numbers Authority (IANA).

UDP- en TCP-poortnummers overlappen elkaar niet.

TCP-programma's gebruiken gereserveerde of bekende poortnummers, zoals weergegeven in de volgende afbeelding.

Een TCP-verbinding tot stand brengen

Laten we nu kijken hoe TCP-verbindingen tot stand komen. Stel dat een proces dat op de ene host draait, een verbinding tot stand wil brengen met een ander proces op een andere host. Bedenk dat de host die de verbinding initieert de "client" wordt genoemd, terwijl de andere host de "server" wordt genoemd.

Voordat er gegevens kunnen worden verzonden, moeten de partijen volgens het TCP-protocol een verbinding tot stand brengen. De verbinding wordt in drie fasen tot stand gebracht (TCP-proces "triple handshake").

  • De aanvrager (meestal de client genoemd) verzendt een SYN-segment dat het poortnummer aangeeft van de server waarmee de client verbinding wil maken, en het originele volgnummer (ISN) van de client.
  • De server antwoordt met zijn SYN-segment dat het originele volgnummer van de server bevat. De server bevestigt ook de aankomst van de SYN van de client met behulp van ACK (ISN + 1). Per SYN wordt één volgnummer gebruikt.
  • De cliënt moet de aankomst van een SYN van de server bevestigen met zijn SYN-segmenten die het originele volgnummer van de cliënt bevatten (ISN+1) en met behulp van een ACK (ISN+1). De SYN-bit wordt op 0 gezet omdat de verbinding tot stand is gebracht.

Zodra de TCP-verbinding tot stand is gebracht, kunnen deze twee hosts gegevens naar elkaar verzenden. Omdat de TCP-verbinding full-duplex is, kunnen ze tegelijkertijd gegevens verzenden.