Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20240918 TCP? UDP? 본문

개발Article

[TIL]20240918 TCP? UDP?

최밤빵 2024. 9. 18. 22:01

TCPUDP라는 용어를 접하게 되면서, 이 두 용어는 인터넷 통신 프로토콜에서 매우 중요한 역할을 한다고 알게됐지만, 그래도 제대로 된 이해를 한 건 아니니까...이번 개발일지를 통해 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를 선택해 전송 속도를 높이는 것이 적합하다.