3학년/네트워크 프로그래밍

네트워크_Chpater01 - HTTP

김야키 2018. 9. 7. 17:26

Chapter 01 - 프로토콜과 HTTP

1.     계층별 프로토콜의 특징

l  2계층 프로토콜: Ethernet(CSMA/CD)

-      LAN에서의 통신을 지원하기 위한 프로토콜

-      동일한 네트워크에 있는 장비에게 데이터를 주는 것이 목적

-      데이터 단위: 프레임

-      헤더에 들어있는 Destination/SourceMAC주소가 중요

-      012진수로 구성됨

l  3계층 프로토콜: IP

-      멀리 떨어진 네트워크와의 연결을 지원하기 위한 프로토콜

-      네트워크와 네트워크를 연결해줌

-      모든 장비를 IP주소로 구분함

-      데이터 단위: 패킷

l  4계층 프로토콜: TCP/UDP

-      end to end통신: Process to Process

-      통신의 가장 끝에 존재함

-      소켓을 통한 프로그래밍 가능

-      데이터 단위: 세그먼트

l  계층별 프로토콜의 공통점

-      통신을 위한 목적이 동일함

-      데이터 표현 방식(2진수)

-      프레임/패킷/세그먼트가 모두 헤더와 데이터의 형식으로 되어 있음

-      서버와 클라이언트의 개념이 없음

l  네트워크 설계

-      클라이언트와 서버의 구분이 있어야함

-      헤더와 데이터의 구분이 필요함

-      헤더는 ASCII코드로 해석

-      보내는 데이터는 Message


 

2.     응용 계층 프로토콜

l  HTTP (Hyper Text Transfer Protocol)

l  FTP (File Transfer Protocol)

l  Telnet (Tele network)

l  SMTP (Simple Mail Transfer Protocol): E-mail

l  POP (Post Office Protocol)

 

3.     HTTP

l  정의: TCP/IP 프로토콜 상에서 텍스트 형태의 메시지를 웹 서버와 클라이언트 사이에서 서로 주고받는 방식으로 동작함

l  IP헤더 / TCP헤더 / 시작라인 / HTTP헤더 / HTTP Body

-       시작라인: 요청과 응답으로 나뉨

-       클라이언트/서버 통신 클라이언트와 서버가 명확하게 구분 되어있음

l  메시지 포맷 = 시작 라인 + 헤더 + 바디

l  시작 라인에 포함되는 값

-       Host: www.bible.ac.kr

-       User-Agent: MSIE/9.0 (MS: Microsoft, IE: Internet)

-       Accept: */*

-       AcceptMIME(Multipurpose Internet Mail Extensions)가 있어서 여러가지 멀티 미디어를 해석할 수 있게 해 줌으로서 다양한 형식의 데이터 전송을 서비스 해 줌

l  요청 메시지 = 메서드 + Request-URI + HTTP-버전 + CRLF

-       CRLF가 있으면 메시지가 한 줄의 한 줄이 존재하는 것을 표현

-       메소드

u  GET: 클릭 요청

u  POST: 서버에 무언가 작성할 때

u  PUT: 서버에 데이터를 전송할 때

l  응답 메시지 = HTTP-버전 + 상태코드 + Reason-Phrase CRLF

-       상태 코드

u  Reason-Phrase가 상태 코드를 해석해 준다

u  1xx: 임시적인 응답

ü  하직 진행 중인 것

u  2xx: 성공

ü  해당 코드를 받으면 웹 브라우저에 출력 해 준다.

u  3xx: 리다이렉션

ü  데이터가 이동한 것

ü  삭제된 페이지를 보여줄 때

u  4xx: 실패

ü  페이지를 찾을 수 없을 때

ü  서버에 있는 내용이 변경되었을 때

u  5xx: 서버 에러

ü  클라이언트가 아닌 서버에서 오류가 난 경우

4.     HTTP 구성

l  헤더

-       헤더 필드명 + 값의 형태

-       한 줄에 하나씩, 한 줄이 끝나면 줄 바꿈

-       헤더는 여러 개 올 수 있음

u  Accept:

ü  어떤 타입의 데이터가 있는지

u  Accept-Charset:

ü  데이터의 Charset을 표현

u  Accept-Encoding:

ü  압축된 데이터의 타입 표현

u  Content-Encoding:

ü  Content에 포함된 압축 파일의 타입 표현

u  Content-Length:

ü  Content에 포함된 데이터의 크기를 바이트 단위로 표현

u  Host:

ü  도메인 네임의 정보 포함

u  If-Modified-Since:

ü  표현된 날짜 이후로 수정된 정보를 표현

ü  캐쉬에 정보가 포함되어 있음

ü  캐쉬에 포함된 날짜와 같으면 캐쉬에 있는 데이터를 불러오고 다르게 되면 서버에서 데이터를 요청한다

u  Location:

ü  호스트이름/디렉토리/파일

ü  위치가 다른 주소로 이동되었을 경우에 이동된 위치를 헤더에 넣어서 표현

u  Server:

ü  서버의 종류와 버전을 표현

u  User-Agent:

ü  웹 브라우저에 대한 정보

-       각각의 헤더 뒤에 바디(정보)가 들어있음

-       헤더가 끝나면 빈 줄을 하나 넣고 바디 시작


 

5.     HTTP동작 과정 요청

l  푸시 서버를 제외하면 보통의 모든 웹 서비스는 요청이 와야 응답을 한다.

l  IP헤더 / TCP헤더 / Request-Line / HTTP헤더 / HTTP바디

-       IP헤더: 클라이언트 주소 + 서버 주소

-       TCP헤더: 클라이언트의 Port번호

-       Request-Line: GET / 디렉토리,파일 정보 / 버전

-       바디는 헤더에서 알려주는 정보

 

6.     HTTP동작 과정 응답

l  클라이언트의 정보는 요청을 하는 과정에서 알게 된다.

l  IP헤더 / TCP헤더 / Status-Line / HTTP헤더 / HTTP바디

-       IP헤더와 TCP헤더의 정보는 클라이언트의 요청과정에서 알게 됨

-       Status-Line: 웹 정보와 상태 코드

-       바디: 보통의 경우 서버에서 클라이언트로 전송하는 데이터에 포함되어 있다.

 

7.     HTTP동작 과정 종료

l  요청 응답이 끝나면 TCP연결을 종료한다.

l  연결 설정(SYN페킷 ACK페킷 전송)이 종료되면 그 후에 HTTP 요청 메시지를 전송하게 된다.

l  처음 html문서를 받으면 중간에 데이터를 요청하는 부분이 모두 끝나야 TCP연결을 종료한다.

l  데이터를 받는 도중에 중간중간 ACK페킷을 보낸다.

 

8.     캐쉬 사용 메시지

l  여러 번 요청하는 정보에 경우 해당 데이터를 하드에 저장을 해 두고 동일한 요청이 올 경우 연결을 할 필요 없이 바로 하드에 있는 정보를 출력해서 보여준다.

l  HTTP요청 메시지를 보내면 서버에서는 use local copy라는 메시지를 보내준다.

l  위의 메시지를 클라이언트가 받으면 캐쉬 메모리에 있는 데이터를 불러온다.