네트워크와 웹의 기본지식을 익히기 위해서 관련 서적을 하나 구매했다.
책의 이름은 "그림으로 배우는 Http&Network Basic" 이고 책의 내용을 토대로 블로그를 작성할 계획이다.
http://www.yes24.com/Product/Goods/15894097
그림으로 배우는 HTTP & Network - YES24
이 책은 웹의 근간을 이루는 HTTP를 중심으로 하여 웹, 인터넷 데이터 통신 분야의 기초가 되는 내용들을 다루고 있다. 관련 분야를 배우고자 하는 독자들을 위해 만화 캐릭터와 일러스트를 활용
www.yes24.com
1장. 웹과 네트워크의 기본
1-1. 웹은 HTTP로 나타낸다.
- 클라이언트가 브라우저 주소 입력란에 URL을 입력하여 어딘가에 송신한다. 어딘가에서 응답이 돌아오면 웹 페이지가 표시되는 형식으로 웹이 이루어지는데, 웹 브라우저는 웹 브라우저 주소 입력란에 지정된 URL에 의지해서 웹 서버로부터 리소스라고 불리는 파일 등의 정보를 얻고 있는 것이다.
이 때, 서버에 의뢰를 하는 웹 브라우저 등을 클라이언트(Client)라고 부른다.
클라이언트에서 서버까지 일련의 흐름을 결정하고 있는 것은 웹에서 HTTP(HyperText Transfer Protocol)이라고 불리는 프로토콜이다.
1-2. 네트워크의 기본은 TCP/IP
Http를 이해하기 위해서 TCP/IP의 개념에 대해 알고 있어야 한다.
인터넷을 포함하여 일반적으로 사용하고 있는 네트워크는 TCP/IP라는 프로토콜에서 움직이고 있는데, HTTP는 그 중 하나이다.
1-2.1 TCP/IP는 프로토콜의 집합
컴퓨터와 네트워크 기기가 상호간에 통신하기 위해서는 서로 같은 방법으로 통신하지 않으면 안된다.
서로 다른 하드웨어와 운영체제 등을 가지고 서로 통신하기 위해서 모든 요소에 규칙이 필요하게 되는데 이러한 규칙들을 프로토콜 이라고 부른다.
프로토콜에는 여러 가지가 있다. 케이블 규격, IP주소지정 방법, 떨어진 상대를 찾기 위한 방법과 그 곳에 도달하는 순서, 웹을 표시하기 위한 순서 등으로 구성되어 있는데, 이렇게 인터넷과 관련된 프로토콜들을 모은 것을 TCP/IP라고 부른다.
1-2.2 계층으로 관리하는 TCP/IP
TCP/IP에서 중요한 개념 중에 하나가 계층이다. TCP/IP는 '애플리케이션 계층', '트랜스포트 계층', '네트워크 계층', '링크 계층' 이렇게 4계층으로 나뉘어 있다. 이 부분은 정보처리기사나 네트워크관리사 자격증을 취득하기 위해서는 필수적인 개념이라, OSI 7 Layer에 대해서 자세히 알아볼 필요가 있다.
http://wiki.hash.kr/index.php/OSI_7_%EA%B3%84%EC%B8%B5
OSI 7 계층 - 해시넷
OSI 7 계층(OSI 7 Layer) OSI 7 계층(OSI 7 Layer)는 네트워크 프로토콜이 통신하는 구조를 7개의 계층으로 분리하여 각 계층간 상호 작동하는 방식을 정해 놓은 것 이다. 이는 ISO(국제표준화기구)에서 개
wiki.hash.kr
TCP/IP가 계층화된 이유를 예를 들자면 인터넷이 하나의 프로토콜로 되어 있다면 어디선가 사양이 변경되었을 때 전체를 바꾸지 않으면 안되지만, 계층화되어 있으면 사양이 변경된 해당 계층만 바꾸면 된다.
각 계층은 계층이 연결되어 있는 부분만 결정되어 있어서 각 계층의 내부는 자유롭게 설계 가능하다.
또한, 계층화하면 설계를 편하게 할 수 있고 각 계층에서 자신이 담당하는 부분을 고려하면 되고 다른 계층들을 고려하지 않아도 되기 때문이다.
TCP/IP와 관련한 각 계층의 역할은 다음과 같다.
애플리케이션 계층(응용 계층)
애플리케이션 계층, 즉 응용 계층은 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정하고 있다.
트랜스포트 계층(전송 계층)
트랜스포트 계층, 즉 전송 계층은 애플리케이션 계층에 네트워크로 접속되어 있는 2대의 컴퓨터 사이의 데이터 흐름을 제공한다. 트랜스포트 계층에서는 서로 다른 성질을 가진 TCP와 UDP 두 가지 프로토콜이 있다.
네트워크 계층(인터넷 계층)
네트워크 계층은 네트워크 상에서 패킷의 이동을 다룬다. 패킷이란 전송하는 데이터의 최소 단위이다. 이 계층에서는 어떠한 경로를 거쳐 상대의 컴퓨터까지 패킷을 보낼지를 결정하기도 한다. 인터넷의 경우라면 상대 컴퓨터에 도달하는 동안에 여러 대의 컴퓨터랑 네트워크 기기를 거쳐서 상대방에게 배송된다. 이러한 여러가지 선택지 중에서 하나의 길을 결정하는 것이 네트워크 계층의 역할이다.
링크 계층(데이터링크 계층)
네트워크에 접속하는 하드웨어적인 면을 다룬다. 운영체제가 하드웨어를 제어하기 때문에 디바이스 드라이버랑 네트워크 인터페이스 카드를 포함한다. 하드웨어적 측면은 모두 링크 계층 즉, 데이터링크 계층의 역할이다.
1-2.3 TCP/IP 통신의 흐름
TCP/IP로 통신을 할 때 계층을 순서대로 거쳐 상대와 통신을 한다.
송신하는 쪽은 애플리케이션 계층에서부터 내려가고, 수신하는 측은 애플리케이션 계층으로 올라간다.
HTTP를 예로 들어 설명하면 먼저 송신측 클라이언트의 애플리케이션 계층에서 어느 웹 페이지를 보고 싶다라는 HTTP 리퀘스트를 지시합니다.
그 다음에 있는 트랜스포트 계층(TCP)에서는 애플리케이션 계층에서 받은 데이터 (HTTP메시지)를 통신하기 쉽게 조각내어 안내 번호와 포트 번호를 붙여 네트워크 계층에 전달한다.
네트워크 계층(IP)에서는 수신지 MAC 주소를 추가해서 링크 계층에 전달한다. 이로써 네트워크를 통해 송신할 준비가 되었다.
수신측 서버는 링크 계층에서 데이터를 받아들여 순서대로 위의 계층에 전달하여 애플리케이션 계층까지 도달한다. 애플리케이션 계층에 도달하게 되면 클라이언트가 발신했던 HTTP리퀘스트 내용을 수신할 수 있다.
각 계층을 거칠 때는 반드시 헤더로 불려지는 해당 계층마다 해당 계층에 필요한 정보를 추가한다. 반대로 수신측에서는 각 계층을 거칠 때마다 반드시 해당 계층마다 사용한 헤더를 삭제한다. 이렇게 정보를 감싸는 것을 캡슐화 라고 한다.
캡슐화에 대한 개념
http://www.ktword.co.kr/test/view/view.php?m_temp1=379
캡슐화
Encapsulation, Encapsulating 캡슐화(2021-10-05)
www.ktword.co.kr
1.3 HTTP와 관계가 깊은 프로토콜 : IP/TCP/DNS
배송을 담당하는 IP
IP(Internet Protocol)는 네트워크 계층에 해당한다. 실제 이름 그대로 인터넷을 활용하는 거의 대두분의 시스템이 IP를 이용하고 있다.
'IP'와 'IP 주소'는 전혀 다른 것이고 IP는 프로토콜의 명칭이다.
IP의 역할은 개개의 패킷을 상대방에게 전달하는 것이다. 상대방에게 전달하기까지 여러 가지 요소가 필요하다. 그 중에서도 IP주소와 MAC(Media Access Control Address)주소라는 요소가 중요하다.
IP주소는 각 노드에 부여된 주소를 가리키고 MAC주소는 각 네트워크 카드에 할당된 고유의 주소이다. IP주소는 MAC주소와 결부된다. IP주소는 변경 가능하지만 기본적으로 MAC 주소는 변경할 수 없다.
MAC 주소에 대한 개념, 정의
https://ko.wikipedia.org/wiki/MAC_%EC%A3%BC%EC%86%8C
MAC 주소 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. UMTS 라우터의 레이블에 LAN과 WLAN 모듈을 위한 MAC 주소가 있다. MAC 주소(Media Access Control Address)는 네트워크 세그먼트의 데이터 링크 계층에서 통신을 위한 네트워
ko.wikipedia.org
통신은 ARP를 이용하여 MAC주소에서 한다.
IP 통신은 MAC 주소에 의존해서 통신을 한다. 인터넷에서 통신 상대가 같은 랜선 내에 있을 경우에는 적어서 여러 대의 컴퓨터와 네트워크 기기를 중계해서 상대방에게 도착한다. 그 동안 다음으로 중계할 곳의 MAC주소를 사용하여 목적지를 찾아가는 것이다.
이때 ARP(Address Resolution Protocol)라는 프로토콜이 사용된다.
ARP는 주소를 해결하기 위한 프로토콜중 하나인데, 수신지의 IP주소를 바탕으로 MAC 주소를 조사할 수 있다.
목적지까지 중계를 하는 도중엥 컴퓨터와 라우터 등의 네트워크 기기는 목적지에 도착하기까지 대략적인 목적지만을 알고 있다.
이 시스템을 라우팅이라고 부른다. 결국 어떤 컴퓨터나 네트워크 기기도 인터넷 전체를 상세하게 파악하지 못하고 있다는 것이다.
신뢰성을 담당하는 TCP
TCP는 계층으로 말하자면 트랜스포트 계층에 해당하는데, 신뢰성 있는 바이트 스트림 서비스를 제공한다. 바이트 스트림 서비스란 용량이 큰 데이터를 보내기 쉽게 TCP 세그먼트라고 불리는 단위 패킷으로 작게 분해하여 관리하는 것을 말하고, 신뢰성 있는 서비스는 상대방에게 보내는 서비스를 의미한다. 결국 TCP는 대용량의 데이터를 보내기 쉽게 작게 분해하여 상대방에게 보내고, 정확하게 도착했는지 확인하는 역할을 담당하고 있다.
상대에게 데이터를 확실하게 보내는 것.
TCP는 "Three-Way Handshaking"이라는 방법을 사용하고 있다. 이 방법은 패킷을 보내고 나서 바로 끝내는 것이 아니라, 보내졌는지 여부를 상대에게 확인하러 간다. 이는 SYN과 ACK라는 TCP플래그를 사용한다.
TCP플래그란 무엇인가를 기억해야 하거나 또는 다른 프로그램에게 약속된 신호를 남기기 위한 용도로 프로그램에서 사용되는 미리 정의된 비트를 의미한다.
TCP플래그에 대한 자세한 개념과 정의는 아래 블로그에 자세히 기술되어 있다.
https://hongpossible.tistory.com/entry/TCP-Flag%EB%9E%80
TCP Flag란 ?
안녕들 하시죠 ! 이번시간에는 TCP Flag에 대해 알아보겠습니다. Flag란 ? 무엇인가를 기억해야 하거나 또는 다른 프로그램에게 약속된 신호를 남기기 위한 용도로 프로그램에서 사용되는 미리 정
hongpossible.tistory.com
송신측에서는 최초 'SYN' 플래그로 상대에게 접속함과 동시에 패킷을 보내고, 수신측에서는 'SYN/ACK'플래그로 송신측에 접속함과 동시에 패킷을 수신한 사실을 전합니다. 마지막으로 송신측이 'ACK'플래그를 보내 패킷 교환이 완료되었음을 전한다.
이 과정에서 어디선가 통신이 도중에 끊어지면 TCP는 그와 동시에 같은 수순으로 패킷을 재전송한다.
TCP는 Three-way handshaking 외에도 통신의 신뢰성을 보증하기 위해 다양한 시스템을 갖추고 있다.
1-4 이름 해결을 담당하는 DNS
DNS는 HTTP와 같이 응용 계층 시스템에서 도메인 이름과 IP주소 이름 확인을 제공한다. 컴퓨터는 IP주소와는 별도로 호스트 이름과 도메인 이름을 붙일 수 있다.
주로 사용자는 IP주소 대신 이름을 이용하여 상대의 컴퓨터를 지정한다. 숫자를 나열하는 IP주소를 지정하는 것보다 영어나 숫자 등으로 표기해 컴퓨터의 이름을 지정하는 것이 인간에게 친숙하다. 그러나 컴퓨터에게는 친숙하지 않다. 컴퓨터는 숫자를 나열하는 방법을 더 선호한다.
이 문제를 해결하기 위해 DNS가 잇다. DNS는 도메인명에서 IP주소를 조사하거나 반대로 IP주소로부터 도메인명을 조사하는 서비스를 제공하고 있다.
1-5 웹의 동작 원리, 각각과 HTTP와의 관계
1-6 URI과 URL
모두가 URI보다 URL이 익숙할 것이다. 웹 브라우저 등으로 웹 페이지를 표시하기 위해 입력하는 주소가 바로 URL이다.
1-6.1 URI는 리소스 식별자
URI는 Uniform Resource Identifier의 약자이다. 각각의 단어를 정의해보자면,
Uniform -> 통일된 서식을 결정하는 것으로, 여러 가지 종류의 리소스 지정 방법을 같은 맥락에서 구별없이 취급할 수 있게 한다. 또한 새로운 스키마 도입을 용이하게 한다.
Resource -> '리소스는 식별 가능한 모든 것'이라는 뜻인데, 도큐먼트 파일뿐만 아니라 이미지와 서비스 등 다른 것과 구별할 수 있는 것은 모두 리소스이다. 또한 리소스는 단일한 부분만 아니라 복수의 집합도 리소스로 파악할 수 있다.
Identifier -> 식별 가능한 것을 참조하는 오브젝트이며 식별자로 불린다. 결국 URI는 스키마를 나타내는 리소스를 식별하기 위한 식별자이다. 스키마는 리소스를 얻기 위한 수단에 이름을 붙이는 방법이다.
1-6.2 URL 포맷
URI는 필요한 정보 전체를 지정하는 완전 수식 절대 URI 혹은 완전 수식 절대 URL과 브라우저 중의 기준 URI에서 상대적 위치를 */image/log.gif처럼 지정하는 상대 URL이 있다.
절대 URI 포맷을 예로 들어 살펴 보자면,
http와 https 같은 스키마를 사용하여 리소스를 얻기 위해 사용하는 프로토콜을 지시한다. 대문자와 소문자는 무시하고 마지막에 콜론(:) 이 하나 붙는다.
"data."와 "javascript:" 같이 데이터와 프로그램을 지정할 수도 있다.
자격정보(크리덴셜)
서버로부터 리소스를 취득하려면 자격정보(크리덴셜)가 필요하다. 유저명과 패스워드를 지정할 수 있는데 이는 옵션이다.
서버 주소
완전 수식 형식인 URI에서는 서버 주소를 지정할 필요가 있습니다. 주소는 www.google.com와 같은 DNS이름이나 "192.168.1.1"과 같은 IPv4주소나 "[0:0:0:0:0:0:0:1]"과 같은 IPv6 주소를 대괄호로 묶어서 지정한다.
서버 포트
서버의 접속 대상이 되는 네트워크 포트 번호를 지정한다. 이것은 옵션이며 생략하면 디폴트 포트가 사용된다.
계층적 파일 패스
특정 리소스를 식별하기 위해서 서버 상의 파일 패스를 지정한다. UNIX 디렉토리 지정 방법과 비슷하다.
쿼리 문자열
파일 패스로 지정된 리소스에 임의의 파라미터를 넘겨주기 위해 쿼리 문자열을 사용한다. 이 또한 옵션이다.
프래그멘트 식별자
주로 취득한 리소스에서 서브 리소스(도큐먼트 중간에 위치)를 가리키기 위해서 프래그멘트 식별자가 사용된다. 이 또한 옵션.