이것은 어리석은 질문 일지 모르지만 저와 소수의 친구가 TCP의 잠재적 한계를 논의하고 있습니다. 클라이언트를 수신하고 (게이트웨이를 생각할) 연결된 모든 클라이언트 데이터를 연결된 단일 kafka 게시자를 통해 하나의 주제로 라우팅하는 응용 프로그램이 있습니다.
내 친구 중 하나는 TCP가 보내는 모든 메시지 (kafka가 아니라 기본 전송 프로토콜 자체가 문제임)마다 새로운 연결을 설정하기 때문에 TCP 가이 게이트웨이에 문제가 될 것이라고 말하고 있습니다. 매번 새로운 포트가 필요합니다. 이 클라이언트 메시지 (기가 바이트)를 전송하는 속도에 따라 kafka는 읽을 포트가 부족합니다.
나는 몇 년 동안 개발을 해 왔으며 이전에 들어 본 적이 없으며 TCP 작동 방식에 대한 이해를 낮추고 싶습니다. TCP 연결을 설정할 때 응용 프로그램이 시간 초과되거나 서버 또는 클라이언트가 강제로 닫을 때까지 해당 연결이 열린 상태로 유지됩니다. 이 연결을 통해 전송되는 데이터는 스트림이며 3V (볼륨, 속도, 다양성)에 관계없이 새 연결을 열거 나 닫지 않습니다.
포트가 이동하는 한, 하나의 포트가 브로드 캐스트에 사용되고 내부 파일 디스크립터 포트는 응용 프로그램이 개별 클라이언트의 읽기 / 쓰기를 위해 관리하는 것입니다. TCP가 쓰는 모든 패킷에 대해 새로운 연결을 설정하는 것을 TCP를 이해하지 못했습니다.
이 질문이 직접적이거나 모호하지 않은 경우 사전에 사과드립니다. 나는 정말 당황스럽고 누군가 내 동료의 말에 더 많은 맥락을 제공하기를 바라고 있습니까?
SO_REUSEADDR
소켓을 더 빨리 닫고 사용하여 임시 포트 범위를 늘리는 등의 방법이 있습니다. 또한 TCP_FASTOPEN
여러 OS 수준 토글을 사용하여 잘 알려진 다른 TCP 제한 사항을 해결할 수 있습니다. 어느 쪽이든 테스트 할 워크로드가 없을 때 TCP의 한계에 대해 논의 할 필요가 없습니다.