Chapter 01 - 프로토콜과 HTTP
1. 계층별 프로토콜의 특징
l 2계층 프로토콜: Ethernet(CSMA/CD)
- LAN에서의 통신을 지원하기 위한 프로토콜
- 동일한 네트워크에 있는 장비에게 데이터를 주는 것이 목적
- 데이터 단위: 프레임
- 헤더에 들어있는 Destination/Source의 MAC주소가 중요
- 0과 1의 2진수로 구성됨
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: */*
- Accept는 MIME(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 위의 메시지를 클라이언트가 받으면 캐쉬 메모리에 있는 데이터를 불러온다.
'3학년 > 네트워크 프로그래밍' 카테고리의 다른 글
TCP EchoServer (0) | 2018.10.11 |
---|---|
네트워크_Chapter05 - C# 스레드, 대리자(Delegate), 이벤트 (0) | 2018.10.01 |
네트워크_Chpater04 - UNIX C 소켓 (0) | 2018.10.01 |
네트워크_Chapter03 - RTP (0) | 2018.10.01 |
네트워크_Chapter02 - HTTPS (0) | 2018.10.01 |