TCP/IP је стек протокола који представља темељ интернета и већине рачунарских мрежа. Он обједињује протокол TCP, одговоран за поуздану доставу података, и IP, који обезбеђује усмеравање пакета између чворова. Према подацима IETF RFC 1180 (2024), стек TCP/IP обрађује више од 80% светског мрежног саобраћаја, укључујући мобилне и веб апликације. Стек протокола одређује како се подаци пакују, адресирају и преносе између уређаја у мрежи.
Главно
TCP/IP (Transmission Control Protocol / Internet Protocol) је стек протокола развијен 1970-их година за ARPANET, који је постао де факто стандард за глобалну интернет мрежу. Он одређује како се подаци деле на пакете, адресирају, преносе и састављају на страни примаоца.
Архитектура TCP/IP је изграђена на вишеслојном принципу, где сваки слој апстрахује одређене функције. Апликативни слој ради са подацима апликације, транспортни обезбеђује поузданост, мрежни се бави усмеравањем, а канални преносом кроз физички медијум. Модуларност омогућава замену протокола унутар слоја без промене суседних слојева.
У мобилном развоју, TCP/IP користи свака апликација која обавља мрежне захтеве. Библиотеке URLSession, OkHttp, AFNetworking и Alamofire раде на овом стеку, скривајући од програмера детаље паковања и усмеравања пакета. Међутим, разумевање TCP/IP је неопходно при оптимизацији перформанси: подешавање TCP параметара кроз URLSessionConfiguration омогућава управљање тајм-аутима, одржавање HTTP Persistent Connections и подешавање проксија за корпоративна окружења.
Разумевање TCP/IP је неопходно за дијагностику мрежних проблема: ако апликација не може да се повеже са сервером, проблем може бити на било ком слоју стека — од физичког канала до апликативног протокола. Алати попут tcpdump, Wireshark и Charles Proxy омогућавају анализу саобраћаја на сваком слоју и проналажење уских грла. За мобилне програмере, Xcode пружа Network Debug Dashboard, а Android Studio — Network Inspector за анализу TCP веза у реалном времену.
Модел TCP/IP укључује четири слоја, од којих сваки обавља строго одређене функције при преносу података. Разумевање ове хијерархије је неопходно за дијагностику мрежних проблема и оптимизацију апликација.
На апликативном слоју раде протоколи са којима апликације директно интерагују: HTTP, HTTPS, FTP, SMTP, DNS, WebSocket. Овај слој обликује податке у формату разумљивом апликацији и прослеђује их транспортном слоју. Програмери мобилних апликација раде управо на овом слоју кроз мрежне библиотеке.
Транспортни слој обезбеђује пренос података између апликација на различитим уређајима. Главни протоколи: TCP (поуздан пренос са потврдом) и UDP (брз пренос без гаранција). TCP додаје подацима порт пошиљаоца и примаоца, управља редоследом пакета и контролише загушеност мреже.
Мрежни слој се реализује протоколом IP, који одређује адресирање (IPv4, IPv6) и усмеравање пакета. Сваки пакет садржи IP адресу пошиљаоца и примаоца, а рутери на путу преноса доносе одлуку о следећем чвору на основу таблица усмеравања. IPv4 користи 32-битне адресе (око 4,3 милијарде), а IPv6 — 128-битне, што решава проблем исцрпљивања адреса.
Канални слој ради са физичким медијумом преноса: Ethernet, Wi-Fi, Bluetooth. Овај слој претвара пакете у сигнале и обрнуто, управља приступом медијуму преноса преко MAC адреса и открива грешке физичког слоја помоћу контролних сума оквира (FCS).
На каналном слоју раде протоколи попут ARP (Address Resolution Protocol), који претвара IP адресе у MAC адресе уређаја у локалној мрежи, и PPP (Point-to-Point Protocol), који се користи у VPN везама и мобилним мрежама за пренос података.
| Слој | Протоколи | Функција |
|---|---|---|
| Апликативни | HTTP, HTTPS, DNS, FTP, WebSocket | Обликовање података апликације |
| Транспортни | TCP, UDP | Пренос између апликација, контрола грешака |
| Мрежни | IP, ICMP, ARP | Усмеравање и адресирање пакета |
| Канални | Ethernet, Wi-Fi, PPP | Пренос кроз физички медијум |
TCP (Transmission Control Protocol) је један од главних протокола транспортног слоја. Он обезбеђује поуздану, уређену и проверљиву доставу тока бајтова између апликација. Пре преноса података, TCP успоставља везу кроз трофазно руковање.
Трофазно руковање (three-way handshake) почиње слањем SYN пакета од стране клијента. Сервер одговара SYN-ACK пакетом, потврђујући пријем. Клијент завршава руковање ACK пакетом, након чега почиње пренос података. Овај процес гарантује да су обе стране спремне за размену и синхронизоване по редним бројевима.
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()
У примеру се креира TCP сокет типа SOCK_STREAM, који аутоматски изводи трофазно руковање при позиву connect. Метода send шаље HTTP захтев, recv прима одговор. Након завршетка, close шаље FIN пакет за коректно затварање везе.
Размотримо пример TCP сервера у Python-у који прихвата више клијената кроз нити. Свака веза се обрађује у посебној нити, што омогућава истовремено опслуживање више клијената без блокирања главне петље.
import socket
import threading
def handle_client(conn, addr):
print(f'Клијент повезан: {addr}')
with conn:
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data.upper())
print(f'Клијент {addr} искључен')
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 9090))
server.listen(5)
print('TCP сервер покренут на порту 9090')
while True:
conn, addr = server.accept()
thread = threading.Thread(target=handle_client, args=(conn, addr))
thread.start()
TCP сервер обрађује сваку везу у посебној нити, позивајући accept у бесконачној петљи. Функција handle_client прима податке, претвара их у велика слова и шаље назад путем sendall. По завршетку recv петље (када клијент затвори везу), нит се завршава и сокет се аутоматски затвара. У мобилним апликацијама, такав нисконивоаски рад са сокетима се не користи директно — мобилне HTTP библиотеке управљају везама кроз групе нити и аутоматски поново користе TCP везе.
Избор између TCP и UDP је једна од кључних одлука при пројектовању мрежне интеракције. TCP гарантује доставу, редослед и интегритет података по цену додатних кашњења. UDP жртвује поузданост ради минималног кашњења и мањег оптерећења канала.
| Карактеристика | TCP | UDP |
|---|---|---|
| Веза | Успоставља (handshake) | Не успоставља |
| Поузданост | Гарантује доставу | Не гарантује |
| Редослед пакета | Уређује | Не уређује |
| Брзина | Нижа | Виша |
| Примена | Веб, email, датотеке | Стриминг, игре, DNS |
За мобилне апликације, избор протокола зависи од сценарија: REST-API и учитавање података захтевају TCP, а видео позиви и онлајн игре имају користи од брзине UDP. Неке апликације комбинују оба протокола — TCP за управљање и UDP за медијски ток. Савремени протокол QUIC, који ради преко UDP и користи се у HTTP/3, комбинује предности оба приступа и већ је подржан на iOS и Android-у кроз URLSession аутоматски.
Размотримо пример TCP клијента у Python-у са обрадом грешака и тајм-аутом. Овај приступ се користи у мобилним апликацијама за поуздано повезивање са сервером.
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'Повезан на {host}:{port}')
return sock
except socket.error as err:
print(f'Грешка повезивања: {err}')
sys.exit(1)
sock = tcp_client('api.example.com', 443)
sock.close()
Функција tcp_client прима хост и порт, креира сокет са тајм-аутом од 10 секунди и покушава да се повеже. При грешци повезивања — на пример, недоступности сервера или блокирању firewall-а — баца се изузетак са описом проблема. У мобилним апликацијама, тајм-аут повезивања је критичан: прекратак доводи до лажних грешака на спорим мрежама, предуг до замрзавања интерфејса. Препоручена вредност за мобилне мреже је 10–15 секунди за timeoutIntervalForRequest и 30–60 секунди за timeoutIntervalForResource у конфигурацији URLSession.
Често постављана питања
IP је одговоран за усмеравање — доставу пакета од пошиљаоца до примаоца кроз посредне чворове. TCP обезбеђује поуздано састављање података: контролише редослед, проверава интегритет и захтева поновни пренос изгубљених пакета. Заједно чине стек TCP/IP.
TCP/IP не користи фиксни порт — порт додељује апликација. Стандардни портови: 80 (HTTP), 443 (HTTPS), 22 (SSH), 25 (SMTP). Порт 443 је главни за безбедан веб саобраћај у мобилним апликацијама.
TCP веза је логички канал између две апликације, успостављен кроз трофазно руковање (SYN, SYN-ACK, ACK). Веза се идентификује паром (IP адреса, порт) пошиљаоца и примаоца. Руковање гарантује да су обе стране спремне за размену података.
Да, TCP/IP ради у локалним мрежама (LAN) без приступа интернету. Уређаји се повезују преко Wi-Fi Direct, Bluetooth PAN или Ethernet-а и размењују податке преко локалних IP адреса. Локални TCP/IP се користи у IoT уређајима и peer-to-peer апликацијама.
TCP је спорији због додатних механизама: трофазно руковање пре преноса, потврђивање сваког пакета, поновно слање изгубљених сегмената, контрола загушења. UDP шаље датаграме без ових провера, што смањује кашњење по цену могућих губитака.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође