TCP

Wikipediasta
Siirry navigaatioon Siirry hakuun
TCP/IP-pino
sovelluskerros

sovelluskerros
BGP · DHCP · DNS · ESMTP · FTP · HTTP · IMAP · IRC · LDAP · MGCP · NNTP · NTP · POP3 · RPC · RTP · RTSP · SIP · SMTP · SNMP · SOCKS · SSH · Telnet · TLS/SSL · XMPP
kuljetuskerros

kuljetuskerros
TCP · UDP · DCCP · SCTP · RSVP · RIP · ECN
verkkokerros

verkkokerros
IP (IPv4 ja IPv6) · ICMP · ICMPv6 · IGMP · IPsec
siirtokerros ARP · IS-IS · NDP · OSPF · L2TP · PPP

TCP (lyhenne sanoista Transmission Control Protocol) on tietoliikenneprotokolla tietokoneiden väliseen luotettavaan tiedonsiirtoon.[1] Toisin kuin IP- tai UDP-protokollat TCP sisältää mekanismeja vikatilanteesta toipumiseen.[1]

TCP-yhteyksien avulla tietokoneet voivat lähettää toisilleen tavujonoja luotettavasti. TCP pitää myös huolta, että paketit saapuvat perille oikeassa järjestyksessä. Tarvittaessa hävinnyt paketti voidaan lähettää uudestaan. Tätä tarkoitusta varten TCP:hen on kehitetty erilaisia vuonvalvonta- ja ruuhkanhallintamekanismeja. Suurin osa Internetin liikenteestä perustuu TCP:hen ja koko TCP/IP-protokollaperhe on saanut nimensä TCP:n 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

Historia[muokkaa | muokkaa wikitekstiä]

Varhaiset versiot TCP/IP protokollapinosta on kuvattu Internet Experiment Note (IEN) dokumenteissa: IEN 2 -dokumentissa TCP-protokollan tehtävät jaetaan kahtia eri kerroksiin ja esitellään IP-protokollan versio 0.[2] TCP:n vastuulle jää "päästä-päähän" tapahtuva kommunikaatio ja IP:n vastuulle reititettävä "hyppy-hypyltä" kommunikaatio, jotka aiemmin olivat molemmat TCP:n tehtäviä.[2]

TCP-yhteys[muokkaa | muokkaa wikitekstiä]

Kolmitiekättely.

TCP-yhteys sisältää kolme vaihetta. Yhteyden muodostaminen, tiedonsiirto sekä yhteyden katkaisu.

Yhteyden muodostaminen[muokkaa | muokkaa wikitekstiä]

Yhteyden muodostamiseen käytetään kolmitiekättelyä, jossa yhteyden aloittajan laite lähettää ensiksi kohdelaitteelle SYN-paketin (SYNchronization) ja kohdelaitteen saatua SYN-paketin vastaan laite vastaa aloittajalle SYN/ACK-paketilla (ACKnowledgement) merkkinä että SYN-paketti on saapunut. Lopuksi aloittajalaite vastaa kohdelaitteelle ACK-paketilla merkiksi, että on ottanut kohdelaitteen SYN/ACK-paketin vastaan.

Tiedonsiirto[muokkaa | muokkaa wikitekstiä]

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.

Yhteyden päättäminen[muokkaa | muokkaa wikitekstiä]

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 kolmitiekä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.

Yhteyden voi myös katkaista suoraan jompikumpi osapuoli lähettämällä RESET-valitsimella varustetun paketin. Toimenpide on ilmaisu katkaista yhteys heti, eikä vastauspaketteja lähetetä.

Ruuhkanhallinta[muokkaa | muokkaa wikitekstiä]

Pakettien katoaminen johtuu yleensä ruuhkasta internetin reitittimillä. Näissä tilanteissa reitittimelle saapuu enemmän paketteja kuin 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ä vain itsepintaisesti uudelleenlähettäisi paketit, se lisäisi reitittimen ruuhkaa entisestään. Sitä varten TCP:hen on kehitetty ruuhkanhallintamekanismeja. Ruuhkanhallintamekanismit ovat pitäneet internetin käyttökelpoisena, vaikka liikenteen määrä on kasvanut vuosien saatossa räjähdysmäisesti. Osa ruuhkanhallintamekanismeista on standardisoitu.

Oleellisia TCP:n ruuhkanhallinta-algoritmeja:

TCP-kehys[muokkaa | muokkaa wikitekstiä]

(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 Kiireellisyysosoitin
160 Optiot ja täyte
192
Data

TCP:n päälle rakennettuja protokollia[muokkaa | muokkaa wikitekstiä]

Nämä palvelut valitaan porttinumeron perusteella. Tämä mekanismi on yhteinen UDP:n 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.

Standardointi[muokkaa | muokkaa wikitekstiä]

TCP on IP numero 6. IP-porttien numerointi löytyy artikkelista portti.

IP-paketti.png
  • RFC 675 – Specification of Internet Transmission Control Program (1974)
  • RFC 793 – Transmission Control Protocol (1981)
  • STD 7 – Transmission Control Protocol, Protocol specification
  • RFC 2018 – TCP Selective Acknowledgment Options
  • RFC 5681 – TCP Congestion Control
  • RFC 6247 – vanhentuneiden dokumenttien siirto historillisiksi
  • RFC 6298 – Computing TCP's Retransmission Timer
  • RFC 6528 – Defending Against Sequence Number Attacks (korvaa: RFC 1948)
  • RFC 6824 – TCP Extensions for Multipath Operation with Multiple Addresses
  • RFC 7323 – TCP Extensions for High Performance (korvaa: RFC 1323)
  • RFC 7414 – A Roadmap for TCP Specification Documents
  • RFC 7805 – vanhentuneiden dokumenttien siirto historillisiksi

Haavoittuvuudet[muokkaa | muokkaa wikitekstiä]

TCP:ssä on haavoittuvuuksia, jotka mahdollistavat mm. TCP-kaappauksen.

Katso myös[muokkaa | muokkaa wikitekstiä]

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. a b Fall, Kevin R. & Stevens, W. Richard: TCP/IP Illustrated, Volume 1. Second Edition. Addison-Wesley. ISBN 978-0-321-33631-6.
  2. a b Jon Postel: IEN 2, Comments on Internet Protocol and TCP rfc-editor.org. 15. elokuuta 1977. Viitattu 23.5.2019. (englanniksi)