Transmission Control Protocol

  1. Số cổng: 0 đến 65535
  2. Tầng giao thức: transport
  3. Các hình thức tấn công:
  • SYN flooding.
  • TCP reset
  • TCP session hijacking

TCP (Transmission Control Protocol) là một giao thức quan trọng dùng để truyền dữ liệu qua mạng. Giao thức này trao đổi các gói tin thông qua socket để phục vụ việc giao tiếp giữa các tiến trình ở tầng ứng dụng. Các gói tin nhận được từ tầng ứng dụng sẽ được lưu ở bộ đệm của giao thức TCP (nhờ vậy mà ta có thể tiến hành gửi lại các gói tin khi có sự lỗi bit hay mất gói xảy ra, xem thêm Reliable Data Transfer).

![[TCP-buffer.webp|#small]]

Properties

  • TCP có tính chất hướng kết nối (connection-oriented), chỉ cho phép truyền dữ liệu khi đã thiết lập được kết nối giữa hai host. Việc thiết lập kết nối thường được thực hiện thông qua ba gói tin. Vì thế mà thủ tục này thường được gọi là thao tác bắt tay ba bước (three-way handshake).

  • Là một giao thức truyền dữ liệu tin cậy (Reliable Data Transfer), bằng cách sử dụng các kỹ thuật: phát hiện lỗi, gửi lại, ACK tích lũy, bộ đếm thời gian và trường số thứ tự. Cụ thể hơn, TCP sử dụng kỹ thuật “stop and wait” và có cơ chế tương tự Pipeline.

  • TCP cũng sử dụng checksum để kiểm tra lỗi như UDP. Tuy nhiên, không có một checksum nào là tin cậy 100% (phụ thuộc vào sức mạnh tính toán của máy tính), nó chỉ có thể tiệm cận 100%. Độ tin cậy và tốc độ xử lý trade-off với nhau.

  • Kết nối TCP là kết nối điểm - điểm (point to point), một bên gửi, một bên nhận. Không thể dùng TCP để gửi dữ liệu đến nhiều điểm (multicast).

  • TCP chỉ chạy ở các hệ cuối chứ không hoạt động ở các node trung gian.

Cung cấp :

  • Truyền dữ liệu tin cậy, đảm bảo dữ liệu không bị lỗi và mất gói (reliable data transfer).
  • Kết nối hai chiều (full duplex), hai host có thể truyền dữ liệu qua lại trên cùng một kết nối.
  • Kiểm soát bộ đệm tại router ở bên nhận để không bị quá tải (flow control).
  • Kiểm soát tắc nghẽn (congestion control).

Không cung cấp :

  • Sự kịp thời của gói tin (timing).
  • Đảm bảo băng thông tối thiểu.
  • Bảo mật.

TCP Header

Cấu trúc một gói tin của giao thức TCP:

Sequence and ACK Numbers

Giải thích dòng thứ hai và thứ ba:

  • Sequence number là số thứ tự gói tin.
  • ACK number là số thứ tự của gói tin tiếp theo mong muốn nhận được.

Giả sử có hai host A và B. Số thứ tự bắt đầu gói tin của hai host lần lượt là 4279.

Khi nhận được dữ liệu từ tầng ứng dụng, gói tin mà A gửi cho B (ta gọi là gói P1) sẽ bao gồm:

  • Số thứ tự bắt đầu gói tin của A (Seq = 42)
  • Số thứ tự bắt đầu gói tin của B (ACK = 79).

Với P1, A mong muốn nhận được gói tin có số thứ tự Seq = 79 từ B.

Khi B nhận được P1, nó sẽ phản hồi lại A một gói tin (ta gọi là P2) có Seq = 79 (tương ứng với số thứ tự mà A mong muốn) và ACK = 43 (số thứ tự gói tin mà B mong muốn từ A).

![[Seq-and-ACK-example.webp|#x-small]]

Giá trị của ACK sẽ bằng số thứ tự của gói tin mà nó vừa nhận được (chẳng hạn Seq = 42) cộng với kích thước dữ liệu của gói tin (ký tự 'C' có kích thước một byte). Do đó, số thứ tự gói tin mà host B mong muốn là 42 + 1 = 43.

Flags

Là các bit ở sau phần not used. Một bit mà có giá trị là 1 thì đồng nghĩa với việc nó được bật.

Ngoại trừ C và E, các bit còn lại là:

  1. U - URG (urgent): cho biết gói tin đang gấp và cần được xử lý ngay lập tức.
  2. A - ACK (acknowledgement): cho biết ACK number là quan trọng.
  3. P - PSH (push): yêu cầu TCP chuyển dữ liệu đến ứng dụng một cách nhanh chóng.
  4. R - RST (reset): để đóng kết nối, thường được dùng bởi tường lửa. Khi có một bên gửi dữ liệu nhưng bên còn lại không có service nào lắng nghe thì nó cũng sẽ gửi lại gói tin có flag RST.
  5. S - SYN (synchronize): dùng để khởi tạo bắt tay ba bước và đồng bộ sequence number với các host khác. Sequence number nên có giá trị ngẫu nhiên trong quá trình thiết lập kết nối.
  6. F - FIN (finish): cho biết bên gửi không còn dữ liệu cần gửi.
list
from outgoing([[TCP]])
sort file.ctime asc

Resources