S E P H ' S
[Network] TCP/IP 4계층 & TCP vs UDP 본문
TCP/IP (Transmission Control Protocol / Internet Protocol)
수많은 프로그램들이 인터넷으로 통신하는데 있어 가장 기반이 되는 프로토콜. 패킷 통신 방식의 IP와 전송 조절 프로토콜인 TCP로 이뤄져있다. IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다. TCP는 IP 위에서 동작하는 프로토콜로 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하므로 TCP/IP로 부른다.
TCP
패킷을 정상적으로 받을 수 있도록 하는 프로토콜이다. IP보다 전송 속도는 느리지만 패킷 전달 여부와 순서를 보장한다. 목적지에 도착한 패킷들을 순서대로 정렬하고 손상되거나 손실된 패킷이 있다면 출발지에 재요청하는 방식으로 진행한다.
IP
IP는 패킷 데이터들을 최대한 빨리 특정 목적지 주소로 보내는 프로토콜이다. 빨리 보내는 것이 목적이다. 패킷 전달 여부와 순서를 보장하지 않는다.
위의 두가지 프로토콜 방식을 조합하여 함께 TCP/IP라고 부른다. 이는 IP(인터넷 프로토콜)와 TCP(전송 제어 프로토콜)의 묶음을 의미한다. 송신자가 수신자에게 IP를 통해 최대한 빠르게 패킷을 전송하면 TCP를 활용하여 패킷을 정상적으로 수신받는다.
TCP/IP 4계층의 캡슐화, 역캡슐화
TCP/IP 4계층은 위 그림과 같이 애플리케이션 계층, 전송 계층, 인터넷 계층, 네트워크 접근 계층으로 이뤄져 있다. 데이터 전송 시, 데이터는 상위 계층에서 하위 계층으로 이동하고 계층 이동 마다 필요한 정보 (헤더)가 추가된다. 이를 캡슐화라고 한다. 반대로, 데이터 수신 시에는 하위 계층에서 상위 계층으로 이동하고 계층 이동마다 추가된 헤더를 읽고 알맞은 행동을 취한 후 헤더를 제거한다. 이를 역캡슐화라고 한다.
애플리케이션 계층(Application Layer)
- 사용자와 가장 가까운 계층으로 사용자-소프트웨어 간 소통을 담당하는 계층
- 애플리케이션을 실행하기 위한 데이터 형식이 저장됨
- 프로토콜로는 HTTP, HTTPS, FTP, SMTP, DNS 등이 있다.
전송 계층(Transport Layer)
- 통신 노드 간 신뢰성 있는 데이터 전송을 보장하는 계층
- 역캡슐화 과정에서 포트 번호를 사용해 데이터를 정확한 애플리케이션에 전달하는 역할도 한다.
- 네트워크 접근 계층과 인터넷 계층을 통해 데이터가 목적 기기까지 도착했다면 전송 계층은 포트 번호를 사용해 데이터를 목적 기기 내 적절한 애플리케이션으로 전달한다.
인터넷 계층(Internet Layer)
- 패킷을 최종 목적지까지 라우팅하는 계층
- 프로토콜로는 IP, ARP, RARP 등이 사용된다.
네트워크 접근 계층(Network Access Layer)
- 데이터를 전기신호로 변환한 뒤 물리 주소인 MAC 주소를 사용하여 알맞은 기기로 데이터를 전달하는 계층.
- 프로토콜로는 이더넷, 와이파이 등이 있다.
TCP vs UDP
TCP와 IP는 TCP/IP 4계층에서 계층적으로 보자면 TCP는 전송 계층, IP는 인터넷 계층으로 다른 계층에 속해있으며 IP의 빠른 패킷 속도, TCP의 패킷 전송 여부, 순서 보장이라는 장점을 사용하여 데이터 패킷을 전송하는 프로토콜이다.
반면 TCP 와 UDP는 다른 관점에서 바라봐야한다. 우선 둘다 전송 계층의 프로토콜이다. 같은 전송 계층의 프로토콜에서 데이터 전송 방식과 특징이 다른 프로토콜인 것이다. 두 프로토콜의 특징을 알아보도록 하자.
TCP
일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다. TCP는 연결형 서비스를 지원하는 프로토콜로 인터넷 환경에서 기본으로 사용한다.
TCP 특징
- 연결 지향 방식으로 패킷 교환 방식 사용
- 3-way handshaking 과정을 통해 연결, 4-way handshaking을 통해 해제
- 흐름 제어 및 혼잡 제어
- 높은 신뢰성 보장
- UDP 보다 속도가 느림
TCP는 패킷을 전송하기 위한 논리적 경로를 배정한다. 3-way handshaking과 같은 과정은 송수신지를 확실히 하여 정확한 전송을 보장하기 위해서 세션을 수립하는 과정을 말한다. 이러한 특성으로 신뢰성을 보장한다고 할 수 있다. 또한 데이터의 흐름제어(Stop and Wait, Sliding Window와 같은 기법), 혼잡제어(AIMD(Additive Increase / Multiplicative Decrease), Slow Start(느린 시작), Fast Retransmit(빠른 재전송), Fast Recovery(빠른 회복)) 기능을 한다. 이렇기에 UDP 보다는 속도가 상대적으로 느리다. 즉, 신뢰성이 중요할 때 TCP를 사용한다.
TCP 서버 특징
- 서버 소켓은 연결만 담당
- 연결과정에서 반환된 클라이언트 소켓은 데이터 송수신에 사용
- 서버와 클라이언트는 1대1로 연결
- 스트림 전송으로 전송 데이터 크기가 무제한
- 패킷에 대한 응답을 해야하므로 (시간 지연, CPU 소모) 성능이 낮다.
- Streaming 서비스에는 불리(손실된 경우 재전송 요청을 하기 때문에)
UDP
UDP는 TCP와는 다르게 비연결형 프로토콜이다. 연결을 위해 할당되는 논리적 경로가 없다. 그래서 패킷은 각각 다른 경로로 전송되고 각각의 패킷은 독립적 관계를 지닌다. 이렇게 서로 다른 경로로 독립적으로 처리된다. 또한 패킷방식이 아닌 데이터그램 방식을 제공한다.
패킷, 데이터그램
패킷 : 인터넷 내에서 데이터를 보내기 위한 경로 배정을 효율적으로 하기 위해 데이터를 여러개로 나눈 조각.
데이터그램 : 헤더 및 페이로드 섹션으로 구성되어있다. 데이터를 전송하는 방식이 불안정하고 전송 실패에 대한 notification도 없다. 즉 신뢰할 수 없는 서비스를 통해 전달되는 패킷을 지칭한다.
UDP 특징
- 비연결형 서비스로 데이터그램 방식을 제공
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않는다.
- UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
- 신뢰성이 낮다
- TCP보다 속도가 빠르다.
Checksum 이란?
네트워크를 통해 전송된 데이터의 무결성을 검사하는 값으로 무결성을 통해 네트워크를 통해 수신된 데이터에 오류가 없는지 여부를 확인한다.
UDP는 비연결형 서비스이기 때문에, 연결을 설정하고 해제하는 과정이 존재하지 않는다. 서로 다른 경로로 독립적으로 처리함에도 패킷에 순서를 부여하여 재조립하거나 흐름 제어, 혼잡 제어와 같은 기능도 처리하지 않아 TCP보다 속도가 빠르며 네트워크 부하가 적다는 장점이 있지만 신뢰성있는 데이터의 전송을 보장하지는 못한다. 그렇기 때문에 신뢰성보단 연속성이 중요한 스트리밍 같은 서비스에 자주 사용된다.
UDP 서버의 특징
- UDP 에는 연결 자체가 없어 서버 소켓과 클라이언트 소켓의 구분이 없다.
- 소켓 대신 IP를 기반으로 데이터를 전송한다.
- 서버와 클라이언트는 1:1, 1:N, N:M 등으로 연결될 수 있다.
- 데이터그램(메시지) 단위로 전송되며 그 크기는 65535바이트로, 크기를 초과하면 잘라서 보낸다.
- 흐름제어가 없어 패킷이 제대로 전송되었는지 오류가 없는지 확인이 불가하다.
- 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우 사용한다.
흐름제어, 혼잡제어
- 흐름제어 : 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것. 예를 들어 송신하는 곳에서 감당이 안되게 데이터를 빠르게 많이 보내면 수신자에서 문제가 발생하기 때문이다.
- 혼잡제어 : 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것이다. 만약 정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.
'CS > Network' 카테고리의 다른 글
[Network] SOP (2) | 2023.12.08 |
---|---|
[Network] DHCP (2) | 2023.12.08 |
[Network] 쿠키와 세션 (0) | 2023.12.01 |
[Network] HTTP 1.1 & 2.0 & 3.0 (0) | 2023.12.01 |
[Network] 브라우저에 URL을 입력했을 때 발생하는 일들 (0) | 2023.11.30 |