티스토리 뷰

네트워크

[Web] 1. 웹의 구조

금전 2018. 7. 6. 21:06

[Web] 1. 웹의 구조

 

World Wide Web (WWW)

인터넷 상에서 동작하는 서비스의 일종이다.

[각주:1]HTTP 프로토콜, 하이퍼텍스트, HTML 형식 등을 사용하여 그림과 문자를 교환하는 전송방식이다.

 

* 「웹 해킹 입문 - 가상 환경에서 실습으로 익히는 기본 개념과 원리」, 이상한 지음, 프리렉

서적을 공부하며 포스팅을 작성하였습니다.

 

인터넷과 웹은 거의 혼용되어서 쓰이고 있지만, 엄밀히 말해서 다른 개념이다.

쉽게 생각해서 인터넷 ⊃ 웹 이다.

인터넷은 TCP/IP 프로토콜을 사용하는 네트워크의 집합체를 의미하고,

웹은 그 안에서 이루어지는 서비스를 말한다.

 

 

하이퍼텍스트, HTML

웹은 HTML 형식을 사용하는 HTTP 서비스다.

HTML이란 Hypertext Markup Language의 약자로 웹 페이지를 만들기 위한 언어다.

여기서 의미하는 하이퍼텍스트란, 페이지를 서로 연결하여 넘나드는 것을 말한다.

 

하이퍼텍스트의 시작은 링크를 통해 다른 사이트의 HTML 문서에 접근하는 것이 시작이었다.

초기에는 텍스트와 이미지 중심이었지만, 현재는 다양한 멀티미디어를 다루고 있다.

 

HTTP

HTTP는 웹을 이해하기 위해 필수적으로 알아야 할 프로토콜이다.

웹 해킹도 HTTP의 허점을 이용하여 공격하고 있기 때문에 기본 웹 공격을 이해하기 위해서는 꼭 알아야 한다.

HTTP는 TCP/IP에서 응용 계층에 해당한다.

 

HTTP의 특징은 다음과 같다.

 

요청과 응답에 의한 통신 구조

클라이언트의 요청에 의해 통신 시작

상태가 없는(stateless) 프로토콜

 

여기서 '상태가 없는' 프로토콜이란 이전의 상태들을 저장하지 않는다는 것을 의미한다.

웹이 가지고 있는 이러한 한계를 극복하기 위해 쿠키나 세션 등의 기술이 사용된다.

 

한편, HTTP는 전체 인터넷 프로토콜에서 응용 계층에 해당한다. [각주:2]

 

HTTP는 서버 - 클라이언트 통신 모델을 사용하며, 요청은 클라이언트에 의해 수행된다.

앞서 말했듯이 상태정보가 저장되지 않기 때문에, 서버는 이전의 요청 내용을 저장하지 않는다.

(HTTPS는 암호화 통신을 뜻한다.)

 

위에 말한 요청과 응답은 메시지를 주고받음을 의미한다.

클라이언트는 사용자 PC의 웹 브라우저이고, 서버는 웹 서버를 의미한다.

 

도식화하면 이와 같다.

 

1. 클라이언트가 브라우저 입력창에 http://host:port를 입력한다.

2. 브라우저는 request message 전송

3. 서버는 URL을 서버 내의 파일 또는 프로그램 등으로 맵핑

4. 서버가 response message 전송

5. 브라우저는 전송받은 메시지를 변환하여 클라이언트에게 보여준다.

 

웹 서버는 이와 같이 클라이언트로부터 메시지를 받으면 요청된 URI를 통해 서버 경로의 해당하는 웹 문서를 찾는다.

문서를 요청하기 위한 메서드의 종류는 여러가지가 있다.

가장 대표적으로 알려진 메서드는 GET과 POST다.

 

GET : 서버에 자원을 요청한다. 요청한 내용이 URI에 보이고, 데이터는 4,096으로 제한된다.

POST : 서버에 데이터를 전송한다. 요청한 내용이 보이지 않는다.

HEAD : 헤더 정보를 얻는다.

TRACE : Loopback 테스트

OPTIONS : 응답 가능한 메서드들을 요청한다.

PUT : 서버에 자원을 생성한다,.

DELETE : 서버의 자원을 삭제한다.

 

메서드에 관한 설명을 보면, PUT과 DELETE 메서드의 경우 자원에 직접 접근할 수 있음을 알 수 있다.

이를 이용해 악성 코드를 업로드한다거나 서버의 중요한 자원을 임의대로 삭제할 수 있다.

따라서 PUT과 DELETE는 보안상 치명적이다.

또한 TRACE와 OPTIONS는 서버의 정보를 얻을 수 있으므로, 서버의 보안상 취약점을 알 수 있기 때문에 치명적이다.

 

서버와 클라이언트가 주고받은 메시지를 더 자세하게 보기 위해 간단한 웹 페이지를 실행하여 결과를 확인해본다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>test</title>
</head>
<body>
Welcome !
</body>
</html>

 

위와 같은 간단한 html 파일을 작성하여 크롬으로 불러왔다.

 

[F12]를 눌러 개발도구로 들어간 뒤 네트워크로 이동한다.

 

 

요청한대로 새로고침 해주면 메시지를 확인할 수 있다.

 

 

메시지를 위에서부터 차근차근 확인해보면, 요청된 URI 등의 정보를 확인할 수 있다.

위 메시지는 GET 메시지를 통해 전송되었으며,

상태코드는 303이다.

상태코드는 서버가 보내는 요청에 대한 응답 상태를 의미한다.

 

1XX은 일반적 정보, 2XX은 정상적으로 처리되었음을, 3XX은 리다이렉션, 4XX는 클라이언트 에러, 5XX는 서버에러를 의미한다.

 

헤더 정보 중 첫번째 하이라이트된 부분은 기본적으로 처리할 수 있는 확장자들을 의미한다.

그 아래 하이라이트된 부분은 '캐시'를 의미한다.

웹은 매번 요청과 응답을 수행하지만 상태정보가 저장되지 않기 때문에 자원 소모가 많다.

이를 새로운 데이터가 아닌 기존의 데이터를 요청하는 캐시 기능을 이용하여 보완한다.

캐시 값이 0이 되면 항상 최신 데이터를 요청할 수 있다.

  1. 위키백과, https://ko.wikipedia.org/wiki/%EC%9B%94%EB%93%9C_%EC%99%80%EC%9D%B4%EB%93%9C_%EC%9B%B9 [본문으로]
  2. TCP/IP보충내용, http://titanic1997.tistory.com/29 [본문으로]

'네트워크' 카테고리의 다른 글

+ LAN(Local Area Network)  (0) 2018.07.06
[Web] 0. 웹이란? + 이더넷(LAN)  (0) 2018.07.06
FTP 이론.  (0) 2018.04.10
[Unix/Linux] FTP 서버 실습  (0) 2018.04.10
데몬이란?  (0) 2018.04.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함