Đây có thể là một câu hỏi ngớ ngẩn nhưng tôi và một vài người bạn đã thảo luận về những hạn chế tiềm ẩn của TCP. Chúng tôi có một ứng dụng sẽ lắng nghe khách hàng (nghĩ về một cổng) và định tuyến tất cả dữ liệu khách hàng được kết nối thông qua một nhà xuất bản kafka được kết nối đến một chủ đề.
Một trong những người bạn của tôi nói rằng TCP sẽ là một vấn đề đối với cổng này bởi vì nó sẽ thiết lập một kết nối mới cho mỗi tin nhắn mà nó gửi (không phải kafka mà chính giao thức vận chuyển cơ bản là vấn đề), mỗi lần cần một cổng mới. Với tốc độ chúng tôi sẽ gửi những tin nhắn khách hàng này (gigabyte), kafka sẽ hết cổng để đọc từ ??
Tôi đã thực hiện phát triển trong vài năm và chưa bao giờ nghe về điều này trước đây và muốn có được sự hiểu biết ở cấp độ thấp hơn (mà tôi nghĩ rằng tôi có) về cách thức hoạt động của TCP. Tôi hiểu rằng khi bạn thiết lập kết nối TCP, kết nối đó vẫn mở cho đến khi ứng dụng hết thời gian hoặc bị đóng bởi máy chủ hoặc máy khách. Dữ liệu được gửi qua kết nối này là một luồng và sẽ không mở / đóng các kết nối mới bất kể 3 V (âm lượng, vận tốc, sự đa dạng).
Theo như các cổng, một cổng được sử dụng để phát sóng và cổng mô tả tệp nội bộ là thứ mà ứng dụng quản lý để đọc / ghi của từng máy khách. Tôi chưa bao giờ hiểu TCP để thiết lập các kết nối mới cho mỗi gói mà nó ghi.
Tôi xin lỗi trước nếu câu hỏi này không trực tiếp và quá mơ hồ. Tôi thực sự bối rối và đang hy vọng ai đó có thể cung cấp thêm một số bối cảnh cho những gì đồng nghiệp của tôi đang nói?
SO_REUSEADDR
để đóng ổ cắm nhanh hơn, tăng phạm vi cổng phù du, v.v. Ngoài ra TCP_FASTOPEN
, một số toggles cấp hệ điều hành có thể được sử dụng để khắc phục các hạn chế nổi tiếng khác của TCP. Dù bằng cách nào, không có lý do nào để thảo luận về các hạn chế của TCP khi bạn thậm chí không có khối lượng công việc để kiểm tra.