Jason: In deze les
gaan we het hebben over IP-protocoltypes,
waaronder TCP, UDP en de concepten
van verbindingsloze versus verbindingsgerichte
methoden.
Wat is TCP nu eigenlijk?
TCP is een transmissiecontroleprotocol.
Het is een verbindingsgeoriënteerd protocol,
wat betekent dat het een betrouwbare
manier is om segmenten over ons netwerk te transporteren.
Als er nu een segment wordt gedropt,
zal het protocol elke keer om bevestiging
vragen.
En als het die bevestiging niet krijgt, gaat
het dat stukje informatie opnieuw versturen.
Daarom noemen we dit een verbindingsvol protocol omdat het een
soort tweerichtingsverkeer heeft waarbij ik je informatie
stuur en ik verifieer of je het
echt hebt ontvangen door te luisteren of
je het hebt ontvangen en je mij een antwoord geeft.
Laten we nu even kijken naar dit kleine
diagram hier op het scherm.
Je zult zien dat ik links een client
heb en rechts een server.
Nu stuurt de client een zogenaamd syn pakket,
of synchronisatie pakket,
naar de server.
Als de server dat ontvangt,
stuurt hij een synchronisatiebevestiging
terug naar de client, bekend als een syn ack.
Als de client die bevestiging krijgt, stuurt
hij zijn eigen bevestiging terug naar de server.
Dit staat bekend als de ack.
Als we nu deze syn, syn ack, ack doen, dan
noemen we dit een driezijdige handdruk.
In wezen is het de client die zegt: "Hé
server, ben je klaar om informatie te krijgen? En dan zegt de server: "Natuurlijk.
Waarom niet?
"Stuur me wat informatie. En de klant zegt:
"Oké, hier komt het. En dan begint de transmissie omdat we
die driezijdige handdruk hebben
vastgesteld en we weten dat beide kanten
klaar zijn om te communiceren.
"Ben je er klaar voor? "Ja, dat
ben ik. "Hier komt
het. Elke keer dat deze gegevens, die
we een segment noemen, over het netwerk worden
verzonden, wordt er een bevestiging
ontvangen die ons vertelt dat er succesvolle
communicatie in twee richtingen heeft
plaatsgevonden.
Als deze server verwacht 100
stukjes informatie te krijgen,
maar er maar 98 van krijgt, zal hij tegen
de client zeggen: "Hé,
je zei dat je me 100 dingen zou sturen, "maar je hebt
er maar 98 gestuurd.
"Stuur me die twee dingen die ik mis. En dan vindt er een hertransmissie
plaats.
Op deze manier kan de
communicatie voor ons verlopen en kunnen
we er altijd zeker van
zijn dat we krijgen wat we zouden
moeten krijgen, omdat we de pakketten opnieuw
over het netwerk sturen.
Nu wordt dit gebruikt voor alle netwerkgegevens
waarvan verzekerd moet worden dat ze op hun eindbestemming komen.
Ik zie dit als een soort aangetekende post.
Als ik bijvoorbeeld een bericht naar de belastingdienst wil sturen, wil
ik er zeker van zijn dat ze het krijgen
en dat het niet zoekraakt in de post.
Dus ik betaal misschien wat extra geld voor een gewaarmerkt
ontvangstbewijs dat ze moeten ondertekenen
als het daar aankomt, en dat wordt dan naar mij
teruggestuurd.
Op deze manier weet ik,
als ik dat bonnetje terugkrijg,
dat de belastingdienst mijn postpakket heeft ontvangen.
Zo werkt TCP.
Aan de andere kant hebben
we een ander protocol dat bekend staat als UDP.
UDP is wat we noemen een verbindingsloos protocol, wat betekent
dat het niet hoeft te wachten op verbindingen.
UDP staat voor User Datagram Protocol.
En de reden waarom we het een datagram
noemen is omdat je dit soort gegevens gebruikt
als je UDP gebruikt.
Het heet een datagram.
Als we het nu over UDP hebben, UDP is onbetrouwbaar
en het verzendt segmenten die datagrammen
worden genoemd.
En als ze worden gedropt,
weet de afzender niet eens dat het is gebeurd.
Nu, waarom zou ik dingen willen verzenden waarvan
de afzender niet op de hoogte is en ik
geen enkele vorm van ontvangst krijg?
Welnu, UDP is echt goed voor audio en visuele streaming omdat je veel gegevens
verstuurt en er veel minder overhead is
wanneer je UDP gebruikt, omdat we niet die constante
driewegs handdruk hebben om het tot stand
te brengen en we niet alle
checks and balances hebben die geassocieerd
worden met het gebruik van TCP.
Dus door UDP te gebruiken kun
je de prestaties van je netwerk echt verhogen
omdat je geen heruitzendingen hebt.
Uiteindelijk laat je alleen maar informatie vallen.
Is dat niet slecht?
Waarom zouden we informatie willen laten vallen?
Nou, voor bepaalde toepassingen
maakt het echt niet uit.
Je streamt nu bijvoorbeeld deze video.
En als ik 1/100 van een seconde weg zou vallen,
zou je het dan merken?
Nou, dat zou je waarschijnlijk
niet en daarom is UDP zo goed omdat we hier
1/100 van de tijd kunnen laten vallen en je zult het eigenlijk
nooit merken en er zal geen heruitzending
plaatsvinden.
Maar met TCP zal het leiden tot veel meer
bufferen omdat je moet wachten, en het
dan opnieuw naar je toegestuurd
moet krijgen, en het dan op de juiste
plaats moet zetten, en het dan
moet afspelen.
En dus, vanwege die erkenning en die overhead,
wordt deze video voor elke seconde uiteindelijk
veel groter en gebruikt hij veel meer
bandbreedte.
En dat is een van de belangrijkste
redenen waarom we UDP gebruiken voor het streamen van video en audio.
Laten we nu een korte samenvatting geven van TCP versus UDP.
Want dit is echt een heel belangrijk concept.
Als je nu je aantekeningen bij de hand hebt, zou
ik deze grafiek opschrijven die
ik je nu ga vertellen terwijl
we het hebben over TCP versus UDP.
Omdat het echt zo belangrijk is.
Ten eerste is TCP betrouwbaar, het heeft een
drie-wegs handdruk, waar
UDP niet erg betrouwbaar is.
Het is een onbetrouwbaar protocol
omdat er geen driewegs handdruk is.
TCP is wat we noemen een verbindingsgeoriënteerd
of een verbindingsvol protocol omdat
we die driewegs handdruk
hebben in de bevestigingen,
maar UDP is verbindingsloos.
Het is een methode van vuur en vergeten.
Ik begin gewoon informatie
te sturen en hopelijk krijg je die.
TCP gebruikt segment heruitzending en flow control dat wordt
afgehandeld door windowing.
UDP daarentegen kent
geen hertransmissie en geen windowing.
Met TCP hebben we segmentatie
van onze opeenvolging van al onze verschillende
segmenten.
Met UDP is er geen opeenvolging.
Wat dit betekent is dat als ik alles verstuur,
ik het in de juiste volgorde verstuur, van
één tot honderd.
Ik doe dit voor zowel TCP als UDP.
Nu, als je een aantal van die stukjes
mist, of ze komen in een andere
volgorde aan omdat ze een ander pad nemen over
het netwerk, met TCP zijn
ze in volgorde, dus het
weet dat je er één naar 1000 hebt en
het zet ze terug in de juiste volgorde.
Met UDP, hoe ze ook
binnenkomen, dat is hoe
het wordt uitgezonden.
En dus kan het komen
in één, 50, twee,
500, drie, vier, vijf,
zes, 20, in elke willekeurige volgorde.
En zo zul je het horen.
Dus bij video kan het zijn dat je een beetje springerigheid
hoort, of een beetje hoge piepjes, of iets
dergelijks, omdat een
van die frames misschien niet in de juiste volgorde staat.
Als we nu teruggaan naar
TCP, zal het elk van deze segmenten erkennen.
En dus hebben we erkenning.
Als ik het niet krijg,
weet ik dat ik het niet
kreeg en kan ik het opnieuw naar me toe laten zenden
en het dan opnieuw krijgen.
Met UDP is er geen bevestiging.
Dus nogmaals, UDP heeft veel minder overhead omdat
er geen verbinding is,
geen windowing, geen heruitzending,
geen sequencing en geen bevestiging.
Als je nu iets daar moet krijgen en je wilt
er zeker van zijn dat de persoon het heeft gekregen,
dan moet je echt TCP gebruiken als het protocol van je keuze.
En daarom gaan we TCP echt gebruiken voor dingen
als bankieren en websites en e-commerce en dat
soort dingen.
Maar als we iets hebben dat veel data bevat,
zoals audio of video streaming, dan
doet UDP het daar erg goed mee omdat we niet
elk stukje van dat bestand
hoeven te ontvangen.
We kunnen hier en daar een stukje
overslaan, en dat is prima.
-: [Een andere docent] Nu, als het gaat om TCP en UDP,
hebben we het gehad over het feit dat dit verbindingsvolle
of verbindingsgeoriënteerde protocollen
zijn, en verbindingsloze protocollen.
Ik zal je een paar voorbeelden geven
van protocollen die TCP of UDP gebruiken, zodat je begrijpt
waarom we ze allebei gebruiken.
Laten we eerst eens
kijken naar TCP en onze
verbindingsgeoriënteerde of verbindingsvolle protocollen.
Dit omvat dingen als SSH en HTTP of HTTPS.
Waarom zouden we in deze gevallen verbindingsgericht moeten zijn?
Nou, in het geval ik iets als SSH gebruik, doe ik
aan communicatie in twee richtingen en
controle van een server of werkstation op afstand,
en dat kan ik doen via poort 22.
Ik wil er zeker van zijn dat ik dat
op een verbindingsgerichte of verbindingsvolle manier doe.
Op die manier, als ik een commando verstuur en zeg,
reboot de server, weet ik
dat dat commando er echt is gekomen en dat
de server opnieuw wordt opgestart.
Op dezelfde manier, als we te maken hebben met HTTPS, willen
we er zeker van zijn dat we een verbindingsvol
of verbindingsgeoriënteerd protocol hebben dat TCP gebruikt.
De reden hiervoor is, nogmaals,
dat we er zeker van willen zijn dat
wat we verzenden ook echt ontvangen wordt.
En dat kunnen dingen zijn als authenticatie wanneer
we proberen in te loggen op een website
met onze gebruikersnaam en wachtwoord,
of misschien is het de informatie
die we terugkrijgen van die website,
zoals ons rekeningsaldo en onze bankgegevens.
Aan de andere kant,
als we UDP als protocol gebruiken, hebben
we te maken met een verbindingsloze manier.
Nu heb ik al gezegd dat
we dit altijd gebruiken
voor dingen als audio en video streaming.
Maar daarnaast gebruiken
we het ook voor dingen als DHCP en het Trivial
File Transfer Protocol, bekend als TFTP.
Nu, als je het je
herinnert, wordt DHCP gebruikt als het Dynamic Host Control
Protocol en het werkt over poort 67 en 68.
Wanneer je lid wordt van een netwerk,
zal je apparaat, als het is ingesteld
voor een dynamische toewijzing van zijn IP-adres,
een broadcast-bericht uitzenden op dat netwerk op zoek
naar een DHCP-server.
En daarom gebruiken we het als een verbindingsloos protocol.
Want als die informatie wordt verstuurd en niemand reageert, zal je klant
die informatie gewoon opnieuw versturen in de hoop
dat iemand anders er wel zal zijn.
Zo werkt DHCP.
Er wordt een broadcast-bericht verzonden
en er wordt gewacht op een antwoord.
Als het geen antwoord krijgt
binnen een bepaalde tijd,
zal het eenvoudigweg zijn bericht opnieuw uitzenden
en opnieuw een nieuwe DHCP server zoeken.
TFTP of het Trivial File Transfer
Protocol, dat werkt op poort
69, werkt op een verbindingsloze
manier met UDP als transport.
De reden hiervoor
is dat TFTP het Trivial File Transfer Protocol is, en daarom hoeven
we niet de zekerheid te hebben dat elk pakket
verzonden en ontvangen is met die bevestigingen,
en dat zorgt voor veel meer
overhead als we TCP gebruiken.
Dus door UDP te gebruiken, kunnen
we een snellere bestandsoverdracht
hebben als we iets als TFTP gebruiken, in
plaats van een protocol met meer verbindingen, zoals FTP.