본문 바로가기

Programming

Network (Basic)

PROTOCOL | TCP/IP | HTTP | Web Socket


프로토콜

컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다.
통신 프로토콜은 신호 체계, 인증, 그리고 오류 감지 및 수정 기능을 포함할 수 있다.
프로토콜은 형식, 의미론, 그리고 통신의 동기 과정 등을 정의하지만 구현되는 방법과는 독립적이다.

구성(OSI 참조 모델 기반)

각 계층의 수직적 상하관계는 Top-Down 구조이다.

  • 물리적 측면 : 자료 전송에 쓰이는 전송 매체, 접속용 단자 및 전송 신호, 회선 규격 등 (물리 계층, 데이터 링크 계층, 네트워크 계층)
  • 논리적 측면 : 프레임 구성, 프레임 안에 있는 각 항목의 뜻과 기능, 자료 전송의 절차 등 (전송 계층, 세션 계층, 표현 계층, 응용 계층)

프로토콜 계층 별로 주로 사용되는 데이터 단위(Protocol Data Unit) 명칭

응용 계층 : 메시지, 데이터
표현 계층 : 메시지, 데이터
세션 계층 : 메시지, 데이터
전송 계층 : 세그먼트
네트워크 계층 : 패킷, 데이터그램
데이터링크 계층 : 프레임
물리 계층 : 비트

TCP/IP (Transmission Control Protocol / Internet Protocol)

TCP : 정보 패킷 차원에서 다른 인터넷 노드와 메시지를 상호 교환하는데 필요한 규칙을 사용한다.
IP : 인터넷 주소 차원에서 메시지를 보내고 받는데 규칙을 사용한다.

기타

애플리케이션 : 다른 계층의 서비스에 접근할 수 있게 하는 애플리케이션을 제공, 교환하기 위해 사용하는 프로토콜을 정의
HTTP : WWW의 Web 페이지 파일을 전송하는데 사용
DNS : 호스트 이름을 IP주소로 변환하기 위해 사용

트랜스포트 : 애플리케이션 계층에 세션과 데이터그램 통신 서비스를 제공한다.
TCP : 1대1 연결지향, 신뢰할 수 있는 통신 서비스를 제공한다. 연결확립과 보내진 패킷의 확인, 순서화, 전달 중 손상된 패킷을 복구하는 책임을 지는 역할이다.
UDP : 1대1, 1대다 의 비연결 지향, 신뢰할 수 없는 통신 서비스를 제공한다. 데이터의 크기가 작을 때나, 연결 확립에 의한 부하를 피하려고 할 때 사용한다.

인터넷 : addressing, packaging, routing 기능을 제공한다.
IP (Internet Protocol) : 어드레싱과 패킷의 분해, 재조합을 책임지는 역할이다.
ARP (Address Resolution Protocol) : 인터넷 계층 주소를 네트워크 인터페이스 계층의 주소(하드웨어 주소)로 변환하는 역할이다.
ICMP (Internet Control Message Protocol) : IP패킷의 전달에 따른 오류나 상태를 리포트하고 진단하는 기능을 제공하는 역할이다.
IGMP (Internet Group Management Protocol) : IP 멀티캐스트 그룹의 관리를 책임진다.

네트워크 : TCP/IP 패킷을 네트워크 매체로 전달하는 것과 받아들이는 과정을 담당 - OSI 게층에서 물리 계층에 해당

HTTP (Hyper Text Transfer Protocol)

서버가 html로 만들어진 문서(디자인된 문서)를 유저에게 잘 보여주는 것을 목적으로 하는 프로토콜로 TCP와 UDP를 사용하며, 80번 포트를 사용한다. 클라이언트와 서버 사이에 이루어지는 request / response 프로토콜이다.

웹 소켓 (Web Socket)

등장 : Web Socket은 HTTP의 단점을 보완하기 위해 등장했다. 현재 사용하고 있는 HTTP는 Client-Server간 접속을 유지하지 않으며, 한 번에 한 방향으로만 통신이 가능한 half-duplex이다. 점차 클라이언트와 서버간 주고 받는 데이터 양이 많아지면서 half-duplex로 인한 성능저하는 피할 수 없게 되었다. 또한, HTTP는 지나치게 많은 헤더 데이터를 갖고 있다.

정의 : WebSocket 프로토콜은 웹을 통해 클라와 서버 간의 신속하고 보안이 유지된 양방향 통신을 위한 메커니즘이다. 웹 소켓은 실시간 게임, 인스턴스 소셜 네트워크 알림, 주식 또는 날씨 정보의 최신 디스플레이 등의 안전하고 빠른 데이터 전송이 필요한 앱에 사용하는 데 적합하다. 웹 소켓 연결 설정을 하기 위해 클라와 서버간에 특정 HTTP 기반의 핸드쉐이크가 교환된다. 교환이 성공하면 이전에 설정된 TCP 연결을 사용해 응용 프로그램 계층 프로토콜이 HTTP에서 웹소켓으로 업그레이드가 된다. 업그레이드가 되면 HTTP는 완전 무시되고, 웹 소켓 연결이 닫힐 때까지 두 끝점에서 웹 소켓 프로토콜을 사용해 데이터를 주고 받을 수 있다.

그래서 HTML5에 WebSocket이 포함되었다. 웹 소켓을 사용하면 더 이상 ActiveX를 사용하지 않고도 TCP/IP 소켓통신을 구현할 수 있다. 또한, 네트워크의 과부하를 줄이고 애플리케이션의 반응성을 높일 수 있게 된다. 앞서 말한 HTTP 헤더 크기도 수 byte 수준으로 압축이 가능하다. 물론 웹 소켓이 HTTP를 대체하는 것은 아니다. 다만 HTTP가 적합치 않은 메세징, 트랜잭션 및 애플리케이션 특성상 트래픽이 높고 지연시간이 낮은 환경에서 유용하다.


HTTP 통신

정의 : Client의 요청(Request)이 있을 때만 서버가 응답(Response)하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식

Http 통신은 Client의 요청이 있을 때만 Server가 응답해 처리를 한 후에 연결을 끊는 방식이다. 이러한 연결 방식은 Client가 요청을 보내는 경우에만 Server가 응답하는 단방향적 통신으로, Server가 Client로 요청을 보낼 수는 없다. 이러한 Http 통신은 실시간 연결이 아닌, 필요한 경우에만 Server로 접근하는 콘텐츠 위주의 데이터를 사용할 때 용이하다. 만약 게시물에 대한 내용을 요청하기 위해 실시간으로 연결을 유지하는 Socket 통신을 사용하게 되면, 게시물을 받은 후에도 계속 통신을 위한 연결이 성립되어 있어 부하가 걸리게 된다. 일반적으로 모바일 어플리케이션은 필요한 경우에만 Server로 정보를 요청하는 경우가 많은데, 이러한 Web Server로 Http 통신을 주로 사용하며 비용 및 유지보수 등 대부분의 방면에서 좋다.

특징

  • Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신이다.
  • Server로부터 응답을 받은 후에는 연결이 바로 종료된다.
  • 실시간 연결이 아니고, 필요한 경우에만 Server로 요청을 보내는 상황에 유용하다.
  • 요청을 보내 Server의 응답을 기다리는 어플리케이션(Android/iOS)의 개발에 주로 사용된다.

Socket 통신

정의 : Server와 Client가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식

Socket 통신은 Http 통신과 달리 Server와 Client가 특정 Port를 통해 연결을 성립하고 있어 실시간으로 양방향 통신을 하는 방식이다. Client만 필요한 경우에 요청을 보내는 Http 통신과 달리 Socket 통신은 Server 역시 Client로 요청을 보낼 수 있으며, 계속 연결을 유지하는 연결지향형 통신이기 때문에 실시간 통신이 필요한 경우에 자주 사용된다.

특징

  • Server와 Client가 계속 연결을 유지하는 양방향 통신이다.
  • Server와 Client가 실시간으로 데이터를 주고 받는 상황이 필요한 경우에 사용된다.
  • 실시간 동영상 Streaming이나 온라인 게임 등과 같은 경우에 자주 사용된다.

TCP와 UDP의 특징과 차이

전송게층은 송신자와 수신자를 연결하는 통신서비스를 제공하는 계층으로, 쉽게 말해 데이터의 전달을 담당한다. 그리고 데이터를 보내기 위해 사용하는 프로토콜 이 있는데, 그 프로토콜이 TCP 와 UDP이다.

1. TCP (Transmission Control Protocol)

정의 : 전송을 제어하는 프로토콜(규약). 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜

일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 관리한다. TCP는 연결형 서비스를 지원하는 프로토콜로 인터넷 환경에서 기본으로 사용한다.

특징

  • 연결형 서비스로 가상 회선 방식을 제공한다.
  • 3-way handshaking 과정을 통해 연결을 설정하고, 4-way handshaking을 통해 해제한다.
  • 흐름 제어 및 혼잡 제어
  • 높은 신뢰성을 보장한다.
  • UDP보다 속도가 느리다.
  • 전이중(Full-Duplex), 점대점(Point to Point) 방식

TCP가 가상 회선 방식을 제공한다는 것은 발신지와 수신지를 연결해 패킷을 전송하기 위한 논리적 경로를 배정한다는 말이다. 그리고 3-way handshaking 과정은 목적지와 수신지를 확실히해 정확한 전송을 보장하기 위해서 세션을 수립하는 과정을 의미한다. TCP가 이러한 특징을 지니는 이유는 간단명료하다. 바로 TCP는 연결형 서비스로 신뢰성을 보장하기 때문이다. 그래서 3-way handshaking의 과정도 사용하는 것이고, 데이터의 흐름제어나 혼잡 제어와 같은 기능도 한다. 하지만 이러한 기능 때문에 UDP보다 속도가 느리게 된다. (이러한 기능은 CPU를 사용하기 때문에 속도에 영향을 주는 것이다) 그렇기에 TCP는 연속성보다 신뢰성 있는 전송이 중요할 때에 사용하는 프로토콜이다.

TCP 서버의 특징

  • 서버소켓은 연결만을 담당한다.
  • 연결 과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다형 서비스로 가상 회선 방식을 제공한다.
  • 서버와 클라이언트는 1대1로 연결된다.
  • 스트림 전송으로 전송 데이터의 크기가 무제한이다.
  • 패킷에 대한 응답을 해야하기 때문에(시간 지연, CPU 소모) 성능이 낮다.
  • Streaming 서비스에 불리하다. (손실된 경우 재전송 요청을 하므로)

** 패킷 : 인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러 개의 조각들로 나누어 전송을 하는데, 이 조각을 패킷이라고 한다.

** TCP는 패킷을 어떻게 추적 및 관리하나?
위에서 데이터는 패킷단위로 나누어 같은 목적지(IP계층)으로 전송된다고 설명했다. 예를 들어 한줄로 서야하는 A, B, C 라는 사람(패킷)들이 서울(발신지)에서 출발해 부산(수신지)으로 간다고 하자. 그런데 A, B, C가 순차적으로 가는 상황에서 B가 길을 잘못 들어서 분실되었다고 하자. 하지만 목적지에서는 A, B, C가 모두 필요한지 모르고 A, C만 보고 다 왔다고 착각할 수 있다. 그렇기 때문에 A, B, C라는 패킷에 1, 2, 3이라는 번호를 부여해 패킷의 분실 확인과 같은 처리를 해 목적지에서 재조립을 한다. 이런 방식으로 TCP는 패킷을 추적하며, 나누어 보내진 데이터를 받고 조립을 할 수 있다.

2. UDP (User Datagram Protocol)

정의 : 사용자 데이터그램 프로토콜(규약). 데이터를 데이터그램 단위로 처리하는 프로토콜

여기서 데이터그램이란 독립적인 관계를 지니는 패킷이라는 뜻으로, UDP의 동작방식을 설명하자면 다음과 같다. 위에서 대충 눈치챘듯이 TCP와 달리 UDP는 비연결형 프로토콜이다. 즉, 연결을 위해 할당되는 논리적인 경로가 없는데, 그렇기 때문에 각각의 패킷은 다른 경로로 전송되고, 각각의 패킷은 독립적인 관계를 지니게 되는데 이렇게 데이터를 서로 다른 경로로 독립적으로 처리하게 되고, 이러한 프로토콜을 UDP라고 한다.

특징

  • 비연결형 서비스로 데이터그램 방식을 제공한다.
  • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
  • UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
  • 신뢰성이 낮다.
  • TCP 보다 속도가 빠르다.

UDP는 비연결형 서비스이기 때문에, 연결을 설정하고 해제하는 과정이 존재하지 않는다. 서로 다른 경로로 독립적으로 처리함에도 패킷에 순서를 부여해 재조립을 하거나 흐름 제어 또는 혼잡 제어와 같은 기능도 처리하지 않기에 TCP보다 속도가 빠르며 네트워크 부하가 적다는 장점이 있지만, 신뢰성 있는 데이터의 전송을 보장하지는 못한다. 그렇기 때문에 신뢰성보다는 연속성이 중요한 서비스 예를 들면 실시간 서비스(streaming)에 자주 사용된다.

UDP 서버의 특징

  • UDP에는 연결 자체가 없어서(connect 함수 불필요) 서버 소켓과 클라이언트 소켓의 구분이 없다.
  • 소켓 대신 IP를 기반으로 데이터를 전송한다.
  • 서버와 클라이언트는 1대1, 1대N, N대M 등으로 연결될 수 있다.
  • 데이터그램(메시지) 단위로 전송되며 그 크기는 65535바이트로, 크기가 초과하면 잘라서 보낸다.
  • 흐름제어(flow control)이 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.
  • 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용된다.

** 흐름제어(Flow Control)와 혼잡제어(Congestion Control)이란

흐름제어는 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절해 수신자의 버퍼 오버플로우를 방지하는 것이다. 예를 들어, 송신하는 곳에서 감당이 안되게 데이터를 빠르게 많이 보내면 수신자에서 문제가 발생하기 때문이다. 혼잡 제어는 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것이다. 만약 정보의 소통량이 과다하면 패킷을 조금만 전송해 혼잡 붕괴 현상이 일어나는 것을 막는다.

3. TCP와 UDP의 비교


프로토콜 종류 TCP UDP
연결 방식 연결형 서비스 비연결형 서비스
패킷 교환 방식 가상 회선 방식 데이터그램 방식
전송 순서 전송 순서 보장 전송 순서가 바뀔 수 있음
수신 여부 확인 수신 여부 확인 수신 여부 확인하지 않음
통신 방식 1:1 통신 1:1 / 1:N / N:N 통신
신뢰성 높다 낮다
속도 느리다 빠르다

'Programming' 카테고리의 다른 글

Data Structure  (0) 2020.03.17
thrading - Manage concurrent threads  (0) 2020.03.17