HTTP

roon2020·2021년 2월 6일
0

network

목록 보기
1/3
post-thumbnail

Application Layer

소개

application layer(응용층)는 사용자에게 서비스를 제공합니다.
인터넷에서 온라인 서점을 이용하는 것이 응용층을 이용하는 예입니다.
network,transport 층을 포함한 하위 4개의 층 위에서 동작합니다.
응용층을 이용하는 사람은 이 하위 4개층을 의식하지 않습니다. 그저 논리적으로 연결(logical connection)되어 있다고 생각하고 통신을 합니다.
실제로는 LAN,WAN,라우터 등을 거쳐서 데이터들이 물리적으로 전송이 될 것입니다.

특징

응용층은 프로토콜 그룹 중에서 최상위라는 점에서 특별합니다.
TCP/IP 프로토콜 계층에서 각 프로토콜은 위,아래 두 가지에 서비스를 제공하고 제공받습니다. 하지만 응용층은 최상위 층에 있어서 전송층으로부터 제공받기만 합니다. 이것이 응용층이 더 자유로운 설계가 가능한 이유입니다.

방식

  1. Server - Client
    대표적이고 전통적인 방식입니다. WWW,HTTP,FTP,SSH,전자우편 등이 이 방식을 사용합니다.

  2. P2P(peer to peer)
    서버가 항상 실행되지 않아도 된다는 장점이 있습니다. 때로 서버가 될 수 있고 클라이언트가 될 수 있습니다. 보안상의 문제가 있습니다.

client는 어떻게 server와 통신하는가?

대표적으로 socket을 이용합니다.
socket은 응용프로그램이 생성하는 하나의 객체입니다.
응용층의 관점에서 client process와 server proces 사이의 통신은 2개의 socket간의 통신입니다.
socket이 인터페이스가 되서 응용층과 하위 4계층이 소통할 수 있게 만들어줍니다. 그러면 나머지는 OS와 하위 TCP/IP 프로토콜이 알아서 통신을 처리해줍니다.
인터넷의 컴퓨터는 32비트(IPV4) 정수인 IP주소로 유일하게 정의됩니다. 한 컴퓨터에서 여러 프로세스가 실행될 수 있습니다. 프로세스를 유일하게 식별하기 위해 포트번호를 추가로 사용합니다. socket 주소는 ip주소 +포트번호로 만들어져서 프로세스를 유일하게 나타냅니다.
특히 인터넷 관리 기관에 의해 정의된 표준의 포트번호는 정해져있습니다.
대표적으로 HTTP는 80이고 다른 프로세스에 의해 사용될 수 없습니다.

자바로 구현한 소켓통신 예시 (github 소스코드)

WWW

소개

표준 응용층 프로토콜 중에 대표적인 것으로 WWW(웹)가 있습니다. 웹과 가장 많이 쓰이는 응용 프로그램이 HTTP입니다. 웹의 특징은 분산과 링크입니다. 분산은 웹의 내용인 웹 페이지들이 site라 불리는 여러 장소에 분산되어 있는 것입니다. 각각의 웹 페이지의 실체는 이름과 주소를 가진 파일입니다. 거미줄처럼 엮여있다는 말인 web은 링크를 잘 나타냅니다.

URL

Uniform Resource Locator의 준말입니다. 웹페이지는 파일일 뿐입니다. 이 파일은 다른 파일과 겹쳐서는 안됩니다. 이 파일의 이름을 유일하게 정하기 위해 4가지 식별자가 필요합니다.

[ protocol ] //[ host ]:[ port ]/[ path ]
예) http://localhost:8080/Network/Forouzan

  1. protocol
    이것은 운송수단을 의미합니다. 대부분 http 또는 https를 사용합니다.

아래는 웹 페이지를 유일하게 식별하기 위해 필요한 3가지입니다.

  1. host
    서버의 ip 주소 혹은 dns명입니다.

  2. port
    http:서버는 80번 포트
    client는 임의로 지정이 가능합니다.

  3. path
    하위 운영체제에서 파일의 위치와 이름입니다. 로컬에서 파일의 위치와 같습니다.

이 4가지를 결합하기 위해 URL이 만들어졌습니다.

HTTP

소개

하이퍼텍스트 전송 프로토콜의 준말입니다.
웹으로부터 웹페이지(파일)을 가져오기 위한 server-client 설정(통신규약)을 정의합니다. 주로 TCP 위에서 동작합니다. 그래서 오류나 메시지 손실에 대해 걱정하지 않아도 됩니다.
HTTP 1.1 버전부터 persistent connection이 default입니다. 1.0 버전에서는 클라이언트 요청 때마다 서버가 열리고 닫혔습니다. 그래서 오버헤드가 컸었습니다. 하지만 서버를 계속 열어둬서 매번 3번의 handshake메시지가 필요없게 됐습니다. 서버를 열고,닫을 때만 필요합니다.

request

method +url로 표현합니다.
method는 get,post,put,delete,head등을 말합니다.
payload도 줄 수 있겠습니다.

response

status code와 header,body로 구성됩니다.
status code : 성공/실패 여부
header : 서버의 추가 정보를 client에 보냅니다.
body : 문서내용

WWW는 원래 stateless로 설계되었습니다. 클라이언트가 한번 요청하고 서버가 답해주면 그걸로 끝입니다. 연결성있는 서비스를 위해 cookie 매커니즘이 도입되었습니다. cookie를 통해 서버는 이전에 방문했던 클라이언트를 식별할 수 있습니다.

  1. 쿠키의 생성
    쿠키는 처음에 서버에서 만들어집니다. 서버는 클라이언트의 필요한 정보를 저장해둡니다. 클라이언트로 응답을 보낼 때, 쿠키와 함께 보냅니다.
    쿠키를 받은 클라이언트의 브라우저는 쿠키 디렉토리에 쿠키를 저장합니다.

  2. 쿠키의 사용
    클라이언트가 서버로 요청할 때, 브라우저가 쿠키 디렉토리를 검색합니다.
    쿠키가 있으면 요청에 포함시킵니다. 따라서 서버는 예전에 방문한 적 있는 클라이언트라는 사실을 알 수 있습니다.

profile
keep in positive mindset. I've got this.

0개의 댓글