어플리케이션 계층에서 제공하는 서비스를 알아보자.
네트워크 어플리케이션을 위한 통신은 종단 시스템 간의 애플리케이션 계층에서 발생한다.
애플리케이션 구조와 네트워크 구조는 다르다!!!
애플리케이션 개발자에 의해 설계되고 애플리케이션이 다양한 종단 시스템에서 어떻게 조직되어야 하는지를 지시한다.
두 프로세스 간의 통신 세션에서 통신을 초기화(다른 프로세스와 세션을 시작하려고 접속을 초기화)하는 프로세스를 클라이언트라 하고, 세션을 시작하기 위해 접속을 기다리는 프로세스를 서버라고 한다.
프로세스는 소켓을 통해 네트워크로 메시지를 보내고 받는다.!
프로세스는 집, 소켓을 출입구 로 비유된다.
프로세스가 메시지를 다른 호스트의 프로세스로 보내고 싶을 때, 소켓 바깥 네트워크로 메시지를 밀어낸다.
이 송신 프로세스는 네트워크를 거쳐 목적시 프로세스 소켓으로 메시지를 보내기 위해 송신 프로세스의 소켓에 전송 구조가 있다.
메시지가 목적지 호스트에 도착하면 메시지는 수신 프로세스의 소켓을 거치고 수신 프로세스는 메시지를 처리한다.
소켓은 네트워크 애플리케이션이 인터넷에 만든 프로그래밍 인터페이스 이므로 애플리케이션과 네트워크 사이 API라고도 한다.
한 호스트 상에서 수행되고 있는 프로세스가 패킷을 다른 호스트에서 수행되고 있는 프로세스로 패킷을 보내기 위해서는 수신 프로세스가 주소를 가지고 있어야 한다.
인터넷에서 호스트는 IP주소로 식별된다.
수신 프로세스는 포트 번호로 식별된다.
인기 있는 프로세스는 특정 포트 번호로 식별된다.(예: 웹서버 80번, 메일 서버 25번)
애플리케이션 계층 프로토콜은 다른 종단 시스템에서 실행되는 애플리케이션의 프로세스가 서로 메시지를 보내는 방법을 정의 한다.
웹의 어플리케이션 계층 프로토콜인 HTTP 는 RFC로 얻을 수 있다.
애플리케이션 계층 프로토콜은 네트워크 애플리케이션의 한 요소일 뿐이다.
웹은 웹 서버로부터 문서를 얻게 해주는 네트워크 애플리케이션
웹 어플리케이션은 HTML, 브라우저, 웹 서버 그리고 애플리케이션 계층 프로토콜을 포함하는 여러 요소들로 구성된다.
애플리케이션 계층 프로토콜 SMTP(Simple Mail Transfer Protocol)은 전자 메일의 주요한 프로토콜이다.
SMTP는 전자메일 애플리케이션의 한 요소(하지만 중요한 요소)일 뿐이다.
강의 영상 순서에 따라 정리함
소켓이 애플리케이션 프로세스와 트랜스포트 프로토콜 간의 인터페이스라는 것을 까먹지 말자.
트랜스포트 계층 프로토콜이 그것을 이용하는 애플리케이션들에게 제공할 수 있는 서비스는 무엇인가?
인터넷이 제공하는 애플리케이션 지원 유형
인터넷은 TCP와 UDP 전송 프로토콜을 제공한다.
TCP
TCP는 반드시 서버와 클라이언트가 연결되어있어야 한다.
대신 신뢰성 있는 데이터 전송 서비스를 제공한다.
또한 혼합 제어 방식, 즉 통신하는 프로세스의 직접 이득보다는 인터넷의 전체 성능 향상을 위한 서비스를 포함한다.
UCP
연결을 하지 않아도 된다. 그러나 신되성이 없다.
혼합 제어 방식도 포함하지 않는다. 대신 원하는 속도로 하위 계층에 보낼 수 있다.
대부분의 서비스는 TCP를 사용하고 있다. 신뢰성을 보장하기 때문이다.
그러나 인터넷 전화 응용 개발자들은 UDP를 선호하기도 한다. TCP의 혼합제어 방식과 오버헤드를 회피할 수 있기 때문이다.
그러나 대부분의 방화벽에 UDP 트래픽이 차단될 수 있다.
웹의 어플리케이션 계층 프로토콜인 HyperText Transfer Protocol (HTTP)는 웹의 중심이다.
http는 클라이언트-서버 모델을 채택한다.
서로 다른 종단 시스템에서 수행되는 클라이언트 프로그램과 서버 프로그램은 서로 http 메시지를 교환하여 통신한다.
웹 페이지(web page,문서) 는 개체들로 구성된다.
URL 구조
https://www.youtube.com/watch?v=S9GEPaQ1lFs&list=PLm556dMNleHc1MWN5BX9B2XkwkNE2Djiu&index=9
- www.youtube.com 은 호스트 네임이다.
- watch?~ 는 경로 이름이다
HTTP는 웹 클라이언트가 웹 서버에게 웹 페이지를 어떻게 요청하는지와 서버가 클라이언트로 어떻게 웹 페이지를 전송하는 지를 정의한다.
HTTP는 TCP를 전송 프로토콜로 사용한다.
HTTP는 비상태 프로토콜
서버는 진행중인 요청에 대한 내부 상태를 유지하지 않는다.
여러 객체를 다운로드 하려면 TCP 연결 여러개를 열어야한다.
-RTT
HTTP 1.1 지속 연결을 자주 쓴다.
동일한 클라이언트와 서버 사이에서 연결과 응답을 받을 수 있다.
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
- index.html 을 가져온다
- http 1.1 을 이용해
- 호스트는 www.someschool.edu이고
- 모질라 브라우저를 이용해 요청하고 있다.
- 허용되는 언어는 프랑스어다.
- 연결은 닫혀있다.
HTTP 요청 메시지의 일반 포맷
POST
HEAD
GET요청과 동일하지만 응답이 없는 응답을 요청
해달 개체를 실제로 검색하진 않는다.
GET
PUT
HTTP 응답 메시지
HTTP/1.1 200 OK
Connection: close
Date: Tue, 18 Aug 2015 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 18 Aug 2015 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(data data data data data ...)
HTTP/1.1 프로토콜을 쓰고 있다.
상태코드 200 : 성공
OK : 짧은 상태문구
응답 헤더줄
날짜와 시간, 서버 유형(아파치 서버 2.2.3), 수정된 시간, 콘텐츠 길이, 콘텐츠 유형 필드,
상태코드
200 OK : 요청 성공
301 Moved Permanently: 데이터가 딴곳으로 갔다.
400 Bad Request: 요청이 잘못되었다.
404 NOT FOUND: 서버에서 문서를 찾을 수 없다
505 HTTP Version Not Supported: 요청 HTTP 프로토콜 버전을 서버가 지원하지 않는다.
웹 사이트를 쿠키를 사용하여 사용자에 대한 정보를 유지하며, 이 쿠키 기술은 네가지 요소를 가지고 있다.
클라이언트는 방문한 다른 웹사이트의 쿠키정보도 가지고 있다.
EBAY는 있지만 AMAZON은 없는 상황
아마존에 요청 시 쿠키를 생성하고 트랜잭션 정보를 DB에 저장
쿠키정보를 가지고 클라이언트에 HTTP에 응답
두번째 요청에선 아마존의 쿠키정보는 이용해 쿠키 작업을 수행 후 응답
요청이 특정 상품 하나만 보려고 했음에도 비슷한 상품 항목을 같이 보낸다.
일주일뒤에 다른 쿠키로 같은 응답을 할 수 있다.