TCP와 UDP의 차이에 대해 알려주세요.
전송 계층(Transfer Layer)
- OSI 7계층 중 3계층에 해당한다.
- 서로 다른 호스트에서 동작하는 애플리케이션 프로세스들 간의 논리적 통신을 제공한다.
- 논리적 통신이란? 애플리케이션의 관점에서 보면 프로세스들이 직접 연결된 것처럼 보인다는 것을 의미
- 네트워크 라우터가 아닌 종단 시스템에서 구현된다.
- 클라이언트와 서버 간에 애플리케이션 계층 메시지를 전송하는 서비스를 제공한다.
- 트랜스포트 계층 패킷을 세그먼트(Segment)라고 한다.
UDP에 들어가기 앞서,
IP ( Internet Protocol)
- 인터넷의 네트워크 계층 프로토콜
- IP 서비스 모델은 호스트들 간에 논리적 통신을 제공하는 최선형 전달 서비스이다.
- 최선형 전달 서비스란 IP가 통신하는 호스트들 간에 세그먼트를 전달하기 위해서 최대한 노력하지만, 어떤 보장도 하지 않는 다는 것을 의미한다. 무결성, 데이터의 순서 그리고 전달을 보장하지 않는다.
- IP는 비신뢰적인 서비스(unreliable service)
TCP와 UDP
-
TCP와 UDP는 OSI 7계층 중 3계층인 Transfer Layer(전송 계층)에서 사용되는 프로토콜로 송신자와 수신자를 연결하는 통신 서비스, 데이터 전달을 담당하며 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당한다.
-
패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜 기반으로 구현되어 있다.
-
UDP : 애플리케이션에게 비신뢰적이고 비연결형인 서비스를 제공
-
TCP : 애플리케이션에게 신뢰적이고 연결지향형 서비스를 제공
-
종단 시스템 사이의 IP 전달 서비스를 종단 시스템에서 동작하는 두 프로세스 간의 전달 서비스로 확장하는 기능을 공통으로 갖고 있다.
역다중화(demultiplexing) : 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업
다중화(multiplexing) : 출발지 호스트에서 데이터를 소켓으로부터 모으고, 헤더정보로 세그먼트를 캠슐화하고, 네트워크 계층으로 전달하는 작업
UDP (User Datagram Protocol)
개념
- 사용자 데이터그램 프로토콜로, 데이터를 데이터그램 단위로 처리하는 프로토콜
- 데이터를 서로 다른 경로로 독립적으로 처리함
특징
-
비연결형 트랜스포트 프로토콜
-
다중화/역다중화 기능과 간단한 오류 검사 기능을 제외하면 IP에 아무것도 추가하지 않는다.
-
TCP는 혼잡제어 메커니즘을 가지고 있다. 실시간 애플리케이션은 종종 최소 전송률을 요구하고, 지연되는 세그먼트 전송을 원하지 않으며, 조금의 데이터 손실은 허용할 수 있다.
-
연결 설정이 없다.
- TCP의 3-way handshaking 이나 4-way handshaking과 같은 연결 설정, 해제 과정이 없다.
-
데이터의 수신 여부를 확인하지 않는다.
-
신뢰성이 낮다.
- 애플리케이션이 신뢰성을 애플리케이션 자체에서 제공한다면 신뢰적인 데이터 전송을 할 수 있다. Ex) QUIC 프로토콜
- 흐름 제어 또는 혼잡 제어 같은 기능이 없다.
-
연결 상태가 없다.
- TCP는 여러 헤더 정보를 포함하는 연결 상태를 갖는 반면, UDP는 연결 상태를 유지하지 않으며 어떤 헤더 정보도 기록하지 않는다. TCP보다 UDP에서 동작할 때 더 많은 클라이언트를 수용할 수 있다.
-
작은 패킷 오버 헤드
-
DNS, Broadcasting
UDP에서의 다중화(multiplexing)와 역다중화(demultiplexing)
UDP 소켓 123을 가진 호스트 A의 프로세스가 호스트 B의 UDP 소켓 486을 가진 프로세스에게 애플리케이션 데이터 전송을 원한다고 가정하자.
호스트 A는 애플리케이션 데이터, 출발지 포트번호(123), 목적지 포트번호(486)를 포함하는 트랜스포트 계층 세그먼트를 생성 한다.(다중화)
네트워크로부터 UDP 세그먼트들이 도착하면, 호스트 B는 세그먼트의 목적지 포트를 검사하여 세그먼트를 적절한 소켓으로 보낸다.(역다중화)
UDP 세그먼트 구조

UDP 체크섬
- UDP 체크섬은 오류 검출을 제공한다.
- 체크섬은 출발지로부터 목적지로 이동했을 때, UDP 세그먼트 안의 비트에 대한 변경사항이 있는지 검사하는 것이다.
방식
- 송신 측에서 UDP 세그먼트 안에 있는 모든 데이터를 16비트 워드 단위로 더하고 1의 보수를 수행한다.
- 이 결과값이 UDP 세그먼트의 체크섬 필드에 삽입된다.
- 만약 데이터 전송 과정에서 패킷의 무결성이 지켜진다면 수신측에서 데이터의 합과 체크섬의 합이 16비트가 1로 이루어져 있을 것이다. 만약 비트 중에서 0이 하나라도 있으면 패킷에 오류가 발생했음을 알 수 있다.
결론
- 링크 계층 프로토콜이 오류 검사를 제공하지만, 모든 링크가 오류 검사를 제공한다는 보장이 없기 때문에 UDP에서 체크섬을 통한 오류 검출을 제공한다.
- UDP는 오류 검사는 제공하지만, 오류를 회복하기 위한 어떤 일도 하지 않는다.
신뢰성 있는 데이터 전송
신뢰적인 채널이란?
- 전송된 데이터가 손상되지 않는다.
- 전송된 순서대로 전달된다.
TCP (Transmission Control Protocol)
개념
-
비신뢰적인 종단간의 네트워크 계층(IP)의 바로 상위에 구현된 신뢰적인 데이터 전송 프로토콜
-
오직 종단 시스템에서만 동작하고 중간의 네트워크 요소에서는 동작 X
-
일반적으로 TCP와 IP를 함께 사용하여 TCP/IP 프로토콜로 불리기도 함
- IP는 인터넷 망 속에서 IP 주소와 패킷과 같은 규칙을 통해 클라이언트와 서버 간에 통신할 수 있게 하는 것
- TCP는 IP 규칙으로 통신하기에 부족하거나 불안정한 단점들을 보완하기 위해 패킷 전송을 제어하여 신뢰성을 보장하는 것
-
네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 데이터를 세그먼트(Segment) 단위로 쪼개어 신뢰성(안정적으로, 순서대로, 에러 없이)을 기반한 통신을 제공함
특징
-
전이중 서비스 : 호스트 A와 호스트 B가 TCP 연결이 되어 있으면, 양방향으로 데이터가 송수신 될 수 있다.
-
항상 단일 송신자와 단일 수신자 (점대점) 관계이다.
- 한 송신자가 여러 수신자에게 데이터를 전송하는 멀티캐스팅은 TCP에서는 불가능하다.
-
연결형 서비스로 가상 회선 패킷 교환 방식을 제공한다.
- 가상 회선 방식 : 발신지와 수신지를 연결하여 패킷을 전송하기 위한 논리적 경로를 배정한다는 의미
3-way Handshaking을 통해 연결을 설정하고, 4-way Handshaking을 통해 연결을 해제한다.
-
전송 제어
- 흐름 제어 : 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지
- 오류 제어 : 데이터가 유실되거나 잘못된 데이터가 수신되었을 경우 대처하는 방법
- 혼잡 제어 : 네트워크 내의 패킷 수가 과도하게 증가하지 않도록 방지
-
높은 신뢰성을 보장한다.
TCP 세그먼트 구조

-
TCP 헤더와 클라이언트 데이터로 만들어짐
-
네트워크 계층 IP 데이터그램 안에 캡슐화 된다.
-
헤더 : 다중화와 역다중화를 하는데 사용하는 출발지와 목적지 포트번호를 포함한다.
-
순서 번호 (Sequence number) : 송신자에서 수신자로 가는 데이터 패킷의 순서번호를 붙이기 위해서 사용된다. 손실된 패킷을 검사하게 한다.
-
확인 응답 (Acknowledgement number) : 패킷이 정확히 수신되었다는 응답을 송신자에게 하기 위해 수신자에 의해서 사용된다. 패킷의 순서번호 또는 확인 응답된 패킷을 전달한다.
순서 번호와 확인 응답 필드는 신뢰적 데이터 전송 서비스를 가능하게 해주는 TCP 세그먼트 헤더에서 가장 중요한 부분이다.
TCP 연결

TCP 연결 설정이 된 후
-
양방향으로 데이터를 송수신할 수 있다.
- TCP 연결의 양 끝은 각각 자신의 송수신 버퍼를 갖고 있다.
-
클라이언트는 소켓을 통해 데이터 스트림을 전달한다.
- TCP는 데이터를 구조화되어 있지 않고, 순서대로 정렬된
바이트 스트림으로 본다.
-
데이터가 소켓을 통해 전달되면, 데이터는 클라이언트에서 동작하고 있는 TCP에 맡겨진다. -> 송신 버퍼로 데이터를 보냄
-
TCP가 세그먼트를 수신했을 때 TCP 연결의 수신 버퍼에 위치
-
TCP는 누적 확인 응답을 제공한다.
-
TCP 연결의 시작 수선 번호를 임의로 선택한다.
TCP의 흐름제어
흐름 제어 서비스 : 송신자가 수신자의 버퍼를 오버플로 시키는 것을 방지
오버플로가 발생하는 이유
- TCP는 데이터를 수신 버퍼에 저장
- 프로세스는 버퍼에서 데이터를 읽지만, 데이터가 버퍼에 도달한 시점에 읽을 필요는 없다.
- 애플리케이션이 데이터를 읽는 속도가 느리면 송신자가 점점 더 많은 데이터를 빠르게 전송함으로써 오버플로가 발생한다.
수신 윈도우(receive window)
- TCP는 송신자가 수신 윈도우라는 변수를 유지하여 흐름제어를 제공한다.
- 수신 윈도우는 수신 측에서 가용한 버퍼 공간이 얼마나 되는 지를 송신자에게 알려주는 데 사용된다.
TCP의 오류제어
TCP의 혼잡제어