Onderstaande toelichting is als onderdeel van het artikel
Connection Tracking
gepubliceerd in het septembernummer van
Linux News, jaargang 2001.
Toelichting TCP/IP protocolsuite
Bart Jan Kelter
Iedere
IP
verbinding is herkenbaar aan de combinatie client ip-adres,
client poortnummer, server ip-adres en server poortnummer.
TCP
TCP staat voor Transaction Control protocol.
Bij dit type verbinding is er
sprake van een connectie waarbij de status binnen het protocol gedefinieerd is.
Een TCP connectie wordt opgebouwd in drie stappen. De client kiest
een vrij poortnummer, doorgaans boven de 1023. De client probeert een
connectie te maken naar een bekend, doorgaans laag, poortnummer op de
server. Voorbeelden van bekende poortnummers zijn 80 voor HTTP, 23 voor
Telnet en 22 voor SSH. De client stuurt een pakket waarbij de SYN-vlag
is gezet naar het bekende poortnummer op de server en gebruikt daarbij
het zojuist gekozen hoge poortnummer. Wanneer de server akkoord gaat
met het opzetten van de connectie stuurt deze een pakketje met zowel de
SYN-vlag als de ACK-vlag gezet terug naar het hoge poortnummer van de
client. Dit pakket wordt weer door de client weer beantwoord met een ACK,
echter zonder SYN. De connectie is nu tot stand gekomen.
De status is nu ESTABLSHED.
Client Server
SYN --->
<--- SYN+ACK
ACK --->
Het beëindigen van een connectie kan op twee manieren gebeuren. Een
normale beëindiging vindt plaats wanneer de client een pakket stuurt
waarbij de FIN en de ACK vlag gezet zijn.
De server beantwoordt dit met een
ACK of FIN+ACK.
Client Server
FIN+ACK --->
<--- ACK
<--- FIN+ACK
ACK --->
Een connectie kan ook beëindigd worden wanneer een van de partijen een
pakket met de RST vlag stuurt. Dit gebeurt vaak wanneer na een periode
van inactiviteit een van de partijen er van uit gaat dat de ander niet
meer geïnteresseerd is in voortzetting van de connectie. maar ook wanneer
een connectie om een of andere redden geweigerd wordt. Een RST wordt
niet bevestigd met een ACK.
UDP
Bij UDP, User Datagram Protocol, is er op netwerk protocol niveau geen
sprake van een connectie. De applicaties die dit protocol gebruiken zijn
zelf verantwoordelijk voor het bewaken van de status en de kwaliteit
van de verbinding. Net als bij TCP maakt de client doorgaans gebruik
van een hoog poortnummer en de server van een bekend laag poortnummer.
ICMP
ICMP is het Internet Control Message Protocol. Het dient om berichten die
verband houden met een goed functioneren van het IP protocol, of een van
de bovenliggende protocollen, door te geven. Er zijn 18 verschillende
bericht types, waarbinnen weer diverse bericht codes mogelijk zijn. De
bekendste toepassing is het ping commando, dat een ICMP `echo request'
(type 8 code 0) stuurt. Een echo request wordt beantwoord door een
`echo reply' (type 0 code 0).
FTP
FTP is het File Transfer Protocol. Het maakt gebruik van TCP, net zoals
HTTP of Telnet. Het bijzondere aan FTP is dat het gebruik maakt van
meerdere connecties. Een client maakt contact met poort 21 op de
server. Wanneer er data verkeer plaats moet vinden, dit kan een file
upload of download zijn, maar ook het resultaat van een ls of dir,
wordt er een aparte data connectie geopend. De client geeft daartoe
aan de server een hoog poortnummer door waarop het de data connectie
verwacht. De data connectie wordt opgezet door de server vanaf poort 20,
naar het poortnummer dat de client doorgegeven heeft.
Een variant hierop is passive FTP. Hierbij geeft de server een hoog
poortnummer op aan de client en opent de client de data connectie vanaf
een hoog poortnummer naar de server.
|