Bắt tay SOCKS đã thành công. Giờ relay đọc từ máy khách, ghi đến đích, chờ một phản hồi đầy đủ và chỉ sau đó mới đọc lại từ máy khách. Trình tự đó có thể làm bế tắc một ứng dụng hoàn toàn hợp lệ.

Khi đường hầm TCP được thiết lập, SOCKS không định nghĩa các thông điệp bên trong nó. Đích có thể gửi trước. Cả hai bên có thể gửi độc lập. Một bên có thể gửi một bản ghi ngắn rồi chờ câu trả lời của bên kia.

Truyền byte, không phải giao dịch phỏng đoán

Một lời gọi nhận trả về các byte khả dụng theo cờ và trạng thái socket của nó. Nó không cho một relay tổng quát biết rằng phản hồi của ứng dụng đã hoàn tất. Chờ một bộ đệm lớn tùy ý đầy có thể ngăn việc chuyển tiếp thông điệp nhỏ mà đối tác cần để tiếp tục.

Dùng mô hình đồng thời hiện có của ứng dụng để phục vụ cả hai hướng: vòng lặp sự kiện, I/O bất đồng bộ hoặc một thiết kế khác được chọn có chủ đích. Hành vi quan trọng là tiến trình theo một hướng không đòi hỏi một ranh giới thông điệp bịa ra ở hướng kia.

Giữ hai bộ đệm chờ có giới hạn

Dữ liệu đọc từ máy khách có thể vẫn đang chờ đến đích, trong khi dữ liệu từ đích chờ đến máy khách. Theo dõi riêng các byte đang chờ đó.

Một lần gửi có thể ghi ít byte hơn yêu cầu. Giữ lại phần chưa ghi; đừng bỏ nó hoặc phát lại toàn bộ bộ đệm. Một socket tạm thời không ghi được là lý do để chờ sự kiện sẵn sàng đúng, không phải quay liên tục.

Giới hạn các bộ đệm. Nếu đích chậm, việc tiếp tục đọc dữ liệu máy khách không giới hạn chỉ chuyển hàng đợi vào bộ nhớ của relay. Áp lực ngược nghĩa là tạm dừng đọc khi bộ đệm chờ tương ứng đầy và tiếp tục khi ghi giải phóng chỗ.

Kết thúc ở một hướng cần một chính sách

TCP có thể đóng một hướng gửi trong khi hướng kia vẫn còn dữ liệu hữu ích. Quyết định cách lan truyền trạng thái đó sau khi các byte đã đệm được xả hết, và phân biệt đóng có trật tự với lỗi hoặc thời hạn.

Không điều nào trong số này đòi hỏi relay giải mã hoặc phân tích tải trọng của ứng dụng. Nó cần xử lý luồng đúng cách. Chỉ tăng kích thước bộ đệm không thể sửa một relay chờ sai bên hoặc giả định mỗi lần đọc tương ứng với một yêu cầu trọn vẹn.

Bài viết liên quan