TCP/IP: giao thức này là gì, ngăn xếp giao thức và truyền dữ liệu

Tác giả: IT Sectr Đã đăng: 2026-03-06 Thời gian đọc: 8 phút

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 — một ngăn xếp giao thức kết hợp TCP (vận chuyển) và IP (định tuyến) để truyền dữ liệu trong mạng
  • Bốn tầng của mô hình: ứng dụng, vận chuyển, mạng và liên kết — mỗi tầng giải quyết nhiệm vụ riêng
  • TCP đảm bảo phân phối, thứ tự gói và kiểm soát lỗi thông qua xác nhận và truyền lại
  • IP cung cấp định tuyến — chọn đường đi của gói từ người gửi đến người nhận qua các nút trung gian
  • Hiểu TCP/IP là cần thiết để phát triển ứng dụng mạng, gỡ lỗi kết nối và tối ưu hóa hiệu suất

TCP/IP là gì?

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.

Các tầng của mô hình TCP/IP

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

Ở 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

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 và tầng liên kết

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ầngGiao thứcChức năng
Ứng dụngHTTP, HTTPS, DNS, FTP, WebSocketĐịnh dạng dữ liệu ứng dụng
Vận chuyểnTCP, UDPTruyền giữa các ứng dụng, kiểm soát lỗi
MạngIP, ICMP, ARPĐịnh tuyến và định địa chỉ gói
Liên kếtEthernet, Wi-Fi, PPPTruyền qua phương tiện vật lý

Giao thức TCP hoạt động như thế nào

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ự.

python
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.

Máy chủ TCP với xử lý máy khá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.

python
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.

Sự khác biệt giữa TCP và UDP

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ểmTCPUDP
Kết nốiThiết lập (bắt tay)Không thiết lập
Độ tin cậyĐảm bảo phân phốiKhông đảm bảo
Thứ tự góiSắp xếp thứ tựKhông sắp xếp
Tốc độThấp hơnCao hơn
Sử dụngWeb, email, tệpStreaming, 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.

Ví dụ mã TCP/IP

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.

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'Đã 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

Sự khác biệt giữa TCP và IP là gì?

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 sử dụng cổng nào theo mặc định?

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à gì?

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ó thể sử dụng TCP/IP trong ứng dụng di động mà không cần Internet không?

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.

Tại sao TCP chậm hơn UDP?

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

  • TCP/IP — một ngăn xếp giao thức cơ bản đảm bảo truyền dữ liệu qua Internet và mạng cục bộ
  • Bốn tầng (ứng dụng, vận chuyển, mạng, liên kết) trừu tượng hóa các khía cạnh khác nhau của truyền dẫn
  • TCP đảm bảo phân phối đáng tin cậy với kiểm soát lỗi và xác nhận
  • IP chịu trách nhiệm định tuyến gói và định địa chỉ nút trong mạng
  • Chọn TCP hay UDP phụ thuộc vào yêu cầu: độ tin cậy so với tốc độ
  • Mọi ứng dụng di động thực hiện yêu cầu mạng đều sử dụng ngăn xếp TCP/IP

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.

Thảo luận dự án

Đọc thêm