TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)는 인터넷에서 데이터를 전송하기 위해 사용되는 두 가지 주요 프로토콜이다. 이 두 프로토콜은 모두 IP(Internet Protocol) 위에서 동작하며, 서로 다른 방식으로 데이터를 전송한다.
1. TCP (Transmission Control Protocol)
TCP란?
- TCP는 연결 지향적(Connection-oriented) 프로토콜로, 데이터의 신뢰성을 보장하는 프로토콜이다. 패킷 손실, 중복 패킷, 순서가 잘못된 패킷 등의 문제를 처리하여 데이터를 안전하게 전달한다.
- TCP는 데이터를 스트림(Stream) 형태로 전송하며, 흐름 제어 및 혼잡 제어 기능을 가지고 있어 네트워크 환경에서 최적의 성능을 발휘하도록 설계되었다.
TCP의 주요 특징
- 연결 지향성: TCP는 서버와 클라이언트 간에 연결을 설정한 후 데이터를 전송한다. 연결은 세 단계로 이루어지며, 이를 3-way 핸드셰이크라 부른다. 데이터 전송이 끝나면 연결을 종료하는 4-way 핸드셰이크를 통해 연결을 안전하게 닫는다.
- 3-way 핸드셰이크: 연결 설정 단계.
- 클라이언트가 서버로 SYN 패킷을 보냄.
- 서버가 이를 받아 SYN-ACK 패킷으로 응답.
- 클라이언트가 서버로 ACK 패킷을 보내 연결을 확립.
- 4-way 핸드셰이크: 연결 종료 단계.
- 클라이언트가 연결을 닫기 위한 FIN 패킷 전송.
- 서버가 이를 받아 ACK 패킷으로 응답.
- 서버가 FIN 패킷을 보내 연결 종료 의사 전달.
- 클라이언트가 ACK 패킷을 보내고 연결 종료.
- 3-way 핸드셰이크: 연결 설정 단계.
- 데이터 전달 보장: TCP는 데이터를 확실히 전달하기 위해 패킷 손실을 감지하고 재전송한다. 만약 전송된 패킷이 손실되거나 손상되면, TCP는 해당 패킷을 재전송하여 정확한 데이터 전달을 보장한다.
- 순서 보장: 전송되는 패킷이 네트워크 환경에서 순서가 뒤바뀌는 경우에도, TCP는 패킷이 원래 순서대로 도착하도록 관리한다.
- 흐름 제어: 송신자와 수신자 간의 속도 차이를 해결하기 위해 흐름 제어를 수행한다. 수신자의 처리 속도가 느리다면 송신자는 전송 속도를 조절해 수신자가 데이터를 처리할 수 있게 한다.
- 혼잡 제어: 네트워크 혼잡 상태를 감지하고, 네트워크 상태에 맞게 전송 속도를 조절하여 네트워크 혼잡을 줄이는 기능을 제공한다.
TCP의 장점
- 신뢰성 보장: 데이터가 손실되지 않고 순서대로 도착한다.
- 데이터 흐름 제어 및 혼잡 제어: 네트워크 상태에 맞게 적절히 데이터 전송 속도를 조절한다.
- 안전한 데이터 전송: 오류가 발생하면 데이터를 재전송하고, 패킷이 손실되면 복구한다.
TCP의 단점
- 속도 저하: TCP는 신뢰성을 보장하기 위해 추가적인 프로토콜 오버헤드(예: 패킷 재전송, 흐름 제어, 혼잡 제어 등)가 있다. 이는 성능에 영향을 줄 수 있다.
- 연결 설정 비용: 연결 설정(3-way 핸드셰이크)과 연결 해제(4-way 핸드셰이크)에 시간이 소요되기 때문에 초기 연결 시간이 길어진다.
TCP의 사용 사례
TCP는 신뢰성이 중요한 경우에 주로 사용된다. 대표적인 사용 사례는 다음과 같다:
- 웹 브라우징(HTTP/HTTPS): 웹 페이지는 데이터의 신뢰성이 중요하므로 TCP를 사용한다.
- 파일 전송(FTP, SFTP): 파일을 정확하게 전송하기 위해 TCP를 사용한다.
- 이메일(SMTP): 이메일 전송에 TCP를 사용하여 데이터 손실을 방지한다.
- 원격 접속(SSH, Telnet): 원격으로 서버에 접속할 때 신뢰성을 보장하기 위해 TCP를 사용한다.
2. UDP (User Datagram Protocol)
UDP란?
- UDP는 비연결성(Connectionless) 프로토콜로, 데이터의 신속한 전송에 중점을 둔 프로토콜이다. 패킷 전달 보장, 순서 보장, 흐름 제어 등의 기능이 없기 때문에, TCP보다 단순하고 빠르다.
- UDP는 데이터그램 단위로 데이터를 전송하며, 송신자는 수신자가 데이터를 받았는지 여부를 알 수 없다. 따라서 비신뢰성을 가정한 통신에서 사용된다.
UDP의 주요 특징
- 비연결성: UDP는 TCP처럼 연결을 설정하지 않고 데이터그램을 바로 전송한다. 이로 인해 TCP의 핸드셰이크 과정이 없고, 더 빠르게 데이터를 전송할 수 있다.
- 데이터 전달 보장 없음: UDP는 데이터의 신뢰성을 보장하지 않는다. 패킷 손실, 중복 전송, 순서 뒤바뀜 등이 발생할 수 있으며, 이를 감지하거나 수정하지 않는다.
- 순서 보장 없음: UDP는 패킷이 도착하는 순서를 보장하지 않으며, 네트워크 상태에 따라 패킷이 순서대로 도착하지 않을 수 있다.
- 오버헤드 적음: UDP는 추가적인 기능(재전송, 흐름 제어, 혼잡 제어 등)이 없기 때문에 프로토콜 오버헤드가 매우 적어 데이터를 빠르게 전송할 수 있다.
- 빠른 전송: UDP는 데이터를 재전송하지 않기 때문에 실시간 데이터 전송이 필요할 때 적합하다.
UDP의 장점
- 빠른 데이터 전송: 추가적인 제어나 연결 설정 없이 데이터를 즉시 전송할 수 있다.
- 프로토콜 오버헤드가 적음: 흐름 제어, 혼잡 제어 등이 없기 때문에 빠르고 가벼운 프로토콜이다.
UDP의 단점
- 신뢰성 부족: 패킷이 손실되거나 순서가 뒤바뀌어도 복구되지 않으며, 데이터를 안전하게 전달할 수 없다.
- 순서 보장 없음: 패킷이 도착하는 순서를 보장하지 않기 때문에 데이터의 순서를 유지해야 하는 경우에는 적합하지 않는다.
UDP의 사용 사례
UDP는 속도가 중요하고 신뢰성보다 실시간성이 중요한 경우에 주로 사용된다. 대표적인 사용 사례는 다음과 같다:
- 실시간 스트리밍(음성/영상): 비디오 스트리밍, 화상 통화, 음성 통화 등에서는 패킷이 손실되더라도 신속한 전송이 중요하다.
- 온라인 게임: 온라인 멀티플레이어 게임에서는 빠른 반응이 중요하기 때문에, 일부 데이터 손실을 허용하는 UDP를 사용한다.
- DNS(Domain Name System): 도메인 이름을 IP 주소로 변환하는 작업은 빠르게 처리되어야 하므로 UDP를 사용한다.
- DHCP(Dynamic Host Configuration Protocol): 네트워크에서 IP 주소를 할당하는 DHCP 프로토콜도 UDP를 사용한다.
3. TCP와 UDP의 비교
특징 | TCP | UDP |
연결 방식 | 연결 지향적 (3-way 핸드셰이크) | 비연결적 |
데이터 전달 보장 | 데이터 전달 보장 (재전송 및 오류 수정) | 데이터 전달 보장 없음 |
패킷 순서 보장 | 순서 보장 | 순서 보장 없음 |
흐름 제어 및 혼잡 제어 | 있음 | 없음 |
오버헤드 | 비교적 높음 | 매우 적음 |
전송 속도 | 상대적으로 느림 | 매우 빠름 |
사용 사례 | 웹 브라우징, 파일 전송, 이메일, 원격 접속 등 | 실시간 스트리밍, 온라인 게임, DNS, DHCP 등 |
4. TCP와 UDP 사용의 선택 기준
- TCP가 적합한 경우:
- 데이터 신뢰성이 매우 중요할 때.
- 패킷 손실이 허용되지 않는 경우 (예: 파일 전송, 웹 브라우징).
- 순차적인 데이터 전송이 필요할 때 (예: 이메일, 채팅).
- UDP가 적합한 경우:
- 실시간 응답성이 중요한 경우 (예: 음성 통화, 비디오 스트리밍, 게임).
- 데이터 신뢰성보다 속도가 중요한 경우.
- 약간의 패킷 손실이 크게 문제가 되지 않는 경우.
- TCP는 신뢰성을 보장하는 프로토콜로, 데이터 전송 중 손실, 중복, 순서 문제 등을 해결해 안정적인 통신을 제공한다. 하지만 오버헤드가 있어 전송 속도가 상대적으로 느릴 수 있다. 주요 사용 사례로는 웹 브라우징, 파일 전송, 이메일, 원격 접속 등이 있다.
- UDP는 속도와 실시간성에 중점을 둔 프로토콜로, 연결 설정과 패킷 보장 기능 없이 데이터를 빠르게 전송한다. 신뢰성이 떨어지지만, 빠른 응답이 중요한 스트리밍, 온라인 게임, DNS 등의 서비스에 적합하다.
두 프로토콜은 각각의 장단점이 있으며, 네트워크 환경과 서비스의 특성에 따라 적합한 프로토콜을 선택하는 것이 중요하다.
728x90
'Backend study > Backend theory' 카테고리의 다른 글
IPC (Inter-Process Communication) (0) | 2024.09.22 |
---|---|
TCP's 3-way handshake, 4-way handshake (0) | 2024.09.20 |
Blocking과 Non-blocking (2) | 2024.09.18 |
경쟁 조건(Race Condition)과 교착 상태(Deadlock) (0) | 2024.09.17 |
프로세스(process)와 스레드(thread) (2) | 2024.09.16 |