TCP
Wikipedia
TCP/IP-protokollia (keskimmäiset kolme kerrosta) |
|
---|---|
sovellukset | esim. selain (sisältö HTML, XML, MIME) |
sovelluskerros | HTTP, SMTP, POP, IMAP, FTP, IRC, Telnet, SIP, RTSP, RTP, SNMP ... |
kuljetuskerros | TCP, UDP, SCTP, DCCP (tukena: DNS, OSPF, BGP) |
verkkokerros | IP, ARP, DHCP, ICMP, IGMP IPv6, IPsec, Mobile IPv6, SSM... |
peruskerros | esim. IEEE 802 -lähiverkot, PPP, Frame Relay, MPLS, GPRS |
TCP (lyhenne sanoista Transmission Control Protocol) on tietoliikenneprotokolla, jolla luodaan yhteyksiä tietokoneiden välille, joilla on pääsy Internettiin. TCP-yhteyksien avulla tietokoneet voivat lähettää toisilleen tavujonoja luotettavasti. TCP-protokolla pitää myös huolta, että paketit saapuvat perille oikeassa järjestyksessä. Tarvittaessa hävinnyt paketti voidaan lähettää uudestaan. Tätä tarkoitusta varten TCP-protokollaan on kehitetty erilaisia vuonvalvonta- ja ruuhkanhallintamekanismeja. Suurin osa Internetin liikenteestä perustuu TCP-protokollaan ja koko TCP/IP-protokollaperhe on saanut nimensä TCP-protokollan perusteella.
Esimerkiksi WWW-sivujen hakeminen tehdään siten, että selaimen ja palvelimen välille muodostetaan TCP-yhteys, jossa selain voi lähettää tavujonoja palvelimelle ja palvelin tavujonoja selaimelle.
TCP:n paikka OSI-mallissa on kuljetuskerroksessa.
Uudempia TCP:n kanssa samantyyppistä palvelua tarjoavia protokollia ovat
- SCTP - parempi luotettavuus, mm. mahdollisuus useisiin vaihtoehtoisiin rinnakkaisyhteyksiin
- RTP - reaaliaikainen tiedonsiirto esimerkiksi puhetta (VoIP) varten
TCP:ssä on haavoittuvuuksia, jotka mahdollistavat mm. TCP-kaappauksen.
Sisällysluettelo |
[muokkaa] TCP-yhteys
TCP-yhteys sisältää kolme vaihetta. Yhteyden muodostaminen, tiedon siirto sekä yhteyden katkaisu.
[muokkaa] Yhteyden muodostaminen
Yhteyden muodostamiseen käytetään kolmitiekättelyä. Kolmitiekättelyssä asiakaspään laite lähettää ensiksi serveripään laitteelle SYN-paketin, seuraavaksi serveripään laitteen pitäisi vastata SYN/ACK-paketilla. Lopuksi asiakaspään laite vastaa ACK-paketilla ja päättää kolmitiekättelyn ja datan siirto voi alkaa.
[muokkaa] Tiedonsiirto
Tiedon siirtovaiheen aikana useat eri mekanismit varmistavat datan eheyden. Näitä mekanismeja ovat sekvenssinumerointi TCP-pakettien järjestyksen varmistamiseksi, tarkistussummat virheiden tarkistusta varten sekä ajastimet ja tunnistimet hukatuille paketeille ja viiveelle. Yhteyden muodostuksen aikana yhteyden välillä jaetaan sekvenssinumerot joiden perusteella datavirrasta tunnistetaan kullekin yhteydelle kuuluvat paketit. Jokaisesta vastaanotetusta TCP-paketista lähetetään kuittaus lähettäjälle. Jos kuittausta ei tule, paketti lähetetään uudestaan.
[muokkaa] Yhteyden päättäminen
Yhteys päätetään nelitiekättelyllä. Yhteyden molemmat osapuolet katkaisevat yhteyden erikseen. Molemmat lähettävät FIN-paketin ja molemmat kuittaavat sen ACK-paketilla.
Yhteys voidaan päättää myös kolmitie kättelyllä. Toinen osapuoli lähettää FIN-paketin, jonka toinen osapuoli kuittaa FIN-ACK paketilla. Tämän jälkeen ensimmäinen osapuoli lähettää ACK-paketin.
Yhteys voidaan myös keskeyttää suoraan jommankumman osapuolen toimesta lähettämällä RESET-valitsimella varustettu paketti. Tämä toimenpide on ilmaisu katkaista yhteys heti eikä vastauspaketteja lähetetä.
[muokkaa] Ruuhkanhallinta
Pakettien katoaminen johtuu yleensä ruuhkasta Internetin reitittimillä. Näissä tilanteissa reitittimelle saapuu enemmän paketteja kuin mitä se ehtii välittämään eteenpäin. Kun reitittimen puskuri täyttyy, ylimääräiset paketit joudutaan hylkäämään. Jos datan lähettäjä tällaisessa tapauksessa vain itsepintaisesti uudelleenlähettäisi paketit, se lisäisi reitittimen ruuhkaa entisestään. Tätä varten TCP-protokollaan on kehitetty ruuhkanhallintamekanismeja. TCP-protokollan ruuhkanhallintamekanismit ovat pitäneet Internetin käyttökelpoisena, vaikka liikenteen määrä on räjähdysmäisesti kasvanut vuosien saatossa. Osa ruuhkanhallintamekanismeista on standardisoitu (RFC 2581: TCP Congestion Control).
Oleellisia TCP:n ruuhkanhallinta-algoritmeja:
- Hidas aloitus (slow start) (RFC 2581)
- Ruuhkan välttely (Congestion avoidance) (RFC 2581)
- Nopea toipuminen (Fast retransmit/fast recovery) (RFC 2581)
- NewReno (RFC 2582)
- SACK TCP -optio (Selective Acknowledgements, RFC 2018)
[muokkaa] TCP-kehys
(Pituus on 32-bitin monikerta)
+ | 0 - 3 | 4 - 9 | 10 - 15 | 16 - 31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Lähdeportti | Kohdeportti | ||||||||||||||||||||||||||||||
32 | Järjestysnumero | |||||||||||||||||||||||||||||||
64 | Kuittausnumero | |||||||||||||||||||||||||||||||
96 | Otsikon pituus | Reserved | Liput | Ikkunan koko | ||||||||||||||||||||||||||||
128 | Tarkistussumma | Kiirellisyysosoitin | ||||||||||||||||||||||||||||||
160 | Optiot ja täyte | |||||||||||||||||||||||||||||||
192 | Data |
[muokkaa] TCP-protokollan päälle rakennettuja protokollia
- HTTP (WWW-sivut)
- SMTP (sähköpostin välitys)
- Telnet (pääteyhteys Internetin ylitse)
- SSH (salattu pääteyhteys Internetin ylitse ja tiedoston siirto)
- FTP (tiedoston siirto Internetin ylitse)
Nämä palvelut valitaan porttinumeron perusteella. Tämä mekanismi on yhteinen UDP-protokollan kanssa.
Useimmat näistä protokollista ovat täysin selväkielistä keskustelua tietokoneiden välillä. Esimerkiksi SMTP- ja HTTP-palvelimien kanssa voi "keskustella" telnet-pääteohjelmalla samoin kuin minkä tahansa komentorivipohjaisen sovelluksen kanssa.
[muokkaa] Standardointi
TCP on IP-protokolla numero 6. IP-porttien numerointi löytyy artikkelista portti.