최근 기술 면접을 보러 간 회사에서 TCP 통신과 UDP 통신의 차이점에 대해서 설명해주세요라는 질문을 받았는데 순간 말문이 턱 막혔다.
생각해보니까 안드로이드 개발자라고 안드로이드나 객체지향 프로그래밍 쪽 공부만 하다보니 다른 CS 지식에 소홀했다는 생각이 들었다.
게다가 학부생 시절에도 네트워크 쪽은 워낙 좋아하지 않았어서... 특히 약한 부분이었는데 허를 제대로 찔렸다는 느낌이었다.
다행히 다른 질문에는 잘 대답해서 면접은 통과했지만 공부는 필요하다고 느꼈다.
TCP, UDP 이야기에 앞서 네트워크 통신 과정에 대한 이해가 필요하다. OSI 7계층 모델은 바로 이 네트워크 통신 과정을 총 7개의 계츠응로 구분한 산업 표준 모델이다.
OSI 7계층은 각각 밑에서부터 순서대로 다음과 같이 구성되어있다.
1. 물리 계층 (Physical Layer): 데이터를 전기적인 신호로 변환해서 주고받는 기능을 담당
2. 링크 계층 (Link Layer): 물리 계층으로 송수신되는 정보를 관리하여 안전하게 전달되도록 도와주는 역할
3. 네트워크 계층 (Network Layer): 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능 담당
4. 전송 계층 (Transport Layer): TCP와 UDP 프로토콜을 통해 통신 활성화. 포트를 개방하고 프로그램들이 전송할 수 있도록 제공
5. 세션 계층 (Session Layer): 데이터가 통신하기 위한 논리적 연결 담당. TCP/IP 세션을 만들고 없애는 책임
6. 표현 계층 (Presentation Layer): 데이터 표현에 대한 독립성 제공 및 암호화 역할 담당
7. 응용 계층 (Application Layer): 통신의 최종 목적지. 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행. 사용자 인터페이스, 전자우편, 데이터베이스 관리 등의 서비스 제공.
위의 OSI 7계층 모델은 어디까지나 참조 모델일뿐 실제 인터넷 프로토콜은 이 구조를 완전히 따르지는 않는다. 인터넷 프로토콜 스택(Internet Protocol Stack)은 현재 대부분 TCP/IP를 따른다.
TCP/IP는 인터넷 프로토콜 중 가장 중요한 역할을 하는 TCP
와 IP
의 합성어로 데이터의 흐름 관리, 정확성 확인, 패킷의 목적지 보장을 담당한다. 데이터의 정확성 확인은 TCP
가, 패킷을 목적지까지 전송하는 일은 IP
가 담당한다.
TCP (Transmission Control Protocol)
, UDP (User Datagram Protocol)
. 둘 모두 TCP/IP 모델의 전송계층에서 사용되는 프로토콜의 한 종류이다. 전송계층은 IP애 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당하는 계층이다.
따라서 TCP와 UDP의 차이점은 IP에 의해 패킷을 전달하고 이 과정에서 오류 검사 및 재전송 등을 하는 방법의 차이점과 같다.
간단하게 요약하자면 TCP는 신뢰성, 연결지향적이고 UDP는 비신뢰성, 비연결성을 지향한다.
이는 두 프로토콜의 데이터 송신 방법의 차이를 비교한 그림으로 이해할 수 있다.
TCP
는 데이터(패킷)의 전송 과정의 신뢰성을 보장하기 위해 수신자에게 수신 가능여부를 확인하고 송신한 후에는 정상 수신 여부를 계속 확인한다. (흐름제어 / 혼잡제어)
반면 UDP
는 수신자의 상태에 상관없이 일방적으로 데이터를 송신한다.
따라서 신뢰성이 요구되는 애플리케이션에서는 TCP를 사용하고 간단한 데이터를 빠른 속도로 전송하고자 하는 애플리케이션에서는 UDP를 사용한다.
TCP | UDP |
---|---|
연결지향형 프로토콜 | 비 연결지향형 프로토콜 |
바이트 스트림을 통한 연결 | 메세지 스트림을 통한 연결 |
혼잡제어, 흐름제어 | 혼잡제어와 흐름제어 지원 X |
순서 보장, 상대적으로 느림 | 순서 보장되지 않음, 상대적으로 빠름 |
신뢰성 있는 데이터 전송 - 안정적 | 데이터 전송 보장 X |
세그먼트 TCP 패킷 | 데이터그램 UDP 패킷 |
HTTP, Email, File transfer에서 사용 | DNS, Broadcasting (도메인, 실시간 동영상 서비스에서 사용) |
출처
1. "데이터가 전달되는 원리" OSI 7계층 모델과 TCP/IP 모델
2. TCP와 UDP 차이를 자세히 알아보자
3. OSI 7계층
4. TCP/IP (흐름제어/혼잡제어)
5. UDP
6. [Network] TCP 연결과정에 대해 알아보자