FTP, HTTP와 같은 기본 응용 계층 프로토콜의 예를 배운다.
FTP는 굉장히 복잡한 프로토콜임.
HTTP는 단순하고 강력함.
http://artgarden.co.kr/comnet
1) http:
: 프로토콜 이름
ex) file: , ftp: 가 될 수 있음 (ftp도 브라우저로 접속 가능함)
2) //artgarden.co.kr
: host 이름
프로세스에 가고자 할 때 필요한 주소 : ip, port
ip가 나타내는 것: 기계 자체의 고유 id
3)/comnet/
: 기계까지 간 후 '자원'
실제로 자원이 위치하는 곳이 어디냐
수백개 수천개의 웹페이지와 이미지의 자원들... 중 하나 !
포트번호는 생략할 수 있다.
왜?
http 프로토콜은 기본적으로 80번 포트를 사용한다.
ftp 프로토콜은 기본적으로 21번 포트를 사용한다.
사용자가 Http client 웹 브라우저에 url을 입력하면 get, post 요청을 Http server인 웹 서버 (nginx)을 한다. 그러면 http server는 200 응답 또는 error응답을 한다.
기본적으로 이 HTTP 프로토콜은 TCP를 기반으로 동작한다.
HTTP Transaction
FTP는, Stateful protocol
=> 계속 요청하고 응답하면서 client가 어떤 동작하고, 사용자가 누구고, 어떤 디렉토리 사용하는지 server가 계쏙~~~ 추적
HTTP는 Stateless Protocol
=> 한번 요청하고 응답하고나면 client가 어떤 일 하는지, 어떤 정보인지 다 잃어버림.
굉장히 단순하기 때문에 그 위에 풍부한 응용을 언질 수 있음.
자원을 주는 입장에서 내가 이렇게 줘도 얘가 이해할까? 라는 의구심이 있음.
자원 가져올 때 세심하게 나에 대한 정보를 주면 줄수록 Server가 적절한 정보를 줄 수 있음.
png 파일 형식을 이해하는지, 못하는지
압축된 파일이 괜찮은지, 안괜찮은지
매개변수 설정 가능.
매개변수1:
매개변수2:
server는 같은데 어떤 host를 적느냐에 따라서 다른 정보를 줄 수 있음.
host:formal.kau.ac.kr
내가 쓰는 웹 브라우저는 이러이러한 형태니까, 내가 잘 볼 수 있게 줬으면 좋겠어.
ex) chrome, internet explore ...
User-agent: Mozila/5.0
이 모든 내용을 HTTP 요청 header 라고 함.
한줄 띄기
=> header가 끝이다.라는 의미
=> 이것으로서 GET 요청은 끝.
Last-modified : 최근 수정 날짜
... 그밖에도 server의 정보 줄 수 잇음 (난 아파치 쓰고 있음)
몸통이 언제 끝나는지는 어떻게 아는가?
: 자원을 server에 게시하고 싶을 때.
url 뒤에 인자가 있으면 URI
URL : Univrsal Resource Locater (자원의 위치)
URI : Universal Resource Identifier
Cookie
가 이 의문점을 해결해줌. 쿠키를 설명하기 위해서 client와 server가 어떤 구조("웹 응용의 구조")를 가지고 있는지 설명해야됨
현재 홈페이지
application layer
HTML 엔진을 가지고 있음.
presentation layer
: 풍부한 표현 능력을 갖고 있는 두꺼운 엔진임. HTTP 프로토콜
session layer
서버 응용 프로그램
: http의 단순함으로 server 응용이 높은 자유도를 가지고 있음.
: ex) 로그인 정보, 장바구니 정보
서버 응용 엔진
HTTP 프로토콜
session layer
: stateless 하다 ~ ex) 만약 일반적인 경우로 client에서 파일로 된 html을 달라고 url을 주는 경우는,
웹 서버는 그 파일 시스템에서 찾아다가 넘겨준다.
ex2) URI를 통해서 GET, POST를 하는 경우에는, 요청에 맞게 맞춤형으로 자원을 만들어내서 응답해야 한다.
즉, stateless라는 말은 http server 쪽 (session layer)에만 해당되는 내용이고 , 실제 그 위에 올라가는 server 응용이 stateless는 아니라는 말 ~
서버 응용이 누가 이전에 접근한 사람이 다시 온건지, 동일한 사람인지 구별할 방법이 바로 Cookie라는 것~~
상태 정보를 담는 도구다.
: 서버 응용이 클라이언트의 이전 과거 정보 (state)를 파악하기 위한 도구.
Set-cookie 라는 필드
가 있음. cookie라는 필드가 존재.
server는 상태 정보를 갖고 있지 않지만, client는 반대로 상태 정보를 갖고 있다.
그 상태 정보가 뭐다? server지난 번에 준 cookie다 ~~
그러면 그 cookie를 보여주면 client가 누군지 server가 생각해낼 수 있음.
web server는 세션계층에서는 stateless 지만, 응용계층에서는 statefull하게 된다.
장점) 쿠키는 기본적으로 client에게 필요한 정보를 쿠키 형태로 보내줌으로써 정보를 알게함
단점) client에게 너무 많은 정보를 open함.
: 기억해야할 상황을 쿠키에 담아 client가 기억하도록 하고, server는 client의 방문시 주는 키 정보의 맞추어 반응한다.
client에 너무 많은 권한과 정보를 준다.
=> 이 문제를 해결하기 위한 방법으로 세션이 있음
: client에게 세션 id 정보만 쿠키로 server에게 전달하고, 세션들의 특성은 server가 관리한다.
ex) 몇번 방문했는지등의 정보
지금까지 http 기능에 대해서 알아봤다면, 이제는 성능에 대해 알아보자.
http의 성능을 어떻게 발전시킬 거인가?
=> tcp 연결/종결에도 시간이 소요되기 때문에
성능을 평가하는 척도
: 패킷을 보내기 시작한 시점에서 패킷을 받기 시작한 시점까지 걸리는 전송 지연 시간
패킷을 미국 구글사에 요청을 보낸다.
그 사이에 아무리 좋은 네트워크가 있어도,
패킷 전송의 시간 지연이 생김
중간에 장비들을 거치고 가면서 결과적으로
어찌됐든 지연 이후에 구글이 패킷을 받는다.
: 단위 시간당 전송되는 데이터의 양.
블루트스와 내 휴대폰의 거리는 짧지만, 블루투스가 가지고 잇는 대역폭
이 좁음.
EX)
답)
1/100초 => 10ms(밀리 세컨드)
네트워크에 따라서 지연시간 특성, 전송률 특성이 다 다름.
Web Cache
많이 사용되는 컴퓨터 성능 향상 기법임.
Web Cache란?
Web Cache
file system
결론)Web Cache란?
: Proxy Server라고도 부르며, ISP(Internet Service Provider) 에서 비용절감을 위하여 이전에 가져온 적이 있는 문서를 DB에 임시저장해 놓았다가 동일문서가 다시 요청될 때 재사용한다.
web cache는 client이자, server이다.
개별 client 한테는 db에 저장된 문서를 주는 "server"이고,
google server한테는 문서를 요청하는 "client"임.
web cache가 주는 이득
web cache 동작