TCP vs UDP
TCP는 Transmission Control Protocol의 약자이고, UDP는 User Datagram Protocol의 약자이다.
두 프로토콜은 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP프로토콜을 기반으로 구현되어 있지만, 서로 다른 특징을 가지고 있다.
- 신뢰성이 요구되는 애플리케이션 : TCP 사용
- 간단한 데이터를 빠른 속도로 전송하고자 하는 애플리케이션 : UDP 사용
TCP와 UDP의 차이는 위 표와 같다. 이제 각 방식을 자세히 알아보자
TCP(Transmission Control Protocol)
전송을 제어하는 프로토콜로 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이라 생각하면 된다.
TCP 특징
- 연결형 서비스 : 연결형 서비스로 가상 회선 방식을 제공한다.
- 3-way handshaking 과정을 통해 연결을 설정하고, 4-way handshaking을 통해 해제한다.
- 흐름 제어 및 혼잡 제어 기능을 수행한다.
- 흐름 제어 : 데이터 처리 속도를 조절하여 수진자의 버퍼 오버플로우를 방지
- 혼잡 제어 : 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지한다.
- 높은 신뢰성을 보장한다.
- Dupack-based retransmission
- 정상적인 상황에서는 ACK 값이 연속적으로 전송되어야 하지만 중복으로 올 경우 패킷 이상을 감지하고 재전송을 요청한다.
- Timeout-based retransmission
- 일정 시간동안 ACK값이 수신을 못할 경우 재전송을 요청한다.
- Dupack-based retransmission
- UDP보다 속도가 느리다.
- 전이중(Full-Duplex), 점대점(Point to Point) 방식을 사용한다.
- 전이중(Full-Duplex) : 전송이 양방향으로 동시에 일어날 수 있다.
- 점대점(Point to Point) : 각 연결이 정확히 2개의 종단점을 가지고 있다.
- 신뢰성 있는 전송이 중요할 때 사용하는 프로토콜이다.
- 예시 : 파일 전송
TCP 서버의 특징
- 서버 소켓은 연결만을 담당한다.
- 연결 과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다.
- 서버와 클라이언트는 1:1로 연결된다.
- 스트림 전송으로 전송 데이터의 크기가 무제한이다.
- 패킷에 대한 응답을 해야하기 때문에 시간지연, CPU소모 등으로 성능이 낮다.
- 손실될 경우 재전송 요청을 하기 때문에 스트리밍 서비스에 불리하다.
UDP(User Datagram Protocol)
사용자 데이터그램 프로토콜로 데이터를 데이터그램 단위로 처리하는 프로그램이다.
UDP 특징
- 비연결형 서비스로 데이터그램 방식을 제공한다.
- 연결을 설정하고, 해제하는 과정이 존재하지 않는다.
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
- UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
- UDP 헤더에는 송신자의 포트번호, 수신자의 포트번호, 데이터의 길이, 체크섬이 존재하고 이 중 체크섬은 데이터 오류 검사에 사용한다.
- 신뢰성이 낮다.
- TCP보다 속도가 빠르다.
- 패킷에 순서를 부여하여 재조립하거나 흐름 제어, 혼잡 제어와 같은 기능도 처리하지 않기 때문에 속도가 빠른 밤면에 네트워크 부하가 적어서 데이터의 전송을 보장하지 못하기 때문에 신뢰성이 떨어진다.
- 신뢰성보단 연속성이 중요한 서비스에 자주 사용된다.
- 예시 : 실시간 서비스(streaming)
UDP 서버의 특징
- UDP에는 연결 자체가 없어서 서버 소켓과 클라이언트 소켓의 구분이 없다.
- 소켓 대신 IP를 기반으로 데이터를 전송한다.
- 서버와 클라이언트는 1:1, 1:N, N:M 등으로 연결될 수 있다.
- 데이터그램 단위로 전송되며 그 크기는 65535바이트로, 크기가 초과하면 잘라서 보낸다.
- 흐름제어가 없어서 패키싱 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.
- 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용된다.
참고 블로그
'CS(Computer Science)' 카테고리의 다른 글
CS Study 2주차 : HTTP vs HTTPS / SSL(Secure Sockets Layer) (0) | 2022.11.09 |
---|---|
CS Study 2주차 : 대칭키와 공개키 (0) | 2022.11.09 |
CS Study 1주차 : OSI 7계층 (1) | 2022.11.05 |
CS Study 1주차 : TCP 3way, 4way handShake (0) | 2022.11.05 |
DTO, DAO, Entity (0) | 2022.08.08 |