
전송 제어 프로토콜(Transmission Control Protocol, TCP)은 근거리 통신망, 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적이고, 순서대로, 에러 없이 교환할 수 있게 합니다. TCP는 전송 계층에 위치하며, 네트워크의 정보 전달을 통제하는 프로토콜이자 인터넷을 구성하는 핵심 프로토콜 중 하나입니다. 웹 브라우저들이 월드 와이드 웹(WWW)에서 서버에 연결할 때 사용됩니다(예: SMTP, 파일 전송).
Window Size를 사용하여 한 번에 받고/보낼 수 있는 데이터의 양을 조정합니다.Acknowledgment Number를 통해 송신자는 수신자가 받은 데이터 양을 확인합니다. 예를 들면, 300번째 데이터를 받으면 Acknowledgment Number에 1을 더한 301을 보내고, 이 데이터의 순서 번호를 Sequence Number라고 합니다.Slow Start 기법을 사용합니다.TCP를 사용하는 송신자와 수신자는 데이터를 전송하기 전, 먼저 서로 통신이 가능한지 확인하고, 한 번에 얼마나 받을 수 있는지 등의 정보를 확인합니다. 이 과정을 3-way Handshake라고 하며, 신뢰성 있는 통신을 위해 필요합니다.
TCP는 HTTP와 다르게 패킷의 길이 정보를 명시하여 데이터 통신을 주고 받는다
여기서 왜? 라는 질문을 받았지만 선뜻 대답할 수 없었다
가장 큰 이유는 TCP가 스트림 기반 프로토콜로 바이트 스트림을 지속적으로 전달하기 때문이다
바이트 스트림이란?
한번에 한 바이트씩 연속적으로 전송되는 데이터의 흐름과 같이 끊임없이 연속되는 바이트 열
따라서 TCP는 지속적인 연결을 유지하면서 데이터를 전송하기 때문에 수신 측에서는 데이터의 경계를 알기 위해 길이 정보를 필요로 한다.
같은 맥락에서 예를 들자면 TCP가 너무 큰 데이터의 경우 패킷을 조각화 하여 전송하는데
이때 각 패킷의 길이 정보를 통해 원래의 데이터로 정확하게 재 조립이 가능 할 것이다.
반면, HTTP는 애플리케이션 계층의 프로토콜로, 각 요청과 응답이 독립적이고, 명확한 메시지 단위로 처리되기 때문에 (특히 Content-Length로 관리됨) TCP와 다른 것.
TCP 이중화 구조에서 노드 다운 및 복구 시 부하 분산 문제가 발생할 수 있습니다. 이를 해결하기 위해서는 세션 지속성 관리, 동적 재분배, 헬스 체크 강화 등의 방안이 필요함