Các bước kết nối trong TCP

TCP hay Giao thức điều khiển truyền tải là một giao thức lớp truyền tải tiêu chuẩn mà internet sử dụng để truyền dữ liệu. Request For Comments (RFC) 793 định nghĩa TCP là một giao thức hướng kết nối và đáng tin cậy. Vì nó được định hướng kết nối, một đường dẫn hoặc kết nối cần phải được thiết lập trước khi truyền bất kỳ dữ liệu nào. TCP sử dụng cơ chế bắt tay ba chiều để thiết lập kết nối giữa hai thiết bị. Trong hướng dẫn này, chúng ta sẽ xem cơ chế bắt tay ba bước hoạt động như thế nào. Đầu tiên chúng ta hãy xem các vấn đề với mô hình bắt tay hai chiều.

Các vấn đề với mô hình bắt tay hai chiều

Mô hình bắt tay hai chiều không thành công do sự cố gói tin trùng lặp cũ. Giả sử rằng một gói tin trùng lặp cũ đến máy chủ. Gói tin cũ này đã đến từ một kết nối đã đóng trước đó và chứa một số thứ tự ‘z’. Tại một số thời điểm trong kết nối mới, máy chủ đang chấp nhận một gói có số thứ tự ‘z’. Khi nó nhận được gói tin cũ này có cùng số thứ tự ‘z’, nó sẽ vô tình chấp nhận gói tin cũ này và loại bỏ gói tin thực khỏi kết nối mới.

Trong trường hợp trên, nếu kết nối không diễn ra giữa máy khách và máy chủ, sự xuất hiện của gói yêu cầu kết nối trùng lặp cũ vẫn gây ra sự cố. Nếu máy chủ nhận được một gói như vậy, nó sẽ phản hồi lại bằng một gói SYN + ACK. Gói tin này sẽ bị khách hàng loại bỏ vì nó không có ý định kết nối. Nhưng máy chủ sẽ vào trạng thái deadlock, chờ máy khách gửi dữ liệu.

Một vấn đề khác là nếu một máy chủ C gửi một yêu cầu kết nối đến máy chủ bằng cách mạo danh máy khách, máy chủ sẽ phản hồi lại bằng một ACK cho máy khách. Máy khách sẽ loại bỏ gói ‘ACK’ này và yêu cầu máy chủ chấm dứt kết nối. Trong khoảng thời gian của các sự kiện này, máy chủ C có thể khởi động một cuộc tấn công giả mạo bằng cách gửi nhiều gói tin.

Mô hình bắt tay ba chiều trong TCP / IP

Mô hình bắt tay ba bên rất quan trọng. Nếu chúng tôi không sử dụng nó và trực tiếp bắt đầu gửi dữ liệu, ứng dụng nhận có thể bắt đầu nhận các gói tin trùng lặp. Kẻ tấn công có thể có cơ hội thực hiện các cuộc tấn công (như DDoS) giữa một kết nối. Quy trình bắt tay ba bước được bắt đầu bởi một máy và phía bên kia sẽ phản hồi lại quy trình đó. Quy ước sau được sử dụng để giải thích quy trình này:

“Nếu một trang web nhận được một gói có số thứ tự ‘x’, nó sẽ trả lời bằng số ACK ‘x + 1’.”

Hãy để chúng tôi tóm tắt các bước được thực hiện trong quá trình bắt tay ba chiều giữa máy khách và máy chủ:

Bước 1. Trong lần bắt tay đầu tiên, máy khách gửi gói yêu cầu kết nối SYN với số thứ tự ban đầu ngẫu nhiên (‘x’) đến máy chủ.

Bước 2. Trong lần bắt tay thứ hai, máy chủ phản hồi bằng gói SYN có số thứ tự ngẫu nhiên (‘y’) và gói ACK có số thứ tự (‘x + 1’) để xác nhận số thứ tự ban đầu (‘x ‘) do khách hàng gửi.

Bước 3. Trong lần bắt tay thứ ba, máy khách sẽ gửi một gói ACK có số thứ tự (‘y + 1’) đến máy chủ để xác nhận gói SYN (‘y’) do máy chủ gửi.

Bước 4. Bây giờ cả hai đầu đều được đồng bộ hóa và có thể bắt đầu truyền dữ liệu độc lập. [1]

Thủ tục bắt tay ba chiều TCP vẫn có hiệu lực nếu cả hai bên đồng thời bắt đầu quá trình khởi tạo. Trong trường hợp như vậy, mỗi máy sau khi gửi gói “SYN” sẽ nhận được một đoạn “SYN” không có báo nhận. Nếu một gói tin “SYN” trùng lặp cũ đến người nhận, thì người nhận có thể thấy rằng quá trình khởi tạo kết nối đang diễn ra cùng một lúc. Chúng ta có thể sử dụng các gói “đặt lại” để loại bỏ sự mơ hồ này.

Chấm dứt kết nối TCP

Một trong hai bên có thể chấm dứt kết nối TCP. Đối với điều này, bất kỳ bên nào cũng có thể truyền một đoạn TCP với tập bit FIN. Điều này có nghĩa là phía gửi không có thêm bất kỳ dữ liệu nào để gửi. Bên nhận sẽ xác nhận gói FIN này bằng cách gửi gói báo nhận. Thao tác này sẽ đóng kết nối từ một phía (phía người gửi). Bây giờ người nhận sẽ sử dụng các bước tương tự để chấm dứt kết nối thay cho mình. Điều này sẽ đóng hoàn toàn kết nối.

Các vấn đề với mô hình bắt tay ba chiều

Trong trường hợp ACK từ máy khách đến máy chủ bị mất hoặc bị chặn trong giai đoạn bắt tay thứ ba, máy khách sẽ không biết về tình huống này. Máy khách sẽ cho rằng kết nối đã được thiết lập và sẽ bắt đầu gửi dữ liệu. Máy chủ vẫn đang đợi ACK, ACK đã bị mất, vì vậy nó sẽ loại bỏ dữ liệu nhận được từ máy khách. [2]

Phần kết luận

Trong hướng dẫn này, chúng ta đã tìm hiểu về các thủ tục kết nối TCP sử dụng kiểu bắt tay ba bước. Chúng tôi cũng đã thấy vấn đề về các gói tin trùng lặp liên quan đến quy trình bắt tay hai chiều và cách nó được giải quyết với mô hình bắt tay ba chiều. Nhiều nhà nghiên cứu đã đóng góp các tài liệu nghiên cứu khác nhau để cải thiện mô hình bắt tay ba bước và khắc phục các vấn đề liên quan đến nó.