밤빵's 개발일지
[TIL]20240918 TCP? UDP? 본문
TCP와 UDP라는 용어를 접하게 되면서, 이 두 용어는 인터넷 통신 프로토콜에서 매우 중요한 역할을 한다고 알게됐지만, 그래도 제대로 된 이해를 한 건 아니니까...이번 개발일지를 통해 TCP와 UDP의 차이점과 각각의 장단점을 알아보고, 나중에 네트워크 관련 개발을 할 때 도움이 될 수 있도록 정리해보려고 한다!
▶TCP와 UDP?
TCP와 UDP는 모두 전송 계층에서 사용하는 프로토콜이다. 전송 계층은 네트워크에서 데이터를 송수신할 때 필요한 규칙과 절차를 정의하는 중요한 계층이다. 이 두 프로토콜은 데이터가 컴퓨터 간에 어떻게 전달되고, 어떤 방식으로 연결이 이루어지는지를 결정한다. 자주 사용되는 용도는 비슷하지만, 동작 방식에 있어 중요한 차이가 있다.
→ TCP (Transmission Control Protocol):
신뢰성 있는 데이터 전송을 보장하는 연결형 프로토콜로, TCP는 데이터를 전송하기 전에 먼저 송신자와 수신자 간에 연결을 확립하고, 데이터가 올바르게 도착했는지 확인한 뒤 다음 데이터를 전송하는 방식이다.
→ UDP (User Datagram Protocol):
비연결형 프로토콜로, 데이터를 빠르게 전송하지만 신뢰성을 보장하지 않는다. 데이터를 전송할 때 연결 설정 없이 패킷을 보내고, 수신 확인이나 재전송 같은 과정이 없다.
▶TCP의 특징
TCP는 신뢰성을 보장하는 프로토콜로, 데이터가 손실되거나 순서가 뒤바뀌는 등의 문제를 해결해준다.
TCP의 주요 특징은 다음과 같다.
→ 연결 지향(Connection-Oriented):
TCP는 데이터를 전송하기 전에 송신자와 수신자 간에 연결을 확립한다. 이 과정은 흔히 3-way handshake라고 불리며, 송신자와 수신자가 서로 연결되어 있다는 사실을 확인한 후에 데이터를 주고받는다.
▷ 3-way handshake? TCP에서 송신자와 수신자가 연결을 확립하기 위한 과정
- 클라이언트가 서버에 연결 요청(SYN)
- 서버가 요청 수락(SYN-ACK)
- 클라이언트가 수락 확인(ACK)
이렇게 세 번의 메시지 교환을 통해 신뢰성 있는 연결이 이루어진다.
→ 신뢰성 있는 전송:
TCP는 데이터가 손실되었을 경우 이를 자동으로 재전송한다. 수신자는 데이터를 받은 후에 송신자에게 수신 확인 메시지(ACK)를 보내고, 송신자는 이를 확인하고 다음 데이터를 전송한다.
→ 순서 보장:
TCP는 전송된 데이터가 수신자에게 도착할 때 순서가 바뀌지 않도록 보장한다. 애플리케이션은 데이터를 올바른 순서대로 처리할 수 있다.
→ 흐름 제어 및 혼잡 제어:
TCP는 네트워크의 상태를 모니터링하면서 전송 속도를 조절한다. 수신자가 처리할 수 있는 만큼만 데이터를 보내고, 네트워크가 혼잡할 때는 전송 속도를 줄여 데이터를 안전하게 전송한다.
▶TCP의 예시 사용 사례
TCP는 데이터의 정확성과 신뢰성이 중요한 서비스에서 사용된다. 대표적인 예로는 웹 브라우징, 파일 전송(FTP), 이메일(SMTP), 데이터베이스 통신 등이 있다. 예를 들어, 웹 브라우저에서 웹 페이지를 요청할 때는 TCP 연결을 통해 데이터를 전송받는다. 데이터가 손실되면 재전송되기 때문에, 웹 페이지가 완전히 로드될 때까지 안정적으로 연결을 유지할 수 있다.
▶UDP의 특징
UDP는 TCP와는 반대로 신뢰성보다는 빠른 데이터 전송을 목적으로 설계된 프로토콜이다.
주요 특징은 다음과 같다.
→ 비연결형(Connectionless):
UDP는 데이터를 보내기 전에 연결을 설정하지 않는다. 그저 패킷을 수신자에게 바로 전송하며, 수신자가 그 패킷을 받았는지 여부를 확인하지 않는다.
→ 신뢰성 보장 없음:
UDP는 데이터가 도착했는지 확인하지 않고, 전송 중 데이터가 손실되거나 순서가 바뀌더라도 재전송하지 않는다.
→ 빠른 전송 속도:
UDP는 연결 설정 과정이나 오류 검출, 재전송 과정이 없기 때문에 TCP보다 훨씬 빠르게 데이터를 전송할 수 있다.
→ 단순한 구조:
UDP는 간단한 프로토콜로, TCP에서 제공하는 다양한 기능이 필요하지 않은 경우에 사용된다.
▶UDP의 예시 사용 사례
UDP는 속도가 중요한 애플리케이션에서 자주 사용된다. 대표적으로 실시간 스트리밍(영상, 음성), 온라인 게임, VoIP(인터넷 전화) 등에서 UDP가 사용된다. 예를 들어, 온라인 게임에서는 속도가 중요한데, 몇 개의 데이터 패킷이 손실되더라도 게임이 계속 진행되도록 빠르게 데이터를 전송하는 것이 더 중요하다.
▶TCP와 UDP의 차이점
구분 | TCP | UDP |
연결 방식 | 연결형 (3-way handshake를 통해 연결 확립) | 비연결형 (연결 설정 없이 바로 전송) |
신뢰성 | 신뢰성 보장 (데이터 손실 시 재전송) | 신뢰성 보장 없음 (데이터 손실 시 재전송 안 함) |
순서 보장 | 데이터 순서 보장 | 순서 보장 안 함 |
속도 | 상대적으로 느림 | 빠름 |
오버헤드 | 비교적 높음 (연결 및 흐름 제어로 인한 오버헤드 존재) | 낮음 (오버헤드 적음) |
사용 사례 | 웹 브라우징, 이메일, 파일 전송, 데이터베이스 통신 | 실시간 스트리밍, 온라인 게임, VoIP |
▶알아두면 좋은 점
TCP와 UDP는 각각의 특징과 목적에 따라 사용하는 상황이 다르다. 네트워크 프로그래밍을 할 때는 상황에 맞는 프로토콜을 선택하는 것이 중요하다.
아래는 TCP와 UDP의 특성을 바탕으로 알아두면 좋은 점들이다.
→ 신뢰성과 속도의 트레이드오프:
TCP는 신뢰성을 보장하지만 그만큼 속도가 느릴 수 있다. 반면, UDP는 신뢰성을 보장하지 않지만 속도가 빠르다. 따라서 신뢰성이 중요한 애플리케이션에는 TCP를, 속도가 더 중요한 애플리케이션에는 UDP를 선택하는 것이 적절하다.
→ 네트워크 환경 고려:
네트워크가 불안정하거나 데이터 손실이 발생할 가능성이 높은 환경에서는 TCP가 적합하다. 하지만 네트워크의 속도가 중요하거나, 데이터 손실이 애플리케이션에 큰 영향을 주지 않는다면 UDP가 더 효율적일 수 있다.
→ 사용 사례 이해:
실제 애플리케이션을 개발할 때는 TCP와 UDP의 사용 사례를 고려해야 한다. 예를 들어, 동영상 스트리밍이나 온라인 게임에서 TCP를 사용한다면, 데이터가 순서대로 도착하는 것을 기다리느라 지연이 발생할 수 있다. 이 경우 UDP를 선택해 전송 속도를 높이는 것이 적합하다.
'개발Article' 카테고리의 다른 글
[TIL]20240920 리플렉션(Reflection)의 활용 (2) | 2024.09.20 |
---|---|
[TIL]20240919 REST 와 SOAP (0) | 2024.09.19 |
[TIL]20240917 Singleton! (0) | 2024.09.18 |
[TIL]20240916 결제 연동 흐름의 보완점 (7) | 2024.09.16 |
[WIL]20240915 JSON직렬화/역직렬화 (0) | 2024.09.15 |