[CS] 네트워크 프로토콜 - OSI 7 Layer, TCP/IP, TCP vs UDP, HTTP/3.0

김희정·2024년 1월 29일
0

CS

목록 보기
1/1

들어가며

웹 애플리케이션을 개발하다보면, 네트워크와 통신이란 피할 수 없는 개념입니다. 만들어진 애플리케이션은 HTTP 프로토콜 위에서 동작하고, 다양한 애플리케이션과의 통신은 피할 수 없습니다.

예를 들면, 날씨 API, 지도 API 등 Open API로 정보를 받아온다던가, 다른 프로그램과 연결하기 위해 Socket 통신, 실시간 애플리케이션을 위한 WebSocket 통신 등이 있습니다.

이러한 통신은 네트워크 프로토콜과 밀접한 연관이 있습니다. 이번 포스팅에서는 널리 알려진 OSI 7계층과 TCP/IP 프로토콜과 TCP/UDP, 다양한 프로토콜 등에 대해 정리해보는 시간을 가져볼까 합니다.


1. 네트워크 계층적 프로토콜

네트워크(Network)란, 통신이 가능한 서로 연결된 장치의 모임입니다. 장치가 서로 통신하기 위해서는 여러 계층의 네트워크 프로토콜 위에서 여러 프로세스를 거쳐 통신합니다.

네트워크 프로토콜

컴퓨터 네트워크의 프로토콜은 네트워크 내의 장치 또는 시스템 간에 데이터가 교환되고 통신되는 방식을 제어하는 일련의 규칙 혹은 지침을 나타냅니다.

이러한 프로토콜은 데이터의 패킷의 형식, 구조 및 순서는 물론 장치가 통신 세션을 설정, 유지 및 종료하기 위해 따라야하는 절차 및 동작을 정의합니다.

네트워크 계층적 프로토콜

흔히 알려진 OSI 7계층 혹은 TCP/IP 프로토콜 스택은 컴퓨터 네트워크에서 사용되는 프로토콜의 계층적 집합을 설명하는 개념입니다.


1.1 OSI 7 Layer

OSI 7 계층은 ISO (국제 표준화 기구, International Standard Organization)에서 정의한 네트워크 표준 모델입니다.

네트워크 통신이 일어나는 과정을 7단계로 나누어 설명하는 모델입니다.

PDU(Process Data Unit)

각 계층에서 전송되는 단위


1) 물리적 계층

  • 물리적인 전송 매체를 통하여 상위 계층인 데이터 링크 계층으로부터 전달된 비트 스트림을 상대측 물리 계층에 전달하는 기능을 수행한다.
  • 데이터 전기적인 신호(0,1)로 변환해서 주고받는 기능 수행
  • 단지 데이터를 전달만 할 뿐, 전송받으려는 데이터가 무엇인지, 어떤 에러가 있는지 신경 X
  • 단위: 0과 1로 이루어진 비트(Bit)
  • 장비: 통신 케이블, 리피터, 허브 등

2) 데이터 링크 계층

  • 물리적인 네트워크 사이에 데이터 전송을 담당하는 계층
  • 물리계층을 통해 송수신되는 정보(전기 신호)를 데이터로 변경
  • 프레임에 물리적 주소(MAC Address) 부여, 에러검출, 재전송, 흐름제어 수행
  • 전송 단위(PDU): 프레임(Frame)
  • 장비: 브리지, 스위치 등
  • 프로토콜: 이더넷, MAC, LAN, Wifi

MAC Address

컴퓨터 간에 데이터를 전송하기 위한 컴퓨터 물리적 주소

MAC vs IP

IP 주소 간의 통신은 각 라우터에서 일어나는 MAC 주소와 MAC 주소 통신의 연속적인 과정이다.


3) 네트워크 계층

  • 라우터(Router)를 통해 경로를 선택(Route)하고 주소를 정하고(IP) 경로에 따라 패킷을 전달해주는 역할
  • 두 장치가 동일한 네트워크에 있는 경우, 네트워크 계층 필요 X
  • 전송 단위(PDU): 패킷(Packet)
  • 장비: 라우터
  • 프로토콜: IP, ICMP 등

4) 전송 계층

  • 발신지에서 목적지(End-to-end) 간 통신을 제어
  • 전송 단위(PDU): Segment(TCP), Datagram(UDP)
  • 장비: 게이트웨이(Gateway), L4 스위치
  • 프로토콜: TCP, UDP, ARP, RTP. 대부분 TCP를 사용

5) 세션 계층

  • 통신 세션을 구성하는 계층으로, 포트(Port) 번호를 기반으로 연결
  • 통신 장치 간의 상호 작용을 설정하고 유지하며 동기화
  • TCP/IP 세션을 만들고 없애는 역할. 네트워크 상 양쪽 연결을 관리하고 연결을 지속시켜주는 계층
  • 프로토콜: NetBIOS, SSH, TLS

세션(Session)

클라이언트와 웹 서버 간 네트워크 연결이 지속 유지되고 있는 상태


6) 표현 계층

  • 데이터를 준비하는 역할.
  • 데이터의 변환, 암호화/복호화, 압축 등을 담당한다.

7) 응용 계층

  • 사용자와 직접 접하는 유일한 계층, 응용 SW를 도와주는 계층
  • 사용자로부터 정보를 입력받아 하위 계층으로 전달하고 하위 계층에서 전송한 데이터를 사용자에게 전달
  • 프로토콜: HTTP, DNS, Telnet, FTP, SMTP 등

1.2 TCP/IP

TCP/IP는 TCP(전송 제어 프로토콜)와 IP(인터넷 프로토콜)로 이루어져 있는 프로토콜입니다. TCP/IP는 4계층이지만, 통상적으로 IP 프로토콜 위에 TCP 프로토콜이 놓이게 되므로 TCP/IP로 불리게 되었다고 합니다.


1) 네트워크 인터페이스 계층

  • OSI 7계층에서 1, 2계층 담당. 데이터가 실제로 네트워크를 통해 전송되는 역할
  • TCP/IP 패킷을 네트워크 매체로 전달하는 것과 네트워크 매체에서 TCP/IP 패킷을 받아들이는 과정을 담당
  • 에러 검출 기능(Detecting errors), 패킷의 프레임화(Fraimg packets)
  • 물리적인 주소로 MAC을 사용

2) 인터넷 계층

  • OSI 7계층에서 3계층
  • IP(인터넷 프로토콜)가 있는 인터넷 계층.
  • 어드레싱(addressing), 패키징(packaging), 라우팅(routing) 기능을 제공
  • 네트워크상 최종 목적지까지 정확하게 연결되도록 연결성을 제공하게 됨.
  • 프로토콜: IPv4, IPv6, ICMP, ARP

3) 전송 계층

  • OSI 7계층에서 4계층 담당
  • 두 지점간에 통신을 연결하는 역할
  • IP와 Port를 이용하여 프로세스와 통신
  • 프로토콜: TCP, UDP

4) 애플리케이션 계층

  • OSI 7계층에서 5, 6, 7계층 담당
  • 최상위 계층. 애플리케이션과 네트워크 서비스가 통신할 수 있는 인터페이스 제공
  • TCP/UDP 기반의 응용 프로그램 구현할 때 사용
  • 사용자와 직접 상호작용하는 계층
  • 프로토콜: DNS, HTTP, SSH, FTP, SMTP

2. TCP vs UDP

TCP와 UDP는 OSI 7계층 혹은 TCP/IP 프로토콜의 전송 계층에 해당하는 프로토콜입니다. 전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하는 계층으로, 쉽게 말해 데이터의 전달을 담당합니다.

2.1 TCP

TCP란 전송 제어 프로토콜(Transmission Control Protocol)의 약자입니다. TCP는 신뢰할 수 있는 프로토콜로, 현재는 대부분 TCP를 이용하고 있습니다.

TCP의 특징

  • 연결 지향 - 3 way handshake 연결, 4-way handshake 연결 해제
  • 신뢰성 보증 - 데이터 전달 보증, 에러 검출, 순서 보장
  • 서버와 클라이언트는 1대 1로 연결
  • 스트림 전송으로 전송 데이터의 크기가 무제한
  • UDP에 비해 성능이 낮다. - 패킷에 대한 응답 (시간 지연, CPU 소모)
  • 스트리밍 서비스에 불리하다. (손실된 경우 재전송 요청)
  • PDU - Segment

3-way handshake

TCP는 세션을 협상하고 시작하기 전에 3-way handshake 과정을 통해 연결을 검증합니다.

  1. 클라이언트는 서버에게 접속 요청 메세지(SYN)를 전송하고, SYN_SENT 상태가 됩니다.
  2. 서버는 SYN 요청을 받고 클라이언트에 요청을 수락 메세지(SYN+ACK)를 전송하고, SYN_RECEIVED 상태가 도비니다.
  3. 클라이언트는 서버에게 수락 확인 메세지(ACK)를 전송하고, 서버는 ESTABLISHED 상태가 됩니다.

2.2 UDP

UDP는 사용자 데이터그램 프로토콜(User Datagram Protocol)의 약자입니다. 보안과 신뢰성보다 전송 속도와 효율성이 더 중요한 경우 데이터를 전송하기 위해 인터넷 프로토콜(IP)과 함께 오래 사용된 프로토콜입니다.

UDP 특징

  • 비연결지향
  • 낮은 신뢰성 - 데이터 전달 보증 X, 순서 보증 X
  • CheckSum으로 최소한의 오류만 검출
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
  • 서버와 클라이언트는 1대 1, 1대N, N대M 등으로 연결
  • PDU - Datagram
  • 데이터그램 단위로 전송되며, 최대 크기는 65535바이트, 크키 초과시 잘라서 보냄.
  • 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용된다.
  • 실시간 멀티미디어 정보를 처리하기 위해 주로 사용하는 것으로 알려져 있음 (But, 대부분 TCP 통신하고 있었음). 최근에는 성능에 대한 요구로, UDP 프로토콜이 뜨고 있음.

2.3 TCP vs UDP

프로토콜TCPUDP
연결 방식연결형 서비스
(패킷 교환 방식)
비연결형 서비스
(데이터그램 방식)
전송 순서전송 순서 보장전송 순서가 바뀔수 있음
수신 여부 확인수신여부를 확인함수신여부를 확인하지 않음
통신 방식1:1 통신1:1, 1:N, N:M 통신
신뢰성높음낮음
속도느림빠름

2.4 UDP의 급부상

HTTP/3.0에서 UDP 프로토콜을 채택하면서 UDP가 떠오르고 있습니다. HTTP/3에서 왜 UDP를 채택하게 되었는지 간략하게 설명하고자 합니다.

HTTP/3.0의 유래

HTTP/3는 처음에는 HTTP-over-QUIC이라는 이름을 갖고 있었는데, IETF 내 HTTP 작업 그룹과 QUIC 작업 그룸의 의장인 마크 노팅엄이 이 프로토콜의 이름을 HTTP/3.0으로 변경할 것을 제안.

2018년 11월 이 제안이 통과되어 HTTP-over-QUIC이라는 이름에서 HTTP/3.0으로 변경되었다.


QUIC 프로토콜

QUIC(Quick UDP Internet Connetion)의 약자로 2012년 구글에서 개발한 UDP 기반의 새로운 전송 계층 프로토콜입니다.

HTTP/3.0 프로토콜은 QUIC 프로토콜 위에서 동작하고, QUIC 프로토콜은 UDP 기반으로 동작합니다. 즉 HTTP/3.0은 UDP 기반으로 동작하는 것입니다.

UDP 프로토콜의 한계를 QUIC 프로토콜에서 구현함으로써 UDP의 한계를 극복한 것입니다.


갑자기 UDP를 채택한 이유는?

흔히 알고 있는 TCP와 UDP의 특징을 정리해보면 아래와 같습니다.

  • TCP 특징: 높은 신뢰성, 느린 속도
  • UDP 특징: 낮은 신뢰성, 빠른 속도

한계성이 있는 TCP

기술이 발전하면서 데이터의 양과 크기는 점점 방대해지고 있습니다. 이를 받쳐주기 위해 속도 향상이 주요 이슈가 되어가고 있습니다.

TCP는 클라이언트와 서버가 서로 신뢰성있는 통신을 할 수 있도록 몇 가지 방법(3-way handshake)을 사용하게되는데, 이러한 방식은 결국 레이턴시(지연, latency)를 야기하지만, TCP 프로토콜의 표준이므로 무시할 수 없습니다.

이 레이턴시를 줄이기 위해서는 TCP에서 정의한 기능 외에 다른 부분을 건드려야 하지만, 아무리 회선의 대역폭을 늘리고 전송 속도를 높인다 하더라도 기술이 발전하면서 전송해야는 데이터의 크기도 점점 커지기 때문에 결국은 한계에 도달하게 됩니다.

프로토콜 자체를 손보는 방법: UDP 채택

HTTP/3.0이 UDP 기반인 QUIC 프로토콜을 사용하는 이유가 바로 이런 제약 조건을 뛰어넘기 위해 프로토콜 자체를 손보는 방법을 택한 것입니다. TCP 자체는 워낙 오래된 프로토콜이고 커널까지 내려가는 로우 레벨에서 정의되어 있기 때문에 뜯어 고치는 것이 거의 불가능 ⇒ 백지 상태의 UDP 채택하게 된 것입니다.


연결 설정시 레이턴시 감소

RTT(Round Trip Time)

클라이언트가 보낸 요청을 서버가 처리한 후 다시 클라이언트로 응답해주는 사이클

QUIC은 TCP를 사용하지 않기 때문에 통신을 시작할 때 3-way-handshake 과정을 거치지 않아도 됩니다.

TCP는 연결 생성을 위해 1 RTT, TLS을 사용한 암호화 까지 하면 TLS 자체의 핸드쉐이크까지 더해져 총 3 RTT가 필요한 반면, QUIC은 첫 연결 설정에 1 RTT만 소요됩니다.

즉, TCP의 한계를 극복하고자 UDP 기반의 새로운 프로토콜 QUIC을 만들어낸 셈입니다.


3. 대표적인 프로토콜

TCP/IP 계층 별로 사용되는 대표적인 프로토콜에 대해 정리해보았습니다.

3.1 인터넷 계층

ICMP (Internet Control Message Protocol)

ICMP는 네트워크 장치 사이에 제어 메시지를 전송하는 데 사용되는 프로토콜입니다. 네트워크 상태 모니터링, 네트워크 에러 및 경로 문제 진단, 패킷 손실 여부 확인 등에 사용됩니다. 주로 네트워크 진단 및 도구에 활용됩니다.

ARP (Address Resolution Protocol)

ARP는 IP 주소를 해당하는 네트워크 인터페이스의 물리적 MAC 주소로 매핑하기 위해 사용되는 프로토콜입니다. ARP는 LAN 상에서 호스트 간의 통신을 위해 필요한 MAC 주소를 얻는데 사용됩니다.

3.2 전송 계층

TCP (Transmission Control Protocol)

TCP는 신뢰성 있는 데이터 전송을 제공하는 연결 지향형 프로토콜입니다. 데이터의 순서를 보장하고, 에러 검출 및 복구, 흐름 제어, 혼잡 제어 기능을 제공하여 안정적인 데이터 전송을 보장합니다. 주로 HTTP 통신, 이메일 전송 등에 사용됩니다.

UDP (User Datagram Protocol)

UDP는 비 연결성 프로토콜로, TCP보다 더 단순하고 경량화된 특징을 갖고 있습니다. 데이터 전송의 신뢰성 보다는 속도와 지연 시간이 중요한 경우에 사용됩니다. 신뢰성과 흐름 제어가 필요하지 않은 애플리케이션에 적합합니다. 예를 들어 DNS 조회, 스트리밍 서비스, 실시간 게임 등에 사용됩니다.

3.3 애플리케이션 계층

HTTP (HyperText Transfer Procol)

HTTP는 웹 브라우저와 웹 서버 간에 웹 페이지, 이미지, 비디오 등의 리소스를 주고받기 위해 사용되는 프로토콜입니다. 웹 브라우징, 웹 검색, 웹 애플리케이션 등에서 사용됩니다.

FTP (File Transfer Protocol)

FTP는 파일 전송을 위해 사용되는 프로토콜로, 클라이언트와 서버 간에 파일을 업로드하고 다운로드할 수 있습니다. 파일 공유, 원격 파일 액세스 등에 사용됩니다.

SMTP (Simple Mail Transfer Protocol)

SMTP는 전자 메일을 보내기 위해 사용되는 프로토콜로, 이메일 클라이언트가 이메일 서버로 이메일을 전송하는 데 사용됩니다.

Telnet

원격으로 다른 컴퓨터에 접속하여 명령어를 입력하고, 제어하는 방식의 프로토콜입니다. Telnet을 사용하면 로컬 컴퓨터에서 마치 원격 컴퓨터에 직접 접속한 것 처럼 명령어를 실행하고 파일을 전송할 수 있습니다. 주로 서버 관리 및 원격 작업에 사용되며, 텍스트 기반의 인터페이스로 동작합니다. 그러나 암호화되지 않은 텍스트로 전송되기 때문에 보안에 취약하여 현재는 잘 사용하지 않습니다.

SSH(Secure Shell)

원격 호스트에 접속하기 위해 사용되는 인터넷 프로토콜입니다. SSH는 암호화 기술을 사용하여 데이터 전송을 보호하고, 인증 과정에서 사용자 신원을 확인합니다. 강화된 보안성으로 Telnet 대안으로 널리 사용됩니다. SSH는 주로 유닉스 기반의 시스템에서 사용되지만, Windows 등 다양한 운영체제에서도 지원됩니다.

DNS(Domain Name System)

도메인 이름을 IP 주소로 변환하거나, IP 주소를 도메인 이름으로 변환하는 데 사용되는 프로토콜입니다.


References


마치며

면접에서 흔히나오는 네트워크 관련 단골 질문들입니다.

  • OSI 7 계층에 대해 설명해봐라.
  • TCPUDP를 비교해봐라.

왜 이런 질문들이 나오는 것일까? 실무에서 개발하다보면 여러가지 통신들을 피할 수 없고, 이러한 통신들은 어떤 원리로 동작하는 것인지 알 필요가 있기 때문입니다. 그 원리를 알아야 원리대로 잘 개발하거나 한계를 극복할 수 있기 때문입니다.

하지만 원리를 머리안에 집어넣고 살 수는 없기 때문에..😢 이번 포스팅을 작성하면서 정리하는 시간을 가져보았습니다.😊

조금은 난잡한 포스팅이지만 잘 정리해나가보자 합니다. 읽어주셔서 감사합니다😍

profile
Java, Spring 기반 풀스택 개발자의 개발 블로그입니다.

0개의 댓글