본문 바로가기

CS/CS 정리

[가볍게 읽는 CS] TCP vs UDP

Photo by Nastya Dulhiier on Unsplash

TCP/IP와 UDP는 통신의 가장 기본적인 요소이다.

TCP(Transmission Control Protocol)는 데이터 손실이 없고 신뢰할 수 있는 통신이며,

UDP(User Datagram Protocol)는 데이터 손실을 감수하면서 빠른 통신을 보장한다.

이러한 차이는 TCP 통신이 신뢰할 수 있는 통신을 진행하기 위해 확인 단계를 거치고, 새롭게 통신할 때마다 데이터를 잘 수신했는지 확인하고, 수신하지 못한 경우에는 재전송하는 과정이 있기 때문이다.

 

TCP와 UDP는 기술면접에서 면접자의 기본기를 확인하기에 적합한 기본적인 내용 중 하나라고 생각한다.

그렇기 때문에, 지원 분야가 어디든 반드시 알고 있길 바란다.

 

TCP와 UDP의 공통점

1. 둘 다 전송 계층 프로토콜

TCP와 UDP는 OSI 7계층과 TCP/IP 4계층에서 모두 전송 계층(Transport Layer)에 속한다.

전송 계층은 애플리케이션 계층과 네트워크 계층 사이에 위치하여 종단간(end-to-end) 통신을 담당한다.

애플리케이션에서 생성된 데이터를 세그먼트(TCP) 또는 데이터그램(UDP)로 분할하고 재조립하는 역을 수행한다.

 

2. 포트 번호 사용

두 프로토콜 모두 16bit 포트번호를 사용하여 특정 애플리케이션이나 프로세스를 식별한다.

출발지 포트와 목적지 포트를 사용하여 데이터를 적확한 애플리케이션으로 전달한다.

잘 알려진 포트(0~1023), 등록된 포트(1024~49151), 동적/사설 포트(49152~65535)로 구분된다.

   ex) HTTP는 80번 포트, HTTPS는 443 포트를 기본적으로 사용

 

3. 체크섬을 통한 오류 감지

두 프로토콜 보두 데이터 무결성을 검증하기 위해 체크섬을 사용한다.

체크섬은 전송된 데이터의 비트 에러를 감지하는데 사용되는 것으로, 송신자는 데이터를 전송할 때 체크섬을 계산하여 헤더에 포함시킨다.

수신자는 받은 데이터의 체크섬을 다시 계산하여 헤더의 체크섬과 비교하게된다.

만약, 두 체크섬이 일치하지 않으면 데이터 전송 중 오류가 발생했을을 의미한다.

TCP에서는 체크섬이 필수지만, UDP에서는 선택적이다(하지만 대부분의 구현에서는 사용하는 것으로 알고 있다.)


TCP와 UDP의 차이점

1. 연결 지향성 vs 비연결성

TCP는 연결 지향적이다. 데이터 전송 전에 3-way handshake로 연결을 설정하고, 전송 후 연결을 종료한다.

* 3-way handshakeTCP의 연결 과정, 하단에서 설명하겠다.

반면 UDP는 비연결성을 지향한다. 연결 설정 없이 바로 데이터를 전송한다.

 

2. 신뢰성 vs 비신뢰성

TCP는 신뢰성이 있는 전송이다. 데이터 손실 시 재전송하며, 확인 응답(ACK)을 사용한다.

* ACK: Acknownledgement: 응답

UDP는 비신뢰성이다. 데이터 전송 성공 여부를 확인하지 않고, 손실되어도 재전송을 하지 않는다.

 

3. 순서 보장 vs 순서 미보장

TCP는 순서를 보장한다. 세그먼트에 순서 번호를 부여하여 올바른 순서로 데이터를 재조립하게 된다.

UDP는 순서를 보장하지 않는다. 데이터그램이 도착한 순서대로 처리되며, 순서는 언제나 바뀔 수 있다.

 

4. 흐름 제어와 혼잡 제어 유무

TCP는 흐름 제어와 혼잡 제어 메커니즘을 모두 포함한다. 수신자의 처리 능력에 맞춰 전송 속도를 조절(슬라이딩 윈도우 기법 사용)하고,

네트워크의 혼잡 상황을 감지하여 전송 속도를 조절하기도 한다.

UDP는 그런거 없다.

 

5. 속도 차이

TCP는 연결 설정, 오류 검사, 재전송 등으로 인해 상대적으로 느리다. 하지만, UDP는 오버헤드가 적어 TCP보다 빠르다.


각각의 동작 원리

▶︎ TCP의 동작 원리

1. 3-way handshake(SYN, SYN-ACK, ACK):

    TCP의 연결 설정 과정이다. 순서는 아래와 같다.

    클라이언트가 SYN(Synchronization: 동기화) 패킷을 서버에 보낸다(연결 요청)

    서버가 SYN-ACK 패킷으로 응답한다(요청 수락)

    클라이언트가 ACK패킷을 보내 연결을 확립한다.

 

2. 4-way handshake(FIN, ACK)

    TCP의 연결 해지 과정이다. 순서는 아래와 같다.

    클라이언트는 연결을 종료하고자 서버에 FIN 플래그를 보내고, FIN WAIT 상태에 들어간다.

    서버는 클라이언트로 부터 FIN 플래그를 수신한 뒤 ACK 패킷을 보낸 후 데이터를 모두 보낼 때 까지 잠시간 TIME-OUT 상태가 된다. 

    이 때 서버는 CLOSE WAIT 상태가 된다.

    클라이언트는 서버에 ACK를 보내 응답하고, 상태가 FIN WAIT에서 TIME WAIT로 변경된다.

    클라이언트의 ACK 응답을 받은 서버는 연결을 해지한다.

    이 때, 클라이언트는 ACK를 보낸 후, 일정 시간동안 기다리게 되는데, 아직 서버에서 받지 못한 데이터가 연결이 해제되어 유실되는 경우를 대비해 잉여 패킷을 기다리는 TIME OUT 상태를 일정 시간 유지한다.

 

3. 순서 번호와 확인 응답 번호:

    TCP의 연결 설정 과정이다. 순서는 아래와 같다.

    TCP는 각 세그먼트에 순서 번호(Sequence Number)를 부여한다.

    수신 측은 확인 응답 번호(Acknownledgement Number)로 다음에 받기를 기대하는 바이트 순서 번호를 알린다.

    이를 통해 데이터의 순서를 보장하고, 손실된 데이터를 탐지하게 된다.

 

4. 슬라이딩 윈도우:

    흐름 제어를 위해 사용되는 매커니즘이다.

    수신자가 처리할 수 있는 데이터의 양을 동적으로 조절한다.

    송신자는 확인 응답을 기다리지 않고 윈도우 크기만큼의 데이터를 연속해서 전송할 수 있다.

 

5. 재전송 매커니즘:

    타임아웃 재전송: 일정 시간 내에 확인 응답이 오지 않으면 데이터를 재전송한다.

    빠른 재전송: 중복된 ACK를 3번 받으면 해당 세그먼트를 즉시 재전송한다.

 

▶︎ UDP의 동작 원리

1. 간단한 헤더 구조:

    UDP의 헤더는 단순하다. 구성은 아래와 같다.

    출발지 포트(16bit) / 목적지 포트(16bit) / 길이(16bit) / 체크섬(16bit)

 

2. 체크섬(선택적):

    데이터의 무결성을 검증하기 위해 사용된다.

    체크섬 계산은 UDP 헤더, 데이터, 그리고 IP 헤더의 일부를 포함한다.

    선택적으로 구현한다고 하지만, 보통은 구현에서 사용하는 편이다.

 

3. 비연결성 통신:

    연결 설정 없이 바로 데이터를 전송하며, 각 데이터그램은 독립적으로 처리된다.

    송신자는 데이터를 보낸 후 망각하며(fire-and-forgot), 수신자는 도착한 데이터그램을 순서에 상관없이 처리한다.

 

4. 브로드캐스트와 멀티캐스트 지원:

    UDP는 여러 수신자에게 동시에 데이터를 보낼 수 있다.

 

이러한 동작 원리의 차이로 인해 TCP는 채팅과 같은 신뢰성 있는 데이터 전송에, UDP는 실시간 영상 스트리밍과 같은 빠른 전송이 필요한 경우에 주로 사용된다.


예상 면접 질문

Q1 :TCP와 UDP 통신의 차이는?

A: TCP는 연결 지향적이고 신뢰성과 순서를 보장하여 정확성이 중요한 통신에 사용되는 반면, UDP는 비연결성이고 신뢰성을 보장하지 않아 더 빠르며 실시간성이 중요한 통신에 주로 사용됩니다.

 

Q2: TCP 방식의 연결 방식을 설명해주세요.

A: TCP는 3-way handshake를 통해 연결을 설정하고, 데이터 전송 중에는 순서 번호와 확인 응답을 사용하여 신뢰성을 보장하며, 전송이 완료되면 4-way handshake로 연결을 종료합니다.

 

Q3: UDP 방식의 연결 방식과 사용 사례를 설명해주세요.

A: UDP는 비연결성 프로토콜로, 연결 설정 없이 데이터를 직접 전송합니다. 신뢰성과 순서를 보장하지 않아 빠른 전송이 가능하며, 실시간 스트리밍, 온라인 게임, DNS 조회 등 속도가 중요하고 일부 데이터 손실이 허용되는 애플리케이션에서 주로 사용됩니다.

'CS > CS 정리' 카테고리의 다른 글

[영상처리] NV21과 YV12의 차이점  (0) 2024.06.24
Bitmap과 YUV의 차이점  (0) 2024.06.24
[네트워크] 캐시(Cache)  (0) 2023.01.08