본문 바로가기

Dev.World/개발상식&언어

[개발상식] 12. 프로토콜이란? 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, pakaging, 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 프로토콜이다.

회원가입을 한다고 생각해보자. ID를 입력할 때 중복검사라는 것을 해야한다.
서버에게 중복검사를 요청하기 위해서 새 페이지를 요청해야만 하는데
회원정보 작성 중에 페이지를 이동할 수 없기 때문에
새로 요청한 페이지를 팝업창으로 띄웠던 것이다.
Ajax를 이용하여 팝업창 없이 검사가 가능하다.



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

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

그래서 HTML5에 Websocket이 포함되었다.
웹 소켓을 사용하면 더 이상 Active X를 사용하지 않고도 TCP/IP 소켓통신을 구현할 수 있다.
또한 네트워크의 과부하를 줄이고 애플리케이션의 반응성을 높일 수 있게 된다.
앞서 말한 HTTP 헤더크기도 수 byte 수준으로 압축이 가능하다.
물론 웹 소켓이 HTTP를 대체하는 것은 아니다.

다만 HTTP가 적합치 않은 메세징, 트랜잭션 및 애플리케이션 특성 상 트래픽이 높고 지연시간이 낮은 환경에서 유용하다.





-..-