TCP/IP je zásobník protokolů, který je základem internetu a většiny počítačových sítí. Spojuje protokol TCP, zodpovědný za spolehlivé doručení dat, a IP, který zajišťuje směrování paketů mezi uzly. Podle údajů IETF RFC 1180 (2024) zpracovává zásobník TCP/IP více než 80 % světového síťového provozu, včetně mobilních a webových aplikací. Zásobník protokolů určuje, jak jsou data zabalena, adresována a přenášena mezi zařízeními v síti.
Hlavní body
TCP/IP (Transmission Control Protocol / Internet Protocol) je zásobník protokolů vyvinutý v 70. letech 20. století pro ARPANET, který se stal de facto standardem pro globální internetovou síť. Určuje, jak jsou data rozdělena na pakety, adresována, přenášena a sestavována na straně příjemce.
Architektura TCP/IP je postavena na vícevrstvém principu, kde každá vrstva abstrahuje určité funkce. Aplikační vrstva pracuje s daty aplikace, transportní vrstva zajišťuje spolehlivost, síťová vrstva se stará o směrování a linková vrstva o přenos fyzickým médiem. Modularita umožňuje výměnu protokolů v rámci vrstvy bez změny sousedních vrstev.
V mobilním vývoji je TCP/IP používán každou aplikací, která provádí síťové požadavky. Knihovny URLSession, OkHttp, AFNetworking a Alamofire pracují na tomto zásobníku a skrývají před vývojářem detaily balení a směrování paketů. Porozumění TCP/IP je však nezbytné pro optimalizaci výkonu: konfigurace parametrů TCP prostřednictvím URLSessionConfiguration umožňuje správu časových limitů, udržování HTTP Persistent Connections a nastavení proxy pro podniková prostředí.
Porozumění TCP/IP je nezbytné pro diagnostiku síťových problémů: pokud se aplikace nemůže připojit k serveru, problém může být v jakékoli vrstvě zásobníku — od fyzického kanálu po aplikační protokol. Nástroje jako tcpdump, Wireshark a Charles Proxy umožňují analýzu provozu na každé vrstvě a nalezení úzkých míst. Pro mobilní vývojáře poskytuje Xcode Network Debug Dashboard a Android Studio Network Inspector pro analýzu TCP spojení v reálném čase.
Model TCP/IP zahrnuje čtyři vrstvy, z nichž každá plní přesně definované funkce při přenosu dat. Porozumění této hierarchii je nezbytné pro diagnostiku síťových problémů a optimalizaci aplikací.
Na aplikační vrstvě pracují protokoly, se kterými aplikace přímo interagují: HTTP, HTTPS, FTP, SMTP, DNS, WebSocket. Tato vrstva formátuje data do podoby srozumitelné aplikaci a předává je transportní vrstvě. Vývojáři mobilních aplikací pracují právě na této vrstvě prostřednictvím síťových knihoven.
Transportní vrstva zajišťuje přenos dat mezi aplikacemi na různých zařízeních. Hlavní protokoly: TCP (spolehlivý přenos s potvrzením) a UDP (rychlý přenos bez záruk). TCP přidává k datům port odesílatele a příjemce, spravuje pořadí paketů a řídí přetížení sítě.
Síťová vrstva je implementována protokolem IP, který určuje adresování (IPv4, IPv6) a směrování paketů. Každý paket obsahuje IP adresu odesílatele a příjemce a směrovače na cestě přenosu rozhodují o dalším uzlu na základě směrovacích tabulek. IPv4 používá 32bitové adresy (přibližně 4,3 miliardy) a IPv6 používá 128bitové adresy, což řeší problém vyčerpání adres.
Linková vrstva pracuje s fyzickým přenosovým médiem: Ethernet, Wi-Fi, Bluetooth. Tato vrstva převádí pakety na signály a naopak, spravuje přístup k přenosovému médiu prostřednictvím MAC adres a detekuje chyby fyzické vrstvy pomocí kontrolních součtů rámců (FCS).
Na linkové vrstvě pracují protokoly jako ARP (Address Resolution Protocol), který převádí IP adresy na MAC adresy zařízení v lokální síti, a PPP (Point-to-Point Protocol), používaný v VPN spojeních a mobilních sítích pro přenos dat.
| Vrstva | Protokoly | Funkce |
|---|---|---|
| Aplikační | HTTP, HTTPS, DNS, FTP, WebSocket | Formátování dat aplikace |
| Transportní | TCP, UDP | Přenos mezi aplikacemi, kontrola chyb |
| Síťová | IP, ICMP, ARP | Směrování a adresování paketů |
| Linková | Ethernet, Wi-Fi, PPP | Přenos fyzickým médiem |
TCP (Transmission Control Protocol) je jedním z hlavních protokolů transportní vrstvy. Zajišťuje spolehlivé, uspořádané a ověřitelné doručení proudu bajtů mezi aplikacemi. Před přenosem dat TCP naváže spojení pomocí třícestného potřesení rukou.
Třícestné potřesení rukou (three-way handshake) začíná odesláním paketu SYN klientem. Server odpovídá paketem SYN-ACK, potvrzujícím přijetí. Klient dokončí potřesení rukou paketem ACK, načež začíná přenos dat. Tento proces garantuje, že obě strany jsou připraveny k výměně a synchronizovány z hlediska pořadových čísel.
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('example.com', 80))
sock.send(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n')
response = sock.recv(4096)
print(response.decode())
sock.close()
V příkladu se vytváří TCP socket typu SOCK_STREAM, který automaticky provádí třícestné potřesení rukou při volání connect. Metoda send odesílá HTTP požadavek, recv přijímá odpověď. Po dokončení close odesílá paket FIN pro správné ukončení spojení.
Podívejme se na příklad TCP serveru v Pythonu, který přijímá více klientů pomocí vláken. Každé spojení je zpracováváno v samostatném vlákně, což umožňuje obsluhovat mnoho klientů současně bez blokování hlavní smyčky.
import socket
import threading
def handle_client(conn, addr):
print(f'Klient připojen: {addr}')
with conn:
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data.upper())
print(f'Klient {addr} odpojen')
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 9090))
server.listen(5)
print('TCP server spuštěn na portu 9090')
while True:
conn, addr = server.accept()
thread = threading.Thread(target=handle_client, args=(conn, addr))
thread.start()
TCP server zpracovává každé spojení v samostatném vlákně a volá accept v nekonečné smyčce. Funkce handle_client přijímá data, převádí je na velká písmena a odesílá zpět pomocí sendall. Po ukončení smyčky recv (když klient uzavře spojení) vlákno končí a socket se automaticky uzavírá. V mobilních aplikacích se taková nízkoúrovňová práce se sockety nepoužívá přímo — mobilní HTTP knihovny spravují spojení pomocí fondů vláken a automaticky znovu využívají TCP spojení.
Volba mezi TCP a UDP je jedním z klíčových rozhodnutí při návrhu síťové interakce. TCP garantuje doručení, pořadí a integritu dat za cenu dodatečného zpoždění. UDP obětuje spolehlivost pro minimální zpoždění a nižší zatížení kanálu.
| Vlastnost | TCP | UDP |
|---|---|---|
| Spojení | Navazuje (handshake) | Nenavazuje |
| Spolehlivost | Garantuje doručení | Negarantuje |
| Pořadí paketů | Uspořádává | Neuspořádává |
| Rychlost | Nižší | Vyšší |
| Použití | Web, email, soubory | Streamování, hry, DNS |
Pro mobilní aplikace závisí volba protokolu na scénáři: REST-API a stahování dat vyžadují TCP, zatímco videohovory a online hry těží z rychlosti UDP. Některé aplikace kombinují oba protokoly — TCP pro řízení a UDP pro mediální tok. Moderní protokol QUIC, který pracuje nad UDP a je používán v HTTP/3, kombinuje výhody obou přístupů a je již automaticky podporován na iOS a Androidu prostřednictvím URLSession.
Podívejme se na příklad TCP klienta v Pythonu se zpracováním chyb a časovým limitem. Tento přístup se používá v mobilních aplikacích pro spolehlivé připojení k serveru.
import socket
import sys
def tcp_client(host, port):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect((host, port))
print(f'Připojeno k {host}:{port}')
return sock
except socket.error as err:
print(f'Chyba připojení: {err}')
sys.exit(1)
sock = tcp_client('api.example.com', 443)
sock.close()
Funkce tcp_client přijímá hostitel a port, vytváří socket s časovým limitem 10 sekund a pokouší se připojit. Při chybě připojení — například nedostupnosti serveru nebo blokaci firewallem — je vyvolána výjimka s popisem problému. V mobilních aplikacích je časový limit připojení kritický: příliš krátký vede k falešným chybám v pomalých sítích, příliš dlouhý k zamrznutí rozhraní. Doporučená hodnota pro mobilní sítě je 10–15 sekund pro timeoutIntervalForRequest a 30–60 sekund pro timeoutIntervalForResource v konfiguraci URLSession.
Často kladené otázky
IP je zodpovědný za směrování — doručení paketu od odesílatele k příjemci přes mezilehlé uzly. TCP zajišťuje spolehlivé sestavení dat: kontroluje pořadí, ověřuje integritu a požaduje opakovaný přenos ztracených paketů. Společně tvoří zásobník TCP/IP.
TCP/IP nepoužívá pevný port — port je přidělen aplikací. Standardní porty: 80 (HTTP), 443 (HTTPS), 22 (SSH), 25 (SMTP). Port 443 je hlavní pro zabezpečený webový provoz v mobilních aplikacích.
TCP spojení je logický kanál mezi dvěma aplikacemi, navázaný prostřednictvím třícestného potřesení rukou (SYN, SYN-ACK, ACK). Spojení je identifikováno dvojicí (IP adresa, port) odesílatele a příjemce. Potřesení rukou garantuje, že obě strany jsou připraveny k výměně dat.
Ano, TCP/IP funguje v lokálních sítích (LAN) bez přístupu k internetu. Zařízení se připojují přes Wi-Fi Direct, Bluetooth PAN nebo Ethernet a vyměňují si data prostřednictvím lokálních IP adres. Lokální TCP/IP se používá v IoT zařízeních a peer-to-peer aplikacích.
TCP je pomalejší kvůli dalším mechanismům: třícestné potřesení rukou před přenosem, potvrzování každého paketu, opakované odesílání ztracených segmentů, řízení přetížení. UDP odesílá datagramy bez těchto kontrol, což snižuje zpoždění za cenu možných ztrát.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také