-
[Backend] TCD와 UDPBack-End 2022. 3. 21. 11:25
TCD와 UDP
- TCP (Transmission Control Protocol)
- 신뢰성이 요구되는 애플리케이션에서 사용된다.
- 브라우저나 애플리케이션이 데이터를 송신과 수신할 경우에 사용된다.
- 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟(데이터, 메세지, 세그먼트라는 블록 단위)를 안정적으로 순서대로 에러가 없이 교환할 수 있게 된다.
- TCP (Transmission Control Protocol) 특징
연결형 서비스 = 가상 회선 방식을 제공한다.
- 3-way handshaking 과정을 통해 연결을 설정
- 4-way handshaking을 통해 연결을 해제
흐름제어(Flow control) = 데이터 처리 속도를 조절해서 수신자의 버퍼 오버플로우를 방지한다.
- 송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다.
- 수신자가 윈도우크기(window size)값을 통해 수신량을 정할 수 있다.
혼잡제어(Congestion control) = 네트워크 안에 패킷 수가 넘칠정도로 증가하는 것을 방지한다.
- 정보의 소통량이 많으면 패킷을 조금만 전송해서 혼잡 붕괴 현상이 일어나는 것을 막는다.
신뢰성이 높은 전송(Reliable transmission)
- Dupack-based retransmission
- 정상적인 상황에서는 ACK 값이 연속적으로 전송되어야 한다.
- 그러나 ACK값이 중복으로 올 경우 패킷 이상을 감지하고 재전송을 요청한다.
- Timeout-based retransmission
- 일정시간동안 ACK 값이 수신을 못할 경우 재전송을 요청한다.
- 일정시간동안 ACK 값이 수신을 못할 경우 재전송을 요청한다.
- UDP (User Datagram Protocol)
- 간단한 데이터를 빠른 속도로 전송하고자 하는 애플리케이션에서 사용한다.
- DNS 서버에 대한 조회 등에서 짧은 제어용 데이터를 송신과 수신을 할 경우와 음성이나 동영상 데이터를 수신할 경우에 사용된다.
- UTP 특징
- 비연결형 서비스로 연결 없이 통신이 가능하고 데이터그랩 방식을 제공한다.
- 데이터 경계를 구분합다. (데이터그램 서비스)
- 정보를 주고 받을때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
- 신뢰성 없는 데이터를 전송한다.(데이터 재전송과 데이터 순서 유지를 위한 작업을 하지 않는다.)
- 패킷관리가 필요합니다.
- 패킷 오버헤드가 적어 네트워크 부하가 감소되는 장점이 있다.
- 상대적으로 TCP보다 전송속도가 빠르다.
- TCP와 UDP의 차이점
TCP UDP Connection-oriented protocol
(연결지향형 프로토콜)Connection-less protocol
(비 연결지향형 프로토콜)Connection by byte stream
(바이트 스트림을 통한 연결)Connection by message stream
(메세지 스트림을 통한 연결)Congestion / Flow control
(혼잡제어, 흐름제어)NO Congestion / Flow control
(혼잡제어와 흐름제어 지원 X)Ordered, Lower speed
(순서 보장, 상대적으로 느림)Not ordered, Higer speed
(순서 보장되지 않음, 상대적으로 빠름)Reliable data transmission
(신뢰성 있는 데이터 전송 - 안정적)Unreliable data transmission
(데이터 전송 보장 X)TCP packet : Segment
(세그먼트 TCP 패킷)UDP packet : Datagram
(데이터그램 UDP 패킷)HTTP, Email, File transfer
에서 사용DNS, Broadcasting
(도메인, 실시간 동영상 서비스에서 사용)'Back-End' 카테고리의 다른 글
[Backend] 객체 지향 프로그래밍 OOP(object oriented programming) (0) 2022.03.15 [Backend] DDD(Domain-Driven-Design) - 도메인 주도 설계 (0) 2022.03.15 [Backend] 도메인이란 (0) 2022.03.15 [Backend] 백엔드 로드맵 (0) 2022.03.14 테스트 코드의 필요성 (0) 2022.02.23