Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

Cách mạng Internet vận hành Phần 3: TCP – "Bảo Đảm" Cho Web 🤝

Joined
Jun 11, 2025
Messages
9
Trong phần 2, chúng ta đã tìm hiểu về HTTP – "ngôn ngữ" mà các trình duyệt và máy chủ web dùng để giao tiếp. HTTP hoạt động ở Tầng Ứng dụng (Application Layer - Tầng 7) của mô hình OSI. Nhưng để dữ liệu thực sự đi từ máy chủ đến trình duyệt của bạn (và ngược lại) một cách đáng tin cậy, chúng ta cần một giao thức mạnh mẽ hơn ở Tầng Vận chuyển (Transport Layer - Tầng 4): TCP (Transmission Control Protocol). 🚚
Hãy hình dung Internet là một hệ thống bưu điện khổng lồ. HTTP giống như ngôn ngữ bạn dùng để viết thư ✍️, còn TCP chính là dịch vụ bưu chính đảm bảo lá thư đó không bị mất, đến đúng người nhận, và đến theo đúng thứ tự các trang. 📫

TCP: Giao Thức Vận Chuyển Đáng Tin Cậy ở Tầng 4 🔒

TCP là một trong những giao thức cốt lõi của bộ giao thức TCP/IP, chịu trách nhiệm cho việc truyền tải dữ liệu đáng tin cậy, theo thứ tự giữa các ứng dụng chạy trên các máy chủ khác nhau. Nó cung cấp một kênh liên lạc ảo "đầu cuối đến đầu cuối" (end-to-end) cho các ứng dụng. 🔗
Các chức năng chính của TCP bao gồm:
  • Đáng tin cậy (Reliability): TCP đảm bảo dữ liệu gửi đi sẽ đến đích nguyên vẹn và theo đúng thứ tự. Nếu gói dữ liệu bị mất trên đường đi, TCP sẽ tự động phát hiện và yêu cầu gửi lại. ✅
  • Có định hướng kết nối (Connection-Oriented): Trước khi truyền tải dữ liệu, TCP thiết lập một kết nối giữa hai bên (máy gửi và máy nhận). Sau khi truyền xong, kết nối sẽ được ngắt. 📞
  • Kiểm soát luồng (Flow Control): TCP ngăn chặn việc một bên gửi dữ liệu quá nhanh làm tràn bộ đệm của bên nhận, đảm bảo tốc độ phù hợp giữa hai bên. 🚦
  • Kiểm soát tắc nghẽn (Congestion Control): TCP điều chỉnh lượng dữ liệu gửi vào mạng để tránh gây tắc nghẽn, giúp duy trì hiệu suất chung của Internet. 🛣️

Quy trình hoạt động của TCP​

1. Thiết lập kết nối: Bắt tay ba bước (Three-Way Handshake) 🤝🤝🤝

Trước khi dữ liệu được gửi đi, TCP thiết lập một kết nối an toàn bằng quy trình "bắt tay ba bước":
  1. SYN (Synchronize Sequence Numbers): Client gửi một gói tin SYN đến server, yêu cầu mở một kết nối và gửi số thứ tự khởi tạo của nó. 👋
  2. SYN-ACK (Synchronize-Acknowledgment): Server nhận gói SYN, phản hồi bằng một gói SYN-ACK. Gói này vừa xác nhận đã nhận SYN của client, vừa gửi số thứ tự khởi tạo của server. 👍
  3. ACK (Acknowledgment): Client nhận gói SYN-ACK, sau đó gửi lại một gói ACK để xác nhận đã nhận SYN-ACK của server. Lúc này, kết nối đã được thiết lập thành công và sẵn sàng để truyền dữ liệu. 🎉
Quá trình này đảm bảo cả hai bên đều sẵn sàng và đồng bộ hóa các số thứ tự trước khi truyền tải, giúp quản lý dữ liệu hiệu quả. 💯

2. Truyền tải dữ liệu: Phân đoạn, Đánh số và Xác nhận 📦➡️🔢➡️✅

Dữ liệu từ Tầng Ứng dụng (Tầng 7) được chuyển xuống Tầng Vận chuyển (Tầng 4), nơi TCP sẽ phân chia chúng thành các "đoạn" (segments) nhỏ hơn. Mỗi đoạn được gán một số thứ tự (sequence number) duy nhất. Điều này cho phép bên nhận tập hợp lại các đoạn theo đúng thứ tự và phát hiện nếu có đoạn nào bị thiếu. 🧩
Khi bên nhận nhận được một đoạn dữ liệu, nó sẽ gửi một gói "xác nhận" (ACK - Acknowledgment) trở lại bên gửi, cho biết đoạn đó đã được nhận thành công. Nếu bên gửi không nhận được ACK trong một khoảng thời gian nhất định, nó sẽ giả định rằng gói dữ liệu đã bị mất và tự động gửi lại (retransmission). Đây chính là cơ chế cốt lõi đảm bảo độ tin cậy của TCP. 💪

3. Ngắt kết nối: Kết thúc bằng "bốn bước" 👋

Tương tự như khi thiết lập, việc ngắt kết nối TCP cũng tuân theo một quy trình cụ thể (thường là bốn bước), đảm bảo rằng cả hai bên đều đã hoàn tất việc gửi và nhận dữ liệu trước khi đóng cổng. 🚪

Cấu trúc gói tin TCP (TCP Segment) 📊

Mỗi gói tin TCP, hay còn gọi là TCP Segment, có một cấu trúc header tiêu chuẩn chứa nhiều thông tin quan trọng giúp TCP hoạt động hiệu quả ở Tầng Vận chuyển.
Trường (Field)Kích thước (bytes)Mô tả
Source Port2Số cổng (port number) của ứng dụng gửi dữ liệu.
Destination Port2Số cổng của ứng dụng đích nhận dữ liệu.
Sequence Number4Số thứ tự của byte đầu tiên trong dữ liệu của segment này. Dùng để sắp xếp lại các segment theo đúng thứ tự và phát hiện segment bị thiếu.
Acknowledgment Number4Nếu cờ ACK được bật, đây là số thứ tự tiếp theo mà bên gửi segment này mong đợi từ bên nhận. Dùng để xác nhận dữ liệu đã nhận được.
Data Offset (Header Length)0.5 (4 bits)Độ dài của TCP Header tính bằng từ 32-bit. Cho biết dữ liệu thực sự bắt đầu từ đâu.
Reserved0.5 (6 bits)Dành riêng cho sử dụng trong tương lai, thường là 0.
Control Flags (Cờ)0.5 (6 bits)Các cờ điều khiển quan trọng (ví dụ: URG, ACK, PSH, RST, SYN, FIN) báo hiệu mục đích của segment (thiết lập/ngắt kết nối, xác nhận, v.v.).
Window Size2Kích thước cửa sổ nhận (receive window) của bên gửi segment này. Thông báo cho bên kia biết lượng dữ liệu mà nó sẵn sàng nhận. Dùng cho kiểm soát luồng.
Checksum2Giá trị dùng để kiểm tra lỗi của header và dữ liệu. Đảm bảo dữ liệu không bị hỏng trong quá trình truyền tải.
Urgent Pointer2Nếu cờ URG được bật, trường này chỉ ra vị trí của byte dữ liệu khẩn cấp.
OptionsBiến đổi (tùy chọn)Các tùy chọn mở rộng cho TCP (ví dụ: Maximum Segment Size - MSS, Window Scaling).
PaddingBiến đổi (tùy chọn)Đệm để đảm bảo TCP Header có độ dài là bội số của 4 byte.
Data (Payload)Biến đổiDữ liệu thực sự của Tầng Ứng dụng (ví dụ: dữ liệu HTTP, email, v.v.).

Ví dụ thực tế về một gói tin TCP 📧

Hãy tưởng tượng bạn đang gửi một email thông qua Outlook (ứng dụng email client của bạn) đến một người bạn.
  1. Outlook (Tầng Ứng dụng) tạo ra nội dung email.
  2. Nội dung email này được chuyển xuống TCP (Tầng Vận chuyển).
  3. TCP sẽ chia email thành các đoạn (segments) nhỏ hơn.
  4. Mỗi đoạn được đóng gói vào một TCP Segment riêng.
  5. TCP sẽ thêm vào mỗi segment một TCP Header chứa các thông tin như:
    • Source Port: Ví dụ, 49152 (một số cổng ngẫu nhiên được hệ điều hành gán cho Outlook).
    • Destination Port: Ví dụ, 25 (cổng tiêu chuẩn cho SMTP - giao thức gửi email) trên máy chủ email của bạn bè.
    • Sequence Number: Số thứ tự của đoạn dữ liệu này, ví dụ 1001.
    • Acknowledgment Number: Nếu đây là gói dữ liệu đầu tiên sau bắt tay, có thể là số thứ tự tiếp theo mà nó mong đợi từ máy chủ, ví dụ 2001.
    • Control Flags: Cờ PSH (Push) được bật (thúc đẩy dữ liệu lên ứng dụng), cờ ACK (xác nhận).
    • Checksum: Một giá trị được tính toán để máy chủ email có thể kiểm tra xem gói tin có bị lỗi trong quá trình truyền tải không.
    • Và các trường khác như Window Size, v.v.
  6. Sau đó, mỗi TCP Segment này sẽ được chuyển xuống Tầng Mạng (Network Layer) để thêm IP Header, rồi xuống Tầng Liên kết dữ liệu (Data Link Layer), và cuối cùng xuống Tầng Vật lý (Physical Layer) để biến thành tín hiệu điện/quang và được gửi qua mạng Internet.
  7. Khi máy chủ email của bạn bè nhận được các gói từ Tầng Vật lý, chúng sẽ được bóc tách dần qua các tầng ngược lại: Tầng Liên kết dữ liệu, Tầng Mạng (bóc IP Header), và cuối cùng đến Tầng Vận chuyển (bóc TCP Header).
  8. TCP trên máy chủ sẽ kiểm tra Checksum, sắp xếp các đoạn theo Sequence Number, và gửi ACK về cho bạn để xác nhận đã nhận.
  9. Cuối cùng, khi tất cả các đoạn đã được nhận và sắp xếp, TCP sẽ chuyển dữ liệu email hoàn chỉnh lên Tầng Ứng dụng để ứng dụng email của bạn bè đọc.

Kết luận​

TCP là một trong những thành phần quan trọng nhất làm cho Internet trở nên hữu ích. Nó biến một mạng lưới "không đáng tin cậy" (như IP ở Tầng Mạng) thành một nền tảng truyền thông "đáng tin cậy" mà trên đó các ứng dụng như HTTP có thể hoạt động. Hiểu được cách TCP thiết lập kết nối, truyền tải dữ liệu, đảm bảo độ tin cậy và cấu trúc gói tin của nó theo chuẩn OSI giúp chúng ta đánh giá cao hơn sự phức tạp và tinh vi của cách mạng Internet vận hành. 🌐
 
cái checksum là gì mà trong tài liệu kỹ thuật cũng hay dùng ta? checksum chỉ là tổng lại một cái gì đó thì làm sao đảm bảo 2 tổng đó giống nhau được ta? lỡ đâu nó sai nhưng tổng vẫn giống nhau sao? ví dụ như 3 + 2 = 5 mà 1 + 4 = 5 luôn
 
Back
Top