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

  • TCP Header – Phân tích chi tiết cấu trúc gói tin của Transmission Control Protocol


    Click image for larger version

Name:	image.png
Views:	24
Size:	27.9 KB
ID:	439059

    Trong bộ giao thức TCP/IP, Transmission Control Protocol (TCP) là giao thức tầng Transport chịu trách nhiệm cung cấp kết nối đáng tin cậy giữa hai thiết bị trong mạng. TCP đảm bảo dữ liệu được truyền đúng thứ tự, không mất gói và có cơ chế kiểm soát lỗi.

    Để thực hiện được các chức năng đó, mỗi segment TCP đều chứa một phần header ở đầu gói tin. Phần header này mang thông tin điều khiển giúp hai bên giao tiếp quản lý phiên kết nối và dữ liệu.

    TCP header có độ dài tối thiểu 20 byte (160 bit) và tối đa 60 byte nếu có thêm các tùy chọn (options).

    Cấu trúc TCP header gồm các trường sau.
    1. Source Port (16 bit)


    Trường Source Port xác định cổng nguồn của ứng dụng gửi dữ liệu.

    Ví dụ:
    • Trình duyệt web gửi request HTTP
    • Source Port có thể là một cổng tạm thời như 49152 – 65535

    Ý nghĩa của trường này:
    • Cho phép hệ điều hành biết ứng dụng nào gửi dữ liệu
    • Khi phản hồi quay lại, hệ thống sẽ dùng port này để chuyển dữ liệu về đúng chương trình.

    Ví dụ:

    Client gửi request:

    Source Port: 53021
    Destination Port: 80

    Khi server phản hồi:

    Source Port: 80
    Destination Port: 53021
    2. Destination Port (16 bit)


    Trường Destination Port xác định cổng của dịch vụ đích.

    Một số cổng phổ biến:

    HTTP → 80
    HTTPS → 443
    SSH → 22
    FTP → 21
    DNS → 53

    Nhờ trường này, hệ điều hành phía nhận biết dịch vụ nào phải xử lý gói tin.

    Ví dụ:
    • Nếu Destination Port = 22 → chuyển cho SSH daemon
    • Nếu Destination Port = 80 → chuyển cho web server

    3. Sequence Number (32 bit)


    Đây là một trong những trường quan trọng nhất của TCP.

    Sequence Number dùng để đánh số thứ tự các byte dữ liệu trong phiên truyền.

    TCP không đánh số từng gói tin mà đánh số từng byte dữ liệu.

    Ví dụ:

    Segment 1 chứa 1000 byte
    Sequence Number = 0

    Segment 2
    Sequence Number = 1000

    Segment 3
    Sequence Number = 2000

    Nhờ đó TCP có thể:
    • phát hiện gói bị mất
    • sắp xếp lại gói khi đến sai thứ tự
    • yêu cầu gửi lại dữ liệu

    4. Acknowledgment Number (32 bit)


    Trường Acknowledgment Number xác nhận dữ liệu đã nhận.

    Giá trị ACK chính là byte tiếp theo mà bên nhận mong muốn nhận.

    Ví dụ:

    Client gửi:

    Sequence = 0
    Data = 1000 byte

    Server nhận xong sẽ trả:

    ACK = 1000

    Ý nghĩa:

    "Tôi đã nhận đủ byte từ 0 đến 999, hãy gửi tiếp từ 1000."

    Đây chính là cơ chế ACK trong TCP giúp đảm bảo truyền dữ liệu đáng tin cậy.
    5. Data Offset (4 bit)


    Trường Data Offset cho biết kích thước của TCP header.

    Giá trị được tính theo đơn vị 32-bit word.

    Ví dụ:

    Data Offset = 5

    Điều này nghĩa là:

    5 × 32 bit = 160 bit = 20 byte

    Tức là header chỉ có kích thước tối thiểu.

    Nếu có Options:

    Data Offset có thể tăng lên tới 15.
    6. Reserved (3 bit)


    Ba bit này được dành riêng cho tương lai và hiện tại luôn đặt bằng 0.

    Chúng tồn tại để sau này có thể mở rộng giao thức mà không cần thay đổi toàn bộ cấu trúc TCP.
    7. Control Flags (9 bit)


    Đây là các cờ điều khiển (flags) của TCP, dùng để quản lý trạng thái kết nối.

    Các flag bao gồm:

    NS
    CWR
    ECE
    URG
    ACK
    PSH
    RST
    SYN
    FIN

    Chi tiết từng flag.
    SYN (Synchronize)


    Dùng để bắt đầu một kết nối TCP.

    Trong quá trình TCP Three-way Handshake, gói đầu tiên luôn có SYN = 1.
    ACK (Acknowledgment)


    Cho biết trường Acknowledgment Number có giá trị hợp lệ.

    Sau khi handshake hoàn tất, hầu hết mọi segment TCP đều có ACK = 1.
    FIN (Finish)


    Báo hiệu kết thúc kết nối TCP.

    Khi một bên gửi FIN, nó thông báo rằng không còn dữ liệu để gửi nữa.
    RST (Reset)


    Dùng để reset ngay lập tức kết nối TCP.

    Trường hợp xảy ra:
    • gửi tới port không tồn tại
    • kết nối bị lỗi
    • server từ chối kết nối

    RST sẽ hủy phiên TCP ngay lập tức, không cần đóng theo quy trình FIN.
    PSH (Push)


    Yêu cầu bên nhận chuyển dữ liệu ngay lập tức lên application layer thay vì đợi buffer đầy.

    Điều này thường xảy ra với:
    • SSH
    • Telnet
    • các ứng dụng realtime

    URG (Urgent)


    Cho biết có dữ liệu khẩn cấp trong segment.

    Khi URG = 1 thì trường Urgent Pointer sẽ có ý nghĩa.
    ECE và CWR


    Hai cờ này liên quan đến Explicit Congestion Notification (ECN).

    ECN giúp các router thông báo tình trạng nghẽn mạng mà không cần drop packet.
    8. Window Size (16 bit)


    Trường Window Size dùng trong cơ chế Flow Control của TCP.

    Nó cho biết bên nhận còn bao nhiêu bộ đệm để nhận dữ liệu.

    Ví dụ:

    Window Size = 5000

    Nghĩa là:

    Sender có thể gửi tối đa 5000 byte dữ liệu trước khi cần ACK mới.

    Cơ chế này gọi là Sliding Window.

    Nhờ đó:
    • tránh tràn buffer
    • điều chỉnh tốc độ truyền dữ liệu

    9. Checksum (16 bit)


    Checksum dùng để phát hiện lỗi trong TCP segment.

    Nó được tính dựa trên:
    • TCP header
    • TCP data
    • pseudo header từ IP layer

    Khi gói tin đến nơi, bên nhận sẽ:
    1. tính lại checksum
    2. so sánh với giá trị trong header

    Nếu khác nhau → packet bị lỗi và bị loại bỏ.
    10. Urgent Pointer (16 bit)


    Trường này chỉ có ý nghĩa khi URG flag = 1.

    Urgent Pointer chỉ ra vị trí kết thúc của dữ liệu khẩn cấp trong segment.

    Tuy nhiên trong thực tế hiện đại, trường này gần như không được sử dụng.
    11. Options (0 – 40 byte)


    TCP Options cho phép mở rộng chức năng của TCP.

    Một số option phổ biến:

    MSS (Maximum Segment Size)
    Window Scale
    Selective Acknowledgment (SACK)
    Timestamp

    Ví dụ:

    MSS cho biết kích thước segment tối đa mà host có thể nhận.
    12. Padding


    Padding được thêm vào để đảm bảo TCP header luôn chia hết cho 32 bit.

    Điều này cần thiết vì Data Offset được tính theo đơn vị 32-bit word.
    Kết luận


    TCP header là thành phần cốt lõi giúp TCP cung cấp các tính năng quan trọng như:
    • truyền dữ liệu đáng tin cậy
    • kiểm soát lỗi
    • kiểm soát luồng
    • quản lý phiên kết nối
    • phát hiện nghẽn mạng

    Nhờ các trường như Sequence Number, ACK Number, Window Size và Control Flags, TCP có thể đảm bảo dữ liệu được truyền đầy đủ, đúng thứ tự và ổn định, điều mà các giao thức không kết nối như UDP không thể làm được.

    Việc hiểu rõ cấu trúc TCP header là nền tảng quan trọng trong các lĩnh vực:
    • Network Engineering
    • Cyber Security
    • Packet Analysis
    • Malware Analysis
    • Intrusion Detection Systems (IDS)

    Khi phân tích lưu lượng mạng bằng các công cụ như Wireshark hoặc khi viết các hệ thống bảo mật mạng, việc đọc và hiểu từng trường của TCP header là kỹ năng bắt buộc.
Working...
X