Web page 는 HTML file, JPEG image, Java applet 같은 objects 로 구성되어 있다. 대부분의 web page 는 몇몇 referenced objects 를 포함하는 base HTML file 로 이루어져 있다. objects 는 URL 에 의해 다루어진다. URL 의 예로 'https://www.someschool.edu/someDept/pic.gif:80' 를 볼 수 있다. 'https://' 는 프로토콜(ex. ftp://, telnet:// ...), 'www.someschool.edu'는 hostname, '/someDept/pic.gif' 는 path name, 80 은 port number 를 뜻한다.
HTTP
HTTP(Hypertext Transfer Protocol) 는 Web 의 application-layer protocl 이다. Web 은 client-server 모델로 Chrome 과 Firefox 같은 Web brower 가 client 의 역할을 하고 Web object 를 보관하는 Web server 가 server 역할을 한다. HTTP 는 client 와 server 간 request 와 response 의 방식을 정의한다. 일반적으로 user 가 web page 에 요청을 하면, web browser 는 web server 에 HTTP request message 를 보내고, web server 는 request 를 받아 HTTP response message 에 objects 를 담아 응답한다.
HTTP 는 TCP 를 사용한다. client 와 server 사이에 TCP connection 이 생기면, client 와 server 는 socket interface 를 사용해 HTTP message 를 교환한다. TCP 는 reliable data trafer 을 보장하므로 HTTP 는 loss data 와 TCP 의 detail 한 동작들을 신경쓰지 않아도 된다.
HTTP 는 stateless protocol 이다. server 는 과거의 client request 에 대한 정보를 유지하지 않는데 이를 stateless 하다고 한다. 참고로, 프로토콜이 state 를 유지하는 것은 어렵다.
HTTP Connection
HTTP 는 non-persistence connection 과 persistent connection 을 모두 사용한다.
Non-Persistence Connection
Non-persistence connection 에서는 최대 한 개의 object 가 TCP connection 을 통해 보내지고, connection 은 close 된다. multiple objects 를 다운로드하려면 multiple connections 가 필요하다.
base HTML file 과 10 JPEG images 로 이루어진 page 를 요청한다고 가정하면 다음과 같은 수행이 일어난다.
- HTTP client 가 HTTP server 로 TCP connection 을 시작하고 HTTP server 는 connection 을 accept 해 client 에게 알린다. TCP connection 으로 client 와 server 사이에 (TCP connection) socket 이 생긴다.
- HTTP client 는 socket 을 통해 HTTP request message 를 보낸다.
- HTTP server 는 socket 을 통해 request message 를 받는다. 요청하는 object 를 포함한 response message 를 만들어 socket 을 통해 보낸다.
- HTTP server 는 TCP connection close 를 한다. (실제로 종료하지는 않는다.)
- HTTP client 는 reponse message 를 받고 TCP connection 을 종료한다. client 는 response message 로부터 file 을 추출해 HTML 파일임을 확인하고 10 JPEG objects 를 참조함을 확인한다.
- 1 ~5 를 10 jpeg objects 에 대해 각각 반복한다.
RTT(Round Trip Time) 은 small packet 이 client 부터 server 까지 다녀오는데 걸리는 시간을 의미한다. Non-persistence connection 에서는 TCP connnection 시 1 RTT, HTTP request and response 시 1 RTT 가 소요되어 object 당 2RTT + file transmissiontime, 약 2 RTTs 의 시간을 요구한다..
Persistence Connection
Persistence connection 은 mulitple objects 가 client 와 server 사이에 하나의 TCP connection 을 통해 보내진다. server는 response 를 보낸 후에 connection open 하여, open connection 을 통해 연속되는 HTTP messages 가 동일한 client/server 사이에 보내진다. 일정 시간동안 connection 이 사용되지 않으면 HTTP server 가 connection close 를 한다. Non-persistence connection 과 다르게 object 당 최소 1 RTT 의 시간을 요구한다.
HTTP Message Format
HTTP message 에는 request 와 response 가 있다.
HTTP Request Message
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
HTTP Request Message 는 ASCII text 로 쓰여졌다.
Request line 은 method field, URL field, HTTP version field 로 구성되어 있다. method filed 는 GET, POST, HEAD, PUT, DELETE 같은 값들을 가진다.
Header lines 는 server 에 필요한 여러가지 값들이 들어간다.
POST method 를 사용할 경우, user 가 입력한 form input 이 entity body 에 값이 들어간다.
HTTP Response Message
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 ...)
Status line 은 protocol version field, status code, status message 로 구성된다. status code 로 request 에 대한 결과를 간단하게 알 수 있다.
Header lines 는 client 에 필요한 여러가지 값들이 들어간다.
Entity body 는 client 가 요청한 object 를 담은 message 를 의미한다.
Cookies
HTTP server 는 statelsess 하지만, user 의 상태를 유지할 수 있도록 HTTP 는 cookie 를 사용한다. cookie 에는 다음과 같이 4가지 구성요소가 있다.
- cookie header line of HTTP response message
- cookie header line in the HTTP request message
- cookie file kept on the user's end system and managed by the user's browser
- back-end database at Website
HTTP response 는 cookie 설정을 위해 'Set-cookie' header 를 사용하고, HTTP request 는 client 가 가지고 있는 cookie 를 알리기 위해 'Cookie' header 를 사용한다. cookie 는 authorization, shopping carts, recommendations 등에 사용된다. 이러한 cookie 의 사용은 편의성을 주지만, privacy 의 노출의 위험이 있다.
Web Cashing
proxy server 라고도 불리는 Web cache 는 origin Web server 를 대신하여 client 의 HTTP request 를 응답한다. Web cache 는 자체 disk storage 가 있어 최근 요청된 objects 의 복사본을 저장한다. Web cache 를 사용한 HTTP 통신 과정은 다음과 같다.
- broswer 는 Web cache 와 TCP connection 을 만든 후, Web cahce 에 object 를 위한 HTTP request 를 보낸다.
- Web cahce 는 local storage 에 obejct 의 복사본이 있는지 확인하고, 있다면 Web cache 가 client brower 에게 object 를 포함한 HTTP response message 를 return 한다.
- 만약 Web cache 가 object 를 가지지 않는다면, Web cache 는 origin server 와 TCP connection 을 연다. Web cache는 origin server 에 object 를 위한 HTTP request 를 보내고, origin server 는 Web cache 로 object 와 함께 HTTP response 를 보낸다.
- Web cache 가 object 를 받으면 local storage 에 object 의 복사본을 저장하고, 복사본을 포함한 HTTP response message 를 client browser 에 보낸다.
위 상황을 보면 Web cache 는 client 이면서 server 임을 알 수 있다.
Web cache 는 client request 에 대한 response time 을 줄여주고 institution(for example, a company or a university) 의 access link 의 traffic 을 줄여준다. CDNs(Content Distribution Networks) 의 사용으로, Web cache 는 internet 에서 점차 중요한 역할을 하게 되었다.
Conditional GET
cache 에 있는 object 가 최신이 아닐수 도 있는데, HTTP 는 conditional GET 메커니즘을 사용해 cache 의 version 이 최신이 아니라면 object 를 보내지 않도록 한다. Conditional GET message 는 request meesage 가 GET method 를 사용하고 'If-Modified-Sine' header 를 포함한다.
cache 내에 object 가 없다면, cache 는 server 에 request message 를 보낸 후 object 가 담긴 response message 를 받는다. cache 는 object 를 저장할 때 Last-Modified date 를 함께 저장한다. cache가 If-modified-since : <date> header 를 포함한 GET request 를 보낸다면 server 는 해당 object 의 수정여부를 확인한다. 전달받은 date 이후에 object 가 수정되지 않았다면 server 는 cache 에게 object 없이 304 Not Modified response 를 보낸다. 만약 object 가 수정되었다면 수정된 data 를 포함하여 response 를 보낸다.
참조
Computer Networking _ A Top Down Approach, 7th, converted
'COMPUTER SCIENCE > Network' 카테고리의 다른 글
[Network] Application Layer - DNS (0) | 2022.11.23 |
---|---|
[Network] Application Layer - Electronic Mail (0) | 2022.11.21 |
[Network] Application Layer - Principle of Network Applications (0) | 2022.11.08 |
[Network] Protocol Layers (0) | 2022.11.06 |
[Network] Components of a Computer Network (0) | 2022.11.06 |
댓글