
TCP(Transmission Control Protocol)는 인터넷 프로토콜(IP)과 함께 사용되어 데이터의 신뢰성 있는 전송을 보장하는 전송 계층 프로토콜입니다. TCP는 연결 지향적이고, 데이터의 전송이 완료되었는지 확인하며, 패킷의 순서를 보장하는 등 신뢰성을 중요시하는 통신에 사용됩니다.
TCP는 데이터 전송의 신뢰성을 보장하는 핵심 프로토콜로, 손실, 오류, 순서 뒤바뀜 등의 문제를 해결하는 다양한 메커니즘을 제공합니다. 신뢰성 있는 데이터 전송이 필요한 애플리케이션에서 주로 사용되며, 속도보다는 정확한 데이터 전달이 중요한 경우에 적합합니다.
즉, TCP는 신뢰성과 데이터 정합성이 중요한 애플리케이션에 사용됩니다. 예를 들어, 웹 브라우징(HTTP/HTTPS), 파일 전송(FTP), 이메일 전송(SMTP), 원격 로그인(SSH, Telnet) 등에서는 TCP를 사용하여 데이터를 전송합니다.
TCP는 데이터 전송 전에 송신자와 수신자 간의 연결을 설정합니다. 이 과정은 3-way 핸드셰이크(Three-way Handshake)라고 불리며, 이 과정이 완료되어야 본격적으로 데이터가 전송됩니다. 이는 신뢰할 수 있는 통신을 위한 기초입니다.
TCP는 데이터 전송의 신뢰성을 보장합니다. 송신 측에서 전송된 데이터가 제대로 수신되지 않으면 다시 전송하는 메커니즘을 가지고 있으며, 데이터가 손실되거나 손상된 경우 자동으로 재전송을 요청합니다.
송신자는 각 패킷에 대한 확인 응답(ACK)을 수신자로부터 받아야 다음 패킷을 보낼 수 있습니다. 이 확인 응답 덕분에 송신자는 데이터가 제대로 도착했는지 알 수 있습니다.
TCP는 전송된 데이터가 순서대로 도착할 수 있도록 패킷에 일련 번호(Sequence Number)를 부여합니다. 네트워크의 지연이나 경로에 따라 패킷이 순서대로 도착하지 않더라도 수신자는 일련 번호를 기준으로 데이터를 재조립하여 원래 순서대로 복원합니다.
송신자가 너무 많은 데이터를 한꺼번에 보내는 것을 방지하기 위해 수신자의 상태를 고려한 흐름 제어를 제공합니다. 수신자가 처리할 수 있는 데이터 양을 송신자에게 알려주며, 이를 기반으로 송신자는 전송 속도를 조절합니다. 이를 통해 송신자와 수신자 간의 전송 균형을 맞추고, 데이터 손실을 줄입니다.
네트워크 혼잡을 줄이기 위해 TCP는 혼잡 제어를 수행합니다. 네트워크 상태를 파악하고 전송 속도를 조절함으로써 혼잡을 완화합니다. 혼잡 제어는 네트워크가 과부하 상태에 빠지지 않도록 하는 중요한 메커니즘입니다.
TCP는 데이터가 너무 큰 경우 이를 여러 개의 작은 패킷으로 분할하여 전송하고, 수신 측에서는 이 패킷들을 다시 조립하여 원본 데이터를 복원합니다. 이는 데이터가 다양한 네트워크 환경에서 효율적으로 전송될 수 있도록 도와줍니다.
TCP 연결을 설정하는 과정입니다. 송신자와 수신자는 아래 세 단계로 연결을 성립합니다.
데이터를 전송할 때, 송신자는 패킷을 전송하고 수신자로부터 확인 응답(ACK)을 기다립니다. 수신자가 데이터를 성공적으로 받으면 ACK를 송신자에게 보내고, 송신자는 다음 패킷을 전송합니다. 패킷이 손실되거나 손상되면 재전송이 이루어집니다.
데이터 전송이 끝나면 연결을 해제하기 위한 4-way 핸드셰이크를 수행합니다.
패킷의 손실이나 중복, 순서가 뒤바뀌는 문제를 처리하고, 이를 해결할 수 있는 기능을 제공하여 신뢰성 있는 데이터 전송을 보장합니다.
패킷을 순서대로 수신할 수 있으며, 수신자는 데이터가 정렬된 상태로 수신하게 됩니다.
전송된 데이터가 손실되거나 손상되면 자동으로 재전송되어 오류를 복구합니다.
네트워크 혼잡을 완화하여 트래픽이 과도하게 몰리는 것을 방지합니다.
연결 설정, 흐름 제어, 오류 복구 등의 과정 때문에 UDP에 비해 속도가 느립니다. 실시간 전송에는 적합하지 않을 수 있습니다.
TCP는 데이터 전송 시 추가적인 정보(헤더)를 포함시키며, 이로 인해 더 많은 네트워크 자원이 소모됩니다.
중복 ACK가 3번 이상 발생할 때 타임아웃을 기다리지 않고 손실된 패킷을 즉시 재전송하는 방식입니다. 중복 ACK는 특정 패킷이 손실되었음을 의미하므로, 빠른 재전송을 통해 데이터를 빠르게 복구할 수 있습니다.
중복 ACK가 발생하지 않거나, 다른 이유로 송신자가 일정 시간 동안 수신자의 확인 응답(ACK)을 받지 못하면 타임아웃이 발생합니다. 이 경우 송신자는 해당 패킷을 다시 전송합니다.
타임아웃 기반 재전송은 빠른 재전송보다 느리지만, 중복 ACK가 발생하지 않는 상황에서도 패킷 손실을 복구하는 기본적인 메커니즘입니다.