Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 🔐 Ba Bắt Tay & Bốn Gói Tin – Hiểu Đúng Cách TCP Thiết Lập và Kết Thúc Kết Nối

    🔐 Ba Bắt Tay & Bốn Gói Tin – Hiểu Đúng Cách TCP Thiết Lập và Kết Thúc Kết Nối


    Khi làm việc với TCP/IP, một trong những quy trình quan trọng nhất mà mọi kỹ sư mạng và bảo mật cần hiểu rõ là cách TCP thiết lập và kết thúc kết nối. Dù đã quá quen thuộc trong lý thuyết, nhưng không ít người nhầm lẫn giữa các bước, đặc biệt là quá trình kết thúc kết nối (termination). Bài viết này sẽ giúp bạn hiểu rõ và nhớ kỹ bằng cách giải thích từng gói tin trong ngữ cảnh thực tế.
    📥 Thiết lập kết nối TCP – 3-Way Handshake


    TCP là một giao thức hướng kết nối (connection-oriented), điều đó có nghĩa là trước khi có thể gửi dữ liệu thật, hai thiết bị cần phải thiết lập một phiên giao tiếp tin cậy. Quá trình này gọi là Three-Way Handshake (bắt tay ba bước), sử dụng ba gói tin để đồng bộ hóa số thứ tự (sequence number) giữa client và server. Các bước:
    1. Gói SYN (Client → Server)
      • Client khởi động kết nối bằng cách gửi một TCP segment với cờ SYN = 1.
      • Kèm theo đó là Sequence Number = X, là một số ngẫu nhiên do client tạo ra.
        → Mục tiêu: "Tôi muốn bắt đầu kết nối, đây là số thứ tự khởi đầu của tôi."
    2. Gói SYN-ACK (Server → Client)
      • Server phản hồi bằng một gói SYN-ACK:
        • SYN = 1 để đồng bộ hóa số thứ tự phía server (Sequence Number = Y).
        • ACK = X + 1 để xác nhận đã nhận gói SYN từ client.
          → Mục tiêu: "Tôi đồng ý kết nối, đây là số thứ tự của tôi, và tôi đã nhận của bạn."
    3. Gói ACK (Client → Server)
      • Client phản hồi với gói ACKACK = Y + 1, xác nhận đã nhận SYN của server.
        → Mục tiêu: "Xác nhận cuối cùng, sẵn sàng truyền dữ liệu."
    🔄 Kết quả: Hai bên đồng bộ số thứ tự, thiết lập phiên TCP thành công. Giao tiếp bắt đầu.

    📤 Kết thúc kết nối TCP – 4 bước FIN/ACK


    Khi một trong hai phía (thường là client) muốn kết thúc phiên làm việc TCP, quá trình kết thúc diễn ra qua một chuỗi 4 gói tin (nên đôi khi được gọi là Four-way Termination). Các bước:
    1. Gói FIN (Client → Server)
      • Client gửi gói tin với FIN = 1, thông báo không còn dữ liệu để gửi.
        → TCP ở client vào trạng thái FIN_WAIT_1.
    2. Gói ACK (Server → Client)
      • Server gửi ACK xác nhận gói FIN.
        → Client vào FIN_WAIT_2, chờ server đóng.
    3. Gói FIN (Server → Client)
      • Khi server cũng sẵn sàng kết thúc, nó gửi gói FIN = 1.
        → Server vào LAST_ACK.
    4. Gói ACK (Client → Server)
      • Client phản hồi ACK cuối cùng, xác nhận đã nhận FIN từ server.
        → Client vào TIME_WAIT, đợi 2 lần thời gian TTL để đảm bảo không có gói tin trễ.
    ✅ Sau bước này, kết nối TCP được đóng hoàn toàn cả hai phía.

    🎓 Ví dụ thực tế từ gói tin Wireshark:
    • SYN: Seq=1000
    • SYN-ACK: Seq=3000 Ack=1001
    • ACK: Seq=1001 Ack=3001
    • Truyền dữ liệu…
    • FIN: Seq=5001
    • ACK: Ack=5002
    • FIN: Seq=8001
    • ACK: Ack=8002

    🔐 Tổng kết cho anh em SOC và Network Engineer:
    • Nếu không nắm rõ handshake, bạn dễ bỏ sót các sự kiện quan trọng trong log phân tích gói tin.
    • 3 gói thiết lập – 4 gói kết thúc, giúp bạn định vị kết nối TCP trong firewall, SIEM hoặc phân tích sự cố.
    • Trong các tấn công như TCP SYN Flood, attacker gửi SYN nhưng không hoàn thành bắt tay – gây tiêu tốn tài nguyên server.
    • Trong forensic, gói FIN và thời điểm TIME_WAIT rất hữu ích để biết ai kết thúc kết nối, và khi nào.


    Bạn đã từng debug một kết nối bị treo ở FIN_WAIT_2 chưa? Hãy chia sẻ trong bình luận kinh nghiệm thực chiến của bạn với TCP handshake nhé! 👇
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X