HTTP 프로토콜
HTTP(HyperText Transfer Protocol) 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다.
서버/클라이언트 모델이란?
서비스 제공자(service provider)와 서비스 요청자(service requester)로 구분되는 네트워크 모델. 서비스를 제공하는 역할은 서버. 서비스 요청자의 역할은 클라이언트라고 한다.
원칙대로 라면 프로그램이 서버와 클라이언트의 역할을 하지만 많은 경우 서버 컴퓨터, 클라이언트 컴퓨터로 하드웨어적으로 역할을 구분하기도 한다.
서버/클라이언트 모델에서 모든 자원은 서버에 집중된다. 클라이언트는 테이터 프리젠테이션(재현)을 위한 최소한의 자원을 가지는게 일반적이다. 서버는 클라이언트의 요청을 처리하고
자원을 공유하고 관리해야하기 떄문에 고성능 컴퓨터를 사용한다.
애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다.
TCP/IP 란?
TCP는 기본적으로 IP와 함께 사용되며 그런이유로 TCP/IP라고 부른다. IP는 호스트 사이의 데이터 교환을 목적으로 만들어진 프로토콜로, 패킷을 목 적지까지 보내는 일만을 한다.
즉 네트워크상에서 발생할 수 있는 데이터 누락, 패킷의 순서 뒤바뀜 등의 데이터 교정과 관련된 기능을 가지고 있지 않다.
그래서 만들어진 것이 TCP 프토토콜이다. IP프로토콜의 상위 레벨 프로토콜로써, IP가 제공하지 못하는 기능, 즉 데이터 누락검사 패킷순서 뒤바뀜 등 데이터 교정과 관련된 기능을 수행한다.
+-----+------+---------------+
|IPH |TCPH |Internet Data |
+-----+------+---------------+
IPH :IP Header
TCPH :TCP Header
Interet Data :전송 데이터
이러한 TCP의 기능상 특징으로 인하여 흔히 TCP 프로토콜을 "신뢰성있는 프로토콜" 이라고 한다. 이러한 신뢰성 있는 데이터 전송을 위한 방법으
로 서버와 클라이언트간에연결을 설정한다.
이러한 연결을 만드는 특성으로 TCP프로토콜은 "연결지향 프로토콜"이라고 한다.
TCP 헤더 구조
두 호스트 사이어 전송되는 TCP 데이터 단위를 세그만트 라고 부른다. 그러므로 TCP 세그먼트는 TCP 헤더 + DATA 될 것이다.
SOURCE PORT/DESTINATION PORT
source port는 메시지를 보내는 측에서 통신을 위해 사용하는 port번호이며,destination port는 목적지, 즉 메시지를 받는 측의 통신 port번호 이다.
여기서에 있는 port 번호와 더불어 IP 헤더에 있는 source/destination adress를 이용하면 유일하게 식별되는 통신연결을 만들수 있게 된다.
IP의 출발지/목적지 주소와 TCP헤더의 출발지/목적지 포트번호가 어플리케이션간의 통신을 위한 가장 핵심이라고 할 수 있다.
포트번호의 크기는 16bit 크기를 가지며 네트워크 어플케이션은 0~65536 중 하나의 포트를 이용해서 데이터 통신을 한다.
SEQUENCE NUMBER
TCP 세그먼트안의 데이터의 송신 바이트 흐름의 위치를 가리킨다. 다른 호스트로 전달되는 패킷은 여러개의 서로 다른 경로를 거치면서 전달되다 보니 패킷의 순서가 뒤바뀔 숭 ㅣㅆ다.
이를 수신측에서는 재조립할 필요가 있는데 Sequence Number를 이용해서 조립하게 된다.
ACK
acknowledgment number 라고 말하며 다음에 받을 것으로 예상되는 데이터 옥텟의 순서번호를 나타낸다.
HLEN
TCP 세그먼트의 길이를 정의한다.
RESERVED
현재는 사용하지 않지만, 나중을 위해서 예약된 필드이다.
(Control)CODE BITS
세그먼트의 용도와 내용을 결정하기 위해서 사용된다. URG, ACK, PSH, RST, SYN, FIN 6개의 비트가 정의되어 있다. TCP는 이러한 비트를 이용해서 패킷의 내용이 어떤 목적으로
전달될 것인지를 설정할 수 있다. 이들 비트 중 SYN, ACK, RST를 주목할 필요가 있다.
SYN은 TCP연결을 만들 때, 양 호스트간 Sequence Number의 동기화를 이루기위한 목적으로 사용된다. ASK는 원격 호스트의 Sequence Number에 대한 응답을 위한 목적으로 사용된다.
즉 데이터를 잘받았다는 걸 알려주기위 한 목적으로 사용되는데, 원격호스트의 Sequence Number의 번호에 +1을 해줘서 다시 전하는 방법을 이용한다.
SYN 비트는 특히 세번 악수 기법(tree-way hanshake)를 위해서 사용된다.
URG는 Urgent 즉 긴급 메시지를 전송하기 위해서 사용한다. URG 필드가 설정된 패킷을 받은 운영체제는 SIGURG 시그널(:12)을 발생시킨다.
RST 비트가 설정되어 있을 경우 받은 호스트는 즉시 연결을 끊어버리고 FIN비트가 설정되어 있을 경우 여러가지 테스트를 거쳐서 연결을 끊게 된다. 일반적인 정상 종료를 원한다면
FIN 비트를 설정해서 사용하게 된다.
OPTION & PADDING
TCP 헤더의 정보를 좀 더 확장시키고자 할 때 사용한다. PADDING은 32bit 크기를 채우기 위해서 사용된다.
CEHCKSUM
TCP 세그먼트 데이터는 중간에 훼손될 수 있으며 변조될수도 있다. 그러므로 이를 체크할 수 있는 장치가 필요하다.
Urgent Pointer
URG 필드를 설정하면 긴급 메시지를 보낸다. 이떄, 긴급 메시지는 별도의 패킷으로 전송되지 않고, 일반 데이터에 포함되어서 함께 전달된다. 그러므로로 운영체제가
긴급 데이터를 읽기 위해서는 긴급 데이터의 위치를 알아야 한다. Urgent Pointer는 일반 데이터 내에서 긴급 데이터가 시작되는 위치 정보를 가지고 있다.
Transmission Control Protocol의 줄임말로 흐름제어소켓이라 해석할 수 있다. 연결지향프로토콜
TCP는 TCP/IF 4계층 중 전달계층(transport)에 속하는 프로토콜로 네트워크로 연결된 호스트간의 테이터를 안전하게 전달하기 위한 목적으로 사용되는 프로토콜이다.
1. 전용 통신선로(session)를 확보한다. 흔히 말하는 3번 악수기법을 통해 이루어진다.
HTTP는 어떤 종류의 데이터든 전송할 수 있도록 설계돼 있다. HTML로 작성된 문서는 데이터의 한 종류일 뿐이며 이미지, 동영상, 오디오, 텍스트 문서 등 종류를 가리지 않는다.
Transfer는 해석 그대로 데이터를 전송하겠다는 의미로 앞에 Hypertext가 붙는 이유는 하이퍼텍스트 기반으로 전송하겠다는 말로 간단히 말해 링크기반으로 데이터에
접속하겠다는 의미이다.
작동방식
HTTP는 서버/클라이언트 모델을 따르며 클라이언트에서 요청(Request)를 보내면 서버에서 요청을 처리해서 응답(Reponse)한다.
1. 클라이언트: 서버에 요청하는 클라이언트 소프트웨어가 설치된 컴퓨터.chrome, Internet Exploer 등의 클라리언트 소프트웨어를 이용한다. 클라이언트는 URI를 이용해서
서버에 접속하고, 데이터를 요청할 수 있다.
2. 서버: 클라이언트의 요청을 받아서, 요청을 해석하고 응답을 하는 소프트웨어가 설치된 컴퓨터. Apache, IIS 등의 서버 소프트웨어다.
웹서버는 보통 표준포트인 80번 포트로 서비스 한다.
PORT란?
인터넷에 연결된 각각의 컴퓨터는 유일한 IP주소로 식별할 수 있다. 네트워크 프로그램은 IP주소를 이용해서 연결한 컴퓨터를 찾을 수 있다.
연결할 컴퓨터를 찾았다면 이제 서비스를 요청할 프로그램을 찾아야한다. 이떄 사용하는게 포트 번호다. 네트워크 프로그램은 포트번호에 연결되고,
운영체제는 포트번호를 이용해서 프로그램들을 연결한다.
항만
화물선--------------> 1번포트
크루즈--------------> 2번포트
요트----------------> 3번포트
이런한 연결과정은 항만시설에서 다양한 종류의 서비스를 제공하기 위해서 "포트"를 제공하는 것과 동일하다.
인터넷 네트워크 프로그램은 실행될 때, 운영체제에 자신이 바인드될 포트번호를 요청한다. 웹 서버라면 80번을 요청할 것이다. 이제 크롬같은 웹 클라이언트
프로그램은 IP주소와 포트 번호를 이용해서 자신이 연결할 서버 프로그램을 찾을 수 있다.
Connectless & Stateless
HTTP는 Connectless방식으로 작동된다.(비연결지향) 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버린다. 기본적으로는 자원 하나에 대해서 하나의 연결을 만든다.
이런한 작동방식은 장점과 단점을 가진다.
.장점:불특정 다수를 대상으로 하는 서비스에 적합한 방식이다. 수십만명이 웹 서비스를 사용하더라도 접속유지는 최소한으로 할 수 있기 때문에, 더 많은 유저의 요청을
처리할 수 있다.
.단점: 연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수가 없다. 이러한 HTTP특징을 Stateless라고 하는데,Connectless로부터 파생되는 특징이라고 할 수 있다.
클라이언트의 이전 상태 정보를 알 수 없게 되면, 웹 서비스를 하는데 당장의 문제가 생긴다. 예를 들면 클라이언트가 과거 로그인을 성공하더라도 로그 정보를 유지할 수 가 없다.
HTTP는 cookie를 이용해서 이 문제를 해결하고 있다.
Cookie 클라리언트와 서버의 상태 정보를 담고 있는 정보 조각이다.(뒤에서 다루기로 하자)
'개발' 카테고리의 다른 글
재미있는 개발 (0) | 2018.05.21 |
---|---|
http 프로토콜 -2 (0) | 2017.03.09 |
네티(netty) (0) | 2017.03.06 |
전자정부프레임워크 개론 (0) | 2016.05.30 |
자바 인터페이스(interface) (0) | 2014.10.30 |
댓글