그림으로 배우는 HTTP & Network Basic 책의 1,2,3,4,5,10장
공부하며 정리해봄. 목차나 내용은 내가 보기 편하게 변경.

CH1) 웹과 네트워크의 기본

1. HTTP

HTTP. HyperText Transfer Protocol 클라이언트가 URL 입력 > 브라우저는 URL을 이용해 웹서버로부터 리소스(파일등의 정보)를 얻어옴
클라이언트에서 서버까지 일련의 흐름을 결정하고 있는 것 = HTTP라 부르는 프로토콜 웹은 HTTP라는 약속을 사용한 통신으로 이루어짐.
약속 = 프로토콜
서버에 의뢰를 하는 웹브라우저 등을 클라이언트라 부름. Client

등장배경
1989년 3월에 HTTP탄생.
CERN(유럽 입자 물리학 연구소)의 팀 버너스리 박사가 멀리있는 동료 연구자와 지식을 공유할 수 있도록 시스템을 고안.
최초로 고안한 것은 여러문서를 상호연결시키는 하이퍼텍스트에 의해 상호간 참조할 수 있는 WWW의 기본개념이 되는 것.
WWW는 지금으로 말하자면 웹브라우저, 그당시에는 하이퍼텍스트를 열람할 수 있는 클라이언트 애플리케이션 명칭이었으나 지금은 이런 시스템을 가리키는 명칭으로 불리고 있음.
WWW를 구성하는 기술

  • 문서 기술 언어 : SGML을 베이스로 한 HTML
  • 문서 전송 프로토콜 : HTTP
  • 문서 주소 지정방법 : URL. Uniform Resource Locator

HTTP는 등장한 당시에 주로 텍스트를 전송하기 위한 프로토콜이라 상당히 심플해서,
여러가지 응용방법을 고려해 기능이 계속 추가되고 있음.
지금은 웹이라는 틀을 넘어서 다양하게 사용되는 프로토콜이 되었다.

2. TCP/IP

: 인터넷과 관련된 다양한 프로토콜의 집합의 총칭
FTP, HTTP, UDP, DNS, IP, PPPoE, IEEE 802.3, SNMP 등..
컴퓨터와 네트워크 기기가 서로 다른 하드웨어와 운영체제를 가지고 통신하기 위해서는 서로 같은 방법(규칙)으로 통신해야 함.
어떤 규칙? 케이블 규격 / IP주소 지정방법 / 떨어진 상태를 찾기 위한 방법 / 그곳에 도달하는 순서 / 웹을 표시하기 위한 순서 등..

TCP/IP는 계층으로 관리함. Layer. 4개

  • 애플리케이션 계층
  • 트랜스포트 계층
  • 네트워크 계층
  • 링크 계층 계층화 한 이유? 설계가 편함. 자기 자신이 담당한 부분만 고려하면 됨.

3. HTTP와 관계깊은 프로토콜들 : IP, TCP, DNS

IP. Internet Protocol
네트워크 층에 해당. 개개의 패킷을 상대방에게 전달하는 것.
전달하기까지 필요한 여러가지 요소 중 중요한 것

  • IP 주소 ==> 각 노드(?)에 부여된 주소. (설명 구려서 다시 찾음) 네트워크에 존재하는 각 컴퓨터를 식별하기 위해 각각에 서로 다른 값을 할당한 것. 각 기기에 할당되는 것이 아니라 기기에 장착된 각각의 네트워크용 하드웨어에 할당 됨. 즉, 복수의 네트워크하드웨어를 장착한 기기는 복수의 주소 할당.
  • MAC 주소. Media Access Control Address ==> 각 네트워크 카드(?)에 할당된 고유 주소 IEEE에서 표준화된 LAN 방식의 기기는 모두 같은 형식의 주소를 사용하는데 이 주소를 가르킴.

    IP주소는 변경가능하나, MAC주소는 변경불가.

    (추가..)
    ARP 프로토콜. 주소를 해결하기 위한 프로토콜 중 하나.
    라우팅 like 택배배송. 목적지에 도착하기까지 대략적인 목적지만 알고 있음. 이 시스템을 라우팅이라 함.


    TCP. Transfer Control Protocol
    트랜스포트 층에 해당. 신뢰성있는 바이트 스트림 서비스를 제공함.
    바이트 스트림 서비스 : 용량이 큰 데이터를 보내기 쉽게 TCP 세그먼트라고 불리는 단위 패킷으로 작게 분해햐여 관리하는 것.
    대용량의 데이터를 보내기 쉽게 작게 분해햐여 상대에게 보내고, 정확하게 도착했는지 확인하는 역할.

    상대에게 확실하게 데이터를 보내는 방식 => 3 way handshaking
    SYN, ACK라는 TCP플래그 사용


    DNS. Domain Name System
    응용계층 시스템에서 도메인 이름과 IP 주소 이름 확인을 제공.
    사용자는 IP주소 대신 이름(호스트 이름, 도메인이름)을 이용하여 상대의 컴퓨터를 지정. 도메인명에서 IP주소를 조사하거나, IP주소로부터 도메인명을 조사하는 서비스 제공

    위의 프로토콜들을 이용한 전체적인 스토리 ~
  • 송신측에서 도메인명aaa.com/introduce 받아서 DNS에 IP주소 물어보고, 받으면 그 IP주소를 이용해 목적지 이동
  • HTTP담당> HTTP 메시지 작성. aaa.com/introduce의 리소스를 주세요
  • TCP담당> 통신하기 쉽도록 HTTP 메시지를 패킷으로 분해. 상대방에게 패킷을 보냄
  • IP담당> 상대가 어디에 있는지 찾아 중계해 가면서 배송 (송신측, 라우터, 라우터 등, …, 수신측)
  • TCP담당> 상대방으로부터 패킷을 수신. 도착한 패킷을 조립
  • HTTP담당> 웹서버에 대한 리퀘스트 내용을 처리

4. URI, URL

URI. Uniform Resource Identifiers

ftp://ftp.is.co.za/rfc/rfc10.txt
http://www.ieee.org/rfc39.txt
mailto:john_kim@aaa.com
tel:+1-489-398-3333
telnet://103.491.11.34:80/
news:comp.infosystems.www.servers.unix
urn:oasis:names:specification:docbook:dtd:xml:4.1.2

스키마를 나타내는 리소스를 식별하기 위한 식별자.
스키마: 리소스를 얻기위한 수단에 이름을 붙이는 방법. (http, ftp, mailto, file, telnet 등). 공식 URI스키마는 인터넷 상의 자원관리 등을 하는 비영리법인 ICANN산하조직인 IANA에 30개 정도 등록되어 있음.

  • Uniform
    • 통일된(Uniformity) 서식을 결정하는 것. 여러가지 종류의 리소스 지정을 구별없이 같은 맥락에서 사용할 수 있게 한다. (응??) 또한, 새로운 스키마(http:와 ftp등) 도입을 용이하게 함
  • Resource
    • 식별가능한 모든 것. (도큐먼트 파일, 이미지, 서비스(ex. 오늘의 일기예보) 등 다른 것과 구별할 수 있는 것은 모두 리소스) 단일한 부분만 아니라 복수의 집합도 리소스임
  • Identifier
    • 식별자. 식별 가능한 것을 참조하는 오브젝트.
      URI는 리소스를 식별하기 위해 문자열 전반을 나타내는데 비해
      URL은 리소스의 장소(네트워크상의 위치)를 나타낸다.
      URL은 URI의 서브셋이다.
      (이해X)

URL 포맷
http:// user:pass @ www.aaa.com :80 /dir/index.html ?uid=12 #ch1
스키마, 자격정보, 서버주소, 서버포트, 계층적파일경로, 쿼리문자열, 프래그먼트식별자

  • 스키마 : 리소스를 얻기위해 사용하는 프로토콜을 지시. 대소문자 무시, 마지막에 콜론(:)이 붙음. “data:”, “javascript:”같이 데이터와 프로그램도 지정 가능
  • 자격정보(=크리덴셜) : 서버로부터 리소스를 취득하려면 자격정보가 필요. 유저명과 패스워드 지정. 이것은 옵션
  • 서버주소 : DNS이름(www.aaa.com)이나, IPv4주소(192.168.1.1)나, IPv6주소([0:0:0:0:0:0:0:1])를 쓸 수 있음
  • 서버포트 : 서버의 접속대상이 되는 네트워크 포트 번호 지정. 이것도 옵션. 생략시 디폴트 포트가 사용
  • 계층적 파일경로 : 특정 리소스를 식별하기 위해 서버상의 파일 패스를 지정.
  • 쿼리문자열 : 파일 패스로 지정된 리소스에 임의의 파라미터를 넘겨주기 위해 쿼리문자열을 사용. 옵션값
  • 프래그먼트 식별자 : 취득한 리소스에서 서브리소스 (도큐먼트 중간에 위치)를 가리키기 위해서 사용. 옵션값
    RFC. Request For Comments
    HTTP에서 정한 몇가지 기술 사양
    기본적으로 HTTP를 사용하는 클라이언트나 서버는 RFC를 따른다. 그러나 일부에서는 따르지않는 데도 있고 더나아가 독자적으로 확장하는 경우도 있음.

CH2) 간단한 프로토콜 HTTP

하나의 트랜젝션

TCP커넥션 연결 (쓰리웨이 핸드쉐이킹)

HTTP요청
HTTP응답

TCP커넥션 종료

HTTP1.1지속연결 표준동작
HTTP1.0에서는 정식사양이 아님.

HTTP는 스테이트리스(Stateless)프로토콜이다.
과거에 교환했던 리퀘스트와 리스폰스의 상태를 관리하지 않음.
이점도 있지만 이로인한 문제를 해결하기 위한 시스탬 ==> 쿠키
클라이언트 상태 파악하기 위함.
서버에서 리스폰스로 보내진 Set-Cookie라는 헤더필드에 의해 쿠키를 클라이언트에 보존.
다음번에 클라이언트가 같은 서버로 리퀘스트를 보낼 때, 자동으로 쿠키값을 넣어서 송신.
서버는 클라이언트가 보내온 쿠키를 확인해서 어느 클라이언트가 접속했는지 체크하고 서버상의 기록을 확인해서 이전 상태를 알 수 있음.

CH3) HTTP정보는 HTTP메시지에 있다.

인코딩
HTTP로 데이터를 전송할 경우 그대로 전송할 수도 있지만
전송할 때에 인코딩(변환)을 실시함으로써 전송효율을 높일 수 있다.
압축해서 보내는 콘텐츠코딩
분해해서 보내는 청크 전송 코딩

MIME의 확장사양에 있는 ‘멀티파트’
여러 다른 종류의 데이터를 수용하는 방법을 사용

multipart/form-data
웹폼으로브터 파일업로드에 사용

multipart/byterange

하나의 메시지 바디 내부에 엔티티를 여러개 포함시켜 보낼 수 있음.

CH4) HTTP 상태 코드

1xx 정보
2xx 성공(Success)
3xx 리다이렉트(Redirection)
4xx 클라이언트 에러(Client Error)
5xx 서버 에러(Server Error)

CH5) HTTP와 연계하는 웹서버

프록시
서버와 클라이언트 사이에서 중계 프로그램
주로 보안을 위해 사용. 모든 웹 트래픽 흐름속에서 신뢰할 만한 중개자 역할을 한다.
요청과 응답을 필터링한다.
무언가를 다운받을 때 애플리케이션 바이러스를 검출하거나, 초등학교 학생들에게서 성인 콘텐츠를 차단한다.

캐시
프록시서버와 클라이언트 로컬디스크에 보관된 리소스 사본
자주 찾는 것의 사본을 저장해두는 특별한 종류의 http프락시 서버다.
리소스를 가진 서버에 엑세스를 줄이는 것이 가능하기 때문에 통신량과 통신시간을 절약할 수 있다.
캐시의 유효기간

CH10) 웹 콘텐츠에서 사용하는 기술

1. HTML

HTML로 쓰여진 문서 => 브라우저가 해석 => 렌더링(Rendering) 처리한 결과가 표시됨.

HTML. HyperText Markup Language
웹 상에서 하이퍼텍스트(Hypertext)를 보내기 위해서 개발된 언어

Hypertext
문서 시스템의 하나. 문서 중에 임의의 장소의 정보가 다른 정보(문서,이미지 등)에 관련된, 링크되어 있는 문서

Markup Language
문서의 일부에 특별한 문자열(html태그)을 붙여 문서를 수식하는 언어
==> 마크업, 마크업랭귀지라는 말이 퍼블리싱 할 때 주로 마크업 한다 이래서 그냥 이쪽 분야에 속한 말인가 했는데 문서를 수식하는 언어를 통틀어 Markup Language라고 부른다는 걸 처음 알았음 -0-
XML, SGML에도 모두 마크업랭귀지의 ML이 들어간다 !! @ _@

Tag
<…> 로 둘러쌓인 문자. html, head, body ….


HTML 버전

  • HTML원형 : 팀 버너스 리가 HTTP를 발표했을 때
  • HTML1.0 : 1993년 일리노이 대학의 NCSA에서 발표한 ‘모자이크 브라우저’ 가 해석할 수 있는 HTML사양을 정리
  • HTML4.01 : 1999년 W3C라는 조직에서 권고안 출시 (World Wide Web Consortium)
  • HTML5 : 브라우저 간 호환성 문제 해결, 텍스트를 데이터로 다루게 하여 재사용이 쉽게 하거나, 애니메이션 등의 효과가 풍부해짐
    그러나 아직까지 브라우저들의 HTML규격이 통일되어 있지 않아 문제가 많음.
    브라우저에 따라 HTML사양을 따르지 않거나, 독자적으로 만든 태그들


    CSS. Cascading Style Sheets
    HTML 요소들을 어떻게 스타일링 할지 지시함.
    문서의 구조와 디자인을 분리한다는 이념에서 만들어 짐.


2. 다이나믹 HTML

: 정적인 HTML 내용을 javascript같은 클라이언트 사이드 스크립트를 사용해서 동적으로 변경하는 기술.
클릭하면 펼쳐지는 메뉴, 스크롤하는 지도 등
동적으로 바꾸고 싶은 HTML 요소를 지정하기 위해서 DOM이라는 구조를 사용.

DOM. Document Object Model
HTML문서와 XML문서를 위한 API
Application Programming Interface
HTML내의 요소를 오브젝트로 다루어, 문자열을 추출하거나 CSS프로퍼티를 변경 가능.

var content = document.getElementsByTagName('p');
content[2].style.color = '#ff0000';

3. 웹 애플리케이션

: 웹 기능을 사용해서 제공되는 프로그램
쇼핑사이트, 인터넷 뱅킹, SNS, 게시판, 검색엔진, e러닝 등의 동적 콘텐츠를 다루는 프로그램.

정적콘텐츠 : 사전에 준비된 콘텐츠가 있고, 클라이언트에서 리퀘스트 요청을 하면 맞추어 반환
동적콘텐츠 : 웹 서버 상의 프로그램이 HTML등을 생성해서 보내준다. (이 책 정말.. 먼말이야 발번역… ㅡ0ㅡ) (아래쪽의 CGI를 읽어보니 아마도 CGI 프로그램을 프로그램이라고 뭉뚱그려 부르는 거 같다..)

CGI. Common Gateway Interface. 공용 게이트웨이 인터페이스
클라이언트에서 리퀘스트 요청한 것을 웹 서버가 프로그램에 전달하기 위한 구조. Perl, PHP, Ruby, C언어 등이 사용됨.

(이부분은 내용이 부실해서 아래 추가 정리함. 근데 했는데도 잘 모르겠다능.. 출처: http://sfeg.tistory.com/196, http://ganzi-tilong.tistory.com/15)

웹 서버와 프로그램을 연결 시켜주는 일종의 protocol이다. 웹 서버의 일부분으로 서버측에서 수행되는 다른 응용프로그램과 통신할 수 있는 기능을 제공한다. 또한 CGI는 C, Java등의 언어로 사용하여 작성한다.

쉽게 설명하자면 두 개 이상의 컴퓨터간의 자료들을 주고받는 프로그램 또는 주고받는 것 자체를 의미한다고 할 수 있다. 웹페이지는 HTML언어에 의해서 기본적으로 만들어진다. 하지만 HTML만으로 모든 정보를 다 처리할 수는 없다. 왜냐하면 HTML언어는 서버로부터 HTML문서를 보여주는 역할만 할 뿐이기 때문이다. 따라서 홈페이지를 양방향으로 할 필요성이 있는 것이다. 이를 위하여 여러 방법을 고안해 내고 있는 것인데 그 중 하나가 외부 프로그램을 수행하여 그 결과를 HTML형태로 보여주는 방식인데 이것을 CGI라고 하는 것이다. 넓은 의미로는 CGI를 수행하는 프로그램을 CGI라고 하기도 한다. 그 대표적인 예가 방명록, 게시판, 메모장 등이다.

그렇다면 PHP / ASP 는 무엇이고 CGI는 또 무엇일까? 대답은 PHP / ASP 는 CGI를 만들기 위한 한가지 도구이며 한가지 스크립팅 언어일 뿐이다. 예를 PHP로 들어서 설명한다면 PHP와 PERL은 수평관계라고 할 수있다. PHP도 언어고 PERL도 언어이다. PHP와 CGI는 상하관계이다. PHP는 언어지만 CGI는 규약, 동작 원리이다.

그렇다면 PHP는 CGI다, 라는 말이 무엇을 의미하는 것일까? 그것은 PHP로 만들어진 결과물은 CGI의 역할을 한다는 의미이다. 즉 결론은 PHP / ASP 도 CGI라고 할 수 있다.

4. 데이터 송신 에 이용되는 포맷이나 언어들

XML. eXtentible Markup Language
목적에 맞게 확장가능하고, 범용적으로 사용할 수 있는 마크업 언어.
인터넷을 통해 데이터 공유를 용이하게 하기 위한 목적.
HTML과 같은 ‘문서기술언어’에서 파생된 것이지만, HTML에 비해 데이터를 기술하는 것에 특화 되어 있다.
문서기술언어 (SGML, Standard Generalized Markup Language)

HTML은 브라우저에서 보면 정렬된 내용이 리스트로 나오지만, 이 데이터를 다른 프로그램에서 사용하기엔 적합하지 않은 데이터 구조임.

<ul>
	<li>세미나번호: TR001
		<ul><li>웹 애플리케이션 취약성 진단 강좌<li><ul>
	</li>
	<li>세미나번호: TR0002
	.....

그에 비해 XML은 태그를 사용한 트리구조로 되어 있고, 독자적으로 확장된 태그가 정의되어 있다. XML구조를 해석하고 요소를 뽑아내는 파서 기능에 의해 데이터 추출을 쉽게 할 수 있음.
데이터 재사용 쉬움 ==> 데이터 교환 포맷으로서 여러가지 애플리케이션 사이에서 호환되기 좋다

<세미나 번호="TR001" 이름="웹 애플리케이션 취약성 진단 강좌">
	<장르>보안</장르>
	<개요>웹 애플리케이션 취약성 진단에 착수하기 위해서 필요한...</개요>
</세미나>
<세미나 번호="TR002" 이름="...">
	.....


RSS/Atom
뉴스, 블로그의 기사같은 갱신 정보를 송신하기 위한 문서포맷의 총칭
XML 이용.
RSS 버전은 여러가지. 명칭이나 기술 방법이 각각 다름.
RSS 0.9, RSS 0.91, RSS 1.0, RSS 2.0, Atom Syndication Format, Atom Publishing Protocol

JSON. JavaScript Object Notation.
경량 데이터 기술 언어.
자바스크립트의 오브젝트 표기법을 바탕으로 하고 있음.
다룰수 있는 데이터 유형은 7가지 (true, false, null, 오브젝트, 배열, 숫자, 문자열)
{ "name": "web Security", "num": "TR001" }
단순하고 가볍고 문자열을 js에서 간단히 읽어올 수 있기 때문에
기존에 XML이 사용되던 Ajax에서 JSON을 널리 이용하게 되었다.
여러 프로그래밍 언어에서도 JSON을 쉽게 다루기 위한 라이브러리가 충실해짐



말미에 책 후기 간단히..

HTTP와 네트워크에 이런 것들이 있다는 것을 가볍게 보기 위한 용도로는 좋음. 동시에 자세한 설명은 피하려 했는지 뭉뚱그려서 쓰인 단어가 너무 많음. 이럴 땐 문장이 간단해도 이해가 안가서 여러번 읽게 된다 -0- 그리고 솔직히 번역이 구리당ㅠ
그래도 나에게 유용했던 이유는,
비교적 얇고 글씨체도 커서 심리적인 진입장벽이 낮았고, 두껍지만 좋은 다른 네트워크 책들을 보기전에 이 책으로 간단히 공부하고 보면 훨씬 효과적일 것 같다.

‘+
[HTTP완벽가이드] -> 이 책이 훨씬 번역도 잘 되고 잘 읽힌다. 다만 베개처럼 두껍다

1) 먼저볼 것
1,2단원 : ~120page
295 ~ 320
587 ~ 664 (이해만 하면서 훑기)

2) 나중에
123 ~ 146
185 ~ 212
287 ~ 294