Kiến trúc và Cơ chế Hoạt động của Giao thức TCP/IP

Quy trình truyền tải dữ liệu trong mạng

Để hiểu rõ cách dữ liệu di chuyển, ta cần xem xét vai trò của từng thiết bị mạng trong quá trình chuyển tiếp gói tin:

  • Tại máy chủ nguồn (Host): Hệ thống xác định địa chỉ IP của mình và đích đến. Sử dụng subnet mask để kiểm tra xem hai bên có nằm cùng một mạng con hay không. Nếu cùng mạng con, máy chủ sử dụng giao thức ARP để tìm địa chỉ MAC của đích và gửi thẳng dữ liệu đi. Nếu khác mạng con, ARP sẽ được dùng để tìm địa chỉ MAC của Default Gateway (cổng mặc định) để chuyển tiếp dữ liệu.
  • Tại Switch (Công tắc): Switch hoạt động dựa trên địa chỉ MAC. Khi nhận được khung dữ liệu, nó tra cứu Bảng địa chỉ MAC để tìm cổng tương ứng với MAC đích. Nếu tìm thấy, gói tin sẽ được gửi đến đúng cổng đó; nếu không, switch sẽ thực hiện "flooding" (gửi đến tất cả các cổng) trừ cổng nhận.
  • Tại Router (Bộ định tuyến): Router xử lý dựa trên địa chỉ IP. Nó kiểm tra Bảng định tuyến (Routing Table) để xác định đường đi tối ưu cho gói tin. Nếu tìm thấy đường đi, nó sẽ chuyển tiếp gói tin sang cổng thích hợp (hoặc gửi đến gateway tiếp theo). Nếu không tìm thấy, router sẽ trả về thông báo "Destination Unreachable" (Đích đến không thể tiếp cận).

Điểm cốt lõi ở đây là: Mạng lưới (tầng IP) không thực hiện việc vận chuyển vật lý gói tin. Nó ủy quyền nhiệm vụ này cho tầng Liên kết dữ liệu (Data Link Layer), nơi các thiết bị như Switch thực hiện chuyển phát dựa trên địa chỉ phần cứng (MAC).

Các thiết bị mạng hoạt động dựa trên ba loại bảng dữ liệu chính:

  1. MAC Address Table: Có trong Switch, ánh xạ địa chỉ MAC với các cổng vật lý.
  2. Routing Table: Có trong Router, ánh xạ địa chỉ IP (hoặc dải IP) với các cổng định tuyến.
  3. ARP Cache: Có trong cả Router và máy tính, lưu trữ tạm thời ánh xạ giữa địa chỉ IP và địa chỉ MAC.

Các bảng này được xây dựng dần theo thời gian: bảng MAC học hỏi qua lưu lượng траfik, bảng định tuyến được cấu hình thủ công hoặc qua các giao thức định tuyến (OSPF, BGP...), và bảng ARP được tạo ra thông qua các gói tin hỏi/phản hồi ARP.

Mô hình phân tầng TCP/IP

Chuẩn giao thức TCP/IP được chia thành 4 lớp chính từ trên xuống dưới:

  1. Lớp Ứng dụng (Application): HTTP, FTP, DNS, SMTP.
  2. Lớp Vận chuyển (Transport): TCP, UDP.
  3. Lớp Mạng (Internet): IP, ICMP.
  4. Lớp Liên kết (Link): Ethernet, Wi-Fi.

Dữ liệu được đóng gói tuần tự từ trên xuống. Ví dụ, một yêu cầu HTTP sẽ được bọc trong header TCP (thành segment), sau đó bọc thêm header IP (thành packet), cuối cùng được đóng khung Ethernet (frame) trước khi truyền qua dây cáp. Tại phía nhận, quá trình ngược lại (giải đóng gói) sẽ diễn ra để lấy dữ liệu gốc.

Giao thức IP (Internet Protocol)

IP hoạt động ở tầng mạng, cung cấp dịch vụ truyền dữ liệu không kết nối và không đảm bảo độ tin cậy (unreliable). Các giao thức tầng trên (như TCP) sẽ chịu trách nhiệm kiểm tra lỗi.

Địa chỉ IPv4 dài 32 bit được chia thành hai phần: Network ID (định danh mạng) và Host ID (định danh máy chủ). Tùy thuộc vào bit đầu tiên, địa chỉ IP được chia thành các lớp A, B, C, D, E.

Ví dụ, với địa chỉ lớp C, 24 bit đầu dùng cho mạng, 8 bit cuối dùng cho host. Điều này cho phép khoảng 254 máy tính hoạt động trong cùng một mạng con (trừ 2 địa chỉ đặc biệt là địa chỉ mạng và địa chỉ broadcast).

Cấu trúc Header IP

Header IP (phiên bản 4) thường dài 20 byte, chứa các trường thông tin quan trọng:

  • Source IP & Destination IP: Địa chỉ IP nguồn và đích (mỗi cái 32 bit).
  • TTL (Time To Live): Thời gian sống của gói tin. Mỗi lần qua một router, giá trị này giảm 1. Nếu về 0, gói tin bị hủy để tránh vòng lặp vô hạn.
  • Protocol: Chỉ định giao thức tầng 4 đang được sử dụng (ví dụ: 6 cho TCP, 17 cho UDP).
  • Total Length: Độ dài tổng thể của gói IP. Nếu độ dài này vượt quá MTU (Maximum Transmission Unit) của đường truyền, gói tin sẽ bị chia nhỏ (fragmentation). Các trường IdentificationFragment Offset giúp ghép lại các mảnh này tại đích.

Giao thức TCP (Transmission Control Protocol)

TCP nằm ở tầng vận chuyển, cung cấp dịch vụ truyền dữ liệu có kết nối và đáng tin cậy. Nó nhận dòng dữ liệu từ ứng dụng, chia nhỏ thành các đoạn (segment) có kích thước phù hợp với MSS (Maximum Segment Size) và gửi xuống tầng IP.

Để đảm bảo tin cậy, TCP sử dụng cơ chế:

  • Số thứ tự (Sequence Number): Đánh dấu từng byte để đảm bảo thứ tự khi nhận.
  • Xác nhận (ACK): Người nhận gửi lại xác nhận cho dữ liệu đã nhận thành công.
  • Retransmission: Nếu hết thời gian chờ (Timeout) mà chưa nhận được ACK, dữ liệu sẽ được gửi lại.
  • Checksum: Kiểm tra tính toàn vẹn của dữ liệu.

Về kiểm soát lưu lượng và tắc nghẽn, TCP sử dụng Cửa sổ trượt (Sliding Window) và thuật toán AIMD (Additive Increase Multiplicative Decrease), bao gồm khởi động chậm (Slow Start) và tránh tắc nghẽn (Congestion Avoidance).

Cấu trúc Header TCP

Header TCP chứa các trường quan trọng để quản lý kết nối:

  • Source/Destination Port: Cổng nguồn và đích.
  • Sequence Number: Số thứ tự của byte đầu tiên trong dữ liệu hiện tại.
  • Acknowledgment Number: Số thứ tự của byte tiếp theo mà bên nhận mong đợi.
  • Data Offset: Chiều dài của header TCP (tính bằng 32-bit word).
  • Flags (URG, ACK, SYN, FIN...): Các cờ điều khiển quá trình kết nối và truyền dữ liệu.

Thiết lập kết nối: Bắt tay 3 bước (Three-way Handshake)

Trước khi truyền dữ liệu, TCP cần thiết lập kết nối logic:

1. <strong>SYN_SENT:</strong> Client gửi gói SYN (synchronize) với số thứ tự x cho Server.
2. <strong>SYN_RCVD:</strong> Server nhận được, phản hồi gói SYN-ACK. Gói này mang số thứ tự y của Server và xác nhận số x của Client (ACK=x+1).
3. <strong>ESTABLISHED:</strong> Client nhận được SYN-ACK, gửi lại gói ACK xác nhận (ACK=y+1). Kết nối được thiết lập thành công.

Chấm dứt kết nối: 4 bước (Four-way Teardown)

Để đóng kết nối, 4 bước sau được thực hiện:

1. Client gửi gói FIN, ACK để yêu cầu ngắt kết nối. Trạng thái: FIN-WAIT-1.
2. Server phản hồi ACK để xác nhận đã biết yêu cầu, nhưng chưa đóng ngay (có thể còn dữ liệu đang xử lý). Trạng thái: CLOSE-WAIT.
3. Sau khi xử lý xong, Server gửi gói FIN, ACK để thông báo đã sẵn sàng đóng. Trạng thái: LAST-ACK.
4. Client phản hồi ACK cuối cùng. Trạng thái: TIME-WAIT (đợi để đảm bảo ACK đến đích), sau đó đóng hẳn. Server đóng sau khi nhận được ACK.

Giao thức UDP (User Datagram Protocol)

Khác với TCP, UDP là giao thức không kết nối (connectionless), tập trung vào tốc độ xử lý thay vì độ tin cậy.

Đặc điểm chính của UDP:

  • Không có quy trình bắt tay trước khi truyền.
  • Không đảm bảo thứ tự đến hay sự thành công của gói tin.
  • Header rất gọn nhẹ (chỉ 8 byte so với 20 byte của TCP), bao gồm: Port nguồn, Port đích, Độ dài, và Checksum.
  • Hỗ trợ broadcast (gửi một đến nhiều) và multicast.
  • Phù hợp với các ứng dụng yêu cầu thời gian thực như Streaming video, Game online, DNS, nơi việc mất vài gói tin chấp nhận được nhưng độ trễ phải thấp nhất.

Giao thức HTTP (Hypertext Transfer Protocol)

HTTP nằm ở tầng cao nhất (Application), định nghĩa cách client và server trao đổi thông tin. Nó chạy trên nền tảng TCP, nên HTTP không cần lo lắng về việc truyền tải gói tin bị lỗi hay mất mát.

Tính chất:

  • Stateless: Mỗi yêu cầu (request) là độc lập, server không lưu trạng thái của các yêu cầu trước đó trừ khi sử dụng Session/Cookie.
  • Cấu trúc tin nhắn: Gồm Request (Yêu cầu từ Client) và Response (Phản hồi từ Server).

Cấu trúc Request HTTP

Một yêu cầu HTTP điển hình bao gồm 4 phần:

  1. Request Line: Phương thức (GET/POST...), URL, và phiên bản HTTP.
  2. Headers: Các thông tin meta (Host, User-Agent, Content-Type...).
  3. Empty Line: Dòng trống phân tách header và body.
  4. Body: Dữ liệu đi kèm (tùy chọn, dùng trong POST/PUT).

Thẻ: TCP/IP Networking IPv4 TCP UDP

Đăng vào ngày 9 tháng 6 lúc 05:23