TCP/IP là một ngăn xếp giao thức tạo nên nền tảng của Internet và hầu hết các mạng máy tính. Nó kết hợp giao thức TCP, chịu trách nhiệm phân phối dữ liệu đáng tin cậy và IP, đảm bảo định tuyến gói giữa các nút. Theo IETF RFC 1180 (2024), ngăn xếp TCP/IP xử lý hơn 80% lưu lượng mạng toàn cầu, bao gồm cả ứng dụng di động và web. Ngăn xếp giao thức xác định cách dữ liệu được đóng gói, định địa chỉ và truyền giữa các thiết bị trong mạng.
Những điểm chính
TCP/IP (Transmission Control Protocol / Internet Protocol) là một ngăn xếp giao thức được phát triển vào những năm 1970 cho ARPANET và đã trở thành tiêu chuẩn thực tế cho Internet toàn cầu. Nó xác định cách dữ liệu được chia thành các gói, định địa chỉ, truyền và tập hợp lại ở phía người nhận.
Kiến trúc TCP/IP được xây dựng trên nguyên tắc đa tầng, trong đó mỗi tầng trừu tượng hóa các chức năng cụ thể. Tầng ứng dụng xử lý dữ liệu ứng dụng, tầng vận chuyển đảm bảo độ tin cậy, tầng mạng xử lý định tuyến và tầng liên kết quản lý truyền vật lý. Tính mô-đun cho phép thay thế giao thức trong một tầng mà không ảnh hưởng đến các tầng lân cận.
Trong phát triển di động, TCP/IP được sử dụng bởi mọi ứng dụng thực hiện yêu cầu mạng. Các thư viện như URLSession, OkHttp, AFNetworking và Alamofire hoạt động trên ngăn xếp này, ẩn chi tiết đóng gói và định tuyến gói khỏi nhà phát triển. Tuy nhiên, hiểu TCP/IP là cần thiết để tối ưu hóa hiệu suất: cấu hình tham số TCP thông qua URLSessionConfiguration cho phép quản lý thời gian chờ, duy trì Kết nối HTTP Liên tục và thiết lập proxy cho môi trường doanh nghiệp.
Hiểu TCP/IP là cần thiết để chẩn đoán sự cố mạng: nếu ứng dụng không thể kết nối với máy chủ, vấn đề có thể nằm ở bất kỳ tầng nào của ngăn xếp — từ kênh vật lý đến giao thức ứng dụng. Các công cụ như tcpdump, Wireshark và Charles Proxy cho phép phân tích lưu lượng ở mỗi tầng và tìm ra điểm nghẽn. Đối với nhà phát triển di động, Xcode cung cấp Bảng điều khiển Gỡ lỗi Mạng (Network Debug Dashboard) và Android Studio cung cấp Trình kiểm tra Mạng (Network Inspector) để phân tích kết nối TCP theo thời gian thực.
Mô hình TCP/IP bao gồm bốn tầng, mỗi tầng thực hiện các chức năng được xác định chặt chẽ trong quá trình truyền dữ liệu. Hiểu hệ thống phân cấp này là cần thiết để chẩn đoán sự cố mạng và tối ưu hóa ứng dụng.
Ở tầng ứng dụng, các giao thức mà ứng dụng tương tác trực tiếp hoạt động: HTTP, HTTPS, FTP, SMTP, DNS, WebSocket. Tầng này định dạng dữ liệu theo cách ứng dụng hiểu và chuyển nó đến tầng vận chuyển. Các nhà phát triển ứng dụng di động làm việc ở tầng này thông qua thư viện mạng.
Tầng vận chuyển đảm bảo truyền dữ liệu giữa các ứng dụng trên các thiết bị khác nhau. Các giao thức chính là TCP (truyền đáng tin cậy với xác nhận) và UDP (truyền nhanh không đảm bảo). TCP thêm cổng người gửi và người nhận vào dữ liệu, quản lý thứ tự gói và kiểm soát tắc nghẽn mạng.
Tầng mạng được triển khai bởi giao thức IP, xác định địa chỉ (IPv4, IPv6) và định tuyến gói. Mỗi gói chứa địa chỉ IP của người gửi và người nhận, và các bộ định tuyến dọc đường đi đưa ra quyết định về nút tiếp theo dựa trên bảng định tuyến. IPv4 sử dụng địa chỉ 32 bit (khoảng 4,3 tỷ), trong khi IPv6 sử dụng địa chỉ 128 bit, giải quyết vấn đề cạn kiệt địa chỉ.
Tầng liên kết làm việc với phương tiện truyền vật lý: Ethernet, Wi-Fi, Bluetooth. Tầng này chuyển đổi gói thành tín hiệu và ngược lại, quản lý truy cập vào phương tiện truyền thông qua địa chỉ MAC và phát hiện lỗi tầng vật lý bằng cách sử dụng chuỗi kiểm tra khung (FCS).
Ở tầng liên kết, các giao thức như ARP (Giao thức Phân giải Địa chỉ), chuyển đổi địa chỉ IP thành địa chỉ MAC của thiết bị trong mạng cục bộ và PPP (Giao thức Điểm-Điểm), được sử dụng trong kết nối VPN và mạng dữ liệu di động, hoạt động.
| Tầng | Giao thức | Chức năng |
|---|---|---|
| Ứng dụng | HTTP, HTTPS, DNS, FTP, WebSocket | Định dạng dữ liệu ứng dụng |
| Vận chuyển | TCP, UDP | Truyền giữa các ứng dụng, kiểm soát lỗi |
| Mạng | IP, ICMP, ARP | Định tuyến và định địa chỉ gói |
| Liên kết | Ethernet, Wi-Fi, PPP | Truyền qua phương tiện vật lý |
TCP (Transmission Control Protocol) là một trong những giao thức chính của tầng vận chuyển. Nó đảm bảo phân phối đáng tin cậy, có thứ tự và được kiểm tra lỗi của luồng byte giữa các ứng dụng. Trước khi truyền dữ liệu, TCP thiết lập kết nối thông qua bắt tay ba bước.
Bắt tay ba bước (three-way handshake) bắt đầu bằng việc máy khách gửi gói SYN. Máy chủ trả lời bằng gói SYN-ACK, xác nhận đã nhận. Máy khách hoàn tất bắt tay bằng gói ACK, sau đó quá trình truyền dữ liệu bắt đầu. Quy trình này đảm bảo cả hai bên sẵn sàng trao đổi và đồng bộ về số thứ tự.
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()
Trong ví dụ, một socket TCP được tạo với loại SOCK_STREAM, tự động thực hiện bắt tay ba bước khi connect được gọi. Phương thức send truyền yêu cầu HTTP và recv nhận phản hồi. Sau khi hoàn tất, close gửi gói FIN để đóng kết nối đúng cách.
Hãy xem xét ví dụ về máy chủ TCP trong Python chấp nhận nhiều máy khách qua luồng. Mỗi kết nối được xử lý trong một luồng riêng biệt, cho phép phục vụ nhiều máy khách đồng thời mà không chặn vòng lặp chính.
import socket
import threading
def handle_client(conn, addr):
print(f'Máy khách đã kết nối: {addr}')
with conn:
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data.upper())
print(f'Máy khách {addr} đã ngắt kết nối')
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 9090))
server.listen(5)
print('Máy chủ TCP đã khởi động trên cổng 9090')
while True:
conn, addr = server.accept()
thread = threading.Thread(target=handle_client, args=(conn, addr))
thread.start()
Máy chủ TCP xử lý mỗi kết nối trong một luồng riêng biệt, gọi accept trong vòng lặp vô hạn. Hàm handle_client nhận dữ liệu, chuyển đổi thành chữ hoa và gửi lại qua sendall. Khi vòng lặp recv kết thúc (khi máy khách đóng kết nối), luồng kết thúc và socket tự động đóng. Trong ứng dụng di động, công việc socket cấp thấp này không được sử dụng trực tiếp — các thư viện HTTP di động quản lý kết nối thông qua nhóm luồng và tự động tái sử dụng kết nối TCP.
Lựa chọn giữa TCP và UDP là một trong những quyết định quan trọng khi thiết kế giao tiếp mạng. TCP đảm bảo phân phối, thứ tự và toàn vẹn dữ liệu với chi phí độ trễ bổ sung. UDP hy sinh độ tin cậy để có độ trễ tối thiểu và tải kênh thấp hơn.
| Đặc điểm | TCP | UDP |
|---|---|---|
| Kết nối | Thiết lập (bắt tay) | Không thiết lập |
| Độ tin cậy | Đảm bảo phân phối | Không đảm bảo |
| Thứ tự gói | Sắp xếp thứ tự | Không sắp xếp |
| Tốc độ | Thấp hơn | Cao hơn |
| Sử dụng | Web, email, tệp | Streaming, trò chơi, DNS |
Đối với ứng dụng di động, việc chọn giao thức phụ thuộc vào kịch bản: API REST và tải dữ liệu yêu cầu TCP, trong khi cuộc gọi video và trò chơi trực tuyến được hưởng lợi từ tốc độ UDP. Một số ứng dụng kết hợp cả hai giao thức — TCP để điều khiển và UDP cho luồng phương tiện. Giao thức QUIC hiện đại, chạy trên UDP và được sử dụng trong HTTP/3, kết hợp ưu điểm của cả hai cách tiếp cận và đã được hỗ trợ trên iOS và Android thông qua URLSession tự động.
Hãy xem xét ví dụ về máy khách TCP trong Python với xử lý lỗi và thời gian chờ. Cách tiếp cận này được sử dụng trong ứng dụng di động để kết nối máy chủ đáng tin cậy.
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'Đã kết nối tới {host}:{port}')
return sock
except socket.error as err:
print(f'Lỗi kết nối: {err}')
sys.exit(1)
sock = tcp_client('api.example.com', 443)
sock.close()
Hàm tcp_client nhận host và port, tạo socket với thời gian chờ 10 giây và cố gắng kết nối. Khi có lỗi kết nối — ví dụ: máy chủ không khả dụng hoặc tường lửa chặn — một ngoại lệ được ném ra với mô tả vấn đề. Trong ứng dụng di động, thời gian chờ kết nối rất quan trọng: quá ngắn dẫn đến lỗi sai trên mạng chậm, quá dài dẫn đến đóng băng giao diện. Giá trị khuyến nghị cho mạng di động là 10–15 giây cho timeoutIntervalForRequest và 30–60 giây cho timeoutIntervalForResource trong cấu hình URLSession.
Câu hỏi thường gặp
IP chịu trách nhiệm định tuyến — phân phối gói từ người gửi đến người nhận qua các nút trung gian. TCP đảm bảo tập hợp dữ liệu đáng tin cậy: kiểm soát thứ tự, kiểm tra tính toàn vẹn và yêu cầu truyền lại các gói bị mất. Cùng nhau chúng tạo thành ngăn xếp TCP/IP.
TCP/IP không sử dụng cổng cố định — cổng được ứng dụng chỉ định. Cổng tiêu chuẩn: 80 (HTTP), 443 (HTTPS), 22 (SSH), 25 (SMTP). Cổng 443 là cổng chính cho lưu lượng web an toàn trong ứng dụng di động.
Kết nối TCP là một kênh logic giữa hai ứng dụng, được thiết lập thông qua bắt tay ba bước (SYN, SYN-ACK, ACK). Kết nối được xác định bằng cặp (địa chỉ IP, cổng) của người gửi và người nhận. Bắt tay đảm bảo cả hai bên sẵn sàng trao đổi dữ liệu.
Có, TCP/IP hoạt động trên mạng cục bộ (LAN) mà không cần truy cập Internet. Các thiết bị kết nối qua Wi-Fi Direct, Bluetooth PAN hoặc Ethernet và trao đổi dữ liệu bằng địa chỉ IP cục bộ. TCP/IP cục bộ được sử dụng trong thiết bị IoT và ứng dụng peer-to-peer.
TCP chậm hơn do các cơ chế bổ sung: bắt tay ba bước trước khi truyền, xác nhận từng gói, truyền lại các phân đoạn bị mất và kiểm soát tắc nghẽn. UDP gửi datagram mà không có các kiểm tra này, giảm độ trễ với chi phí mất mát tiềm ẩn.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm