20191214_TIL
14 Dec 2019 | TIL12/14 토요일
- 자바, 스프링
- 백기선님의 <더 자바, 코드를 조작하는 다양한 방법> 강의 1,2강을 학습하였다.
- JVM 구조에 대해 디테일하게 학습할 수 있어 좋았다.
알고리즘
IP 주소를 조사했으면 IP 주소의 상대, 여기에서는 액세스 대상 웹 서버에 메시지를 송신하도록
OS 내부에 있는 프로토콜 스택에 의뢰한다. 이 행위는 socket 라이브러리에 의해 이루어 진다.
송 수신 동작의 이미지를 그림으로 나타내면 아래와 같다.
데이터 송수신 과정
다음 과정을 사진으로 보며 이해해보자.
클라이언트에서 소켓을 만든다
서비측의 소켓에 파이프를 연결한다
메시지를 주고 받는 송∙수신 단계
파이프를 분리하고 소켓을 제거 한다
웹 서버가 응답 메시지를 송신 완료했을때 먼저 소켓을 제거한다.
이 것이 클라이언트측에 전달되고 read()를 호출 했을때
클라이언트는 소켓을 제거한다.
브라우저
// HTTP 프로토콜
http://user(사용자명,생략가능):password(패스워드,생략가능)@www.cyber.co.kr(도메인):80(포트,생략가능)/dir/file1.htm(파일경로명,디렉토리/파일명)
// FTP 프로토콜
ftp://user(사용자명,생략가능):password(패스워드,생략가능)@ftp.cyber.co.kr(도메인):21(포트,생략가능)/dir/file1.htm(파일경로명,디렉토리/파일명)
// 파일명이 생략된 경우
http://www.lab.cyber.co.kr/dir/ -> dir 폴더의 기본 페이지로 이동 (ex. index.html)
http://www.lab.cyber.co.kr -> 루트 디렉토리의 기본 페이지로 이동
http://www.lab.cyber.co.kr/whatisthis -> 파일 먼저 찾고 없으면, 디렉토리로 찾는다.
...
브라우저가 하는 일(웹 서버 기준)
URL을 해석하여 HTTP 리퀘스트 메시지를 작성한다.
리퀘스트 메시지는 Header + URI + 메서드로 이루어져 있다.
리퀘스트 메시지의 첫 번째 행을 리퀘스트 라인이라 한다.
// 리퀘스트 라인
GET(메서드) /cgi/sample.cgi?Field1=abc&SendButton=SEND(URI) HTTP/1.1(HTTP 버전)
DNS 서버에 도메인의 IP주소를 알아내기 위한 리퀘스트 메시지를 작성한다.
(name resolution, 이름 확인)
리졸버는 메시지 송신을 위해 OS의 프로토콜 스택을 호출한다.
LAN 어댑터를 통해 메시지가 DNS 서버로 송신된다.
응답이 프로토콜 스택을 경유하여 리졸버에 건네지고, 리졸버는 브라우저에게 IP주소를 건네준다.
리졸버를 통해 얻은 IP 주소와 HTTP 리퀘스트 메시지를 OS의 프로토콜 스택에 건네준다.
5와 같은 과정이 일어난다.
웹 서버에서 돌아온 응답을 화면에 표시한다
응답 내용에 추가 리퀘스트가 필요한 내용이 존재하면(사진,동영상 등등) 그 부분을 비워놓고 순차적으로 다시 리퀘스트 한다.
(리퀘스트 시 URI는 하나만 존재하므로 한 번에 여러 요청을 할 수 없다)
라우터
IP 주소
IP 주소는 32비트의 디지털 데이터로 8비트씩 점으로 구분하여 10진수로 표기
어느 것이 네트워크 번호인지, 호스트 번호인지 알 수 없으므로 넷마스크를 통해 구분한다
10.11.12.13/255.255.255.0
넷마스크가 1인 부분은 네트워크 번호를 나타내고, 0인 부분은 호스트 번호를 나타낸다
255 -> 11111111 (네트워크 번호)
0 -> 00000000 (호스트 번호)
10.11.12.13/255.255.255.0 = 10.11.12.13/24 (네트워크 번호의 비트 수로 넷마스크를 표기할 수 있다)
호스트 번호 부분의 비트 값이 모두 0 or 1인 경우는 특별한 의미를 가진다.
도메인명과 IP 주소를 구분하여 사용하는 이유
IP 주소는 기억하기 어렵다
IP 주소 대신 도메인을 통신하면 IP주소(32비트) 대비 비효율적이다.
DNS 서버의 기본동작
DNS 서버가 받는 Request가 포함하는 정보
예시
www.lab.cyber.co.kr인 서버의 IP 주소를 조사할 때 클라이언트는
이름 = www.lab.cyber.co.kr
클래스=IN
타입=A 3가지 정보를 DNS 서버에 보낸다.
서브 도메인
도메인의 계층
인터넷에는 막대한 수의 서버가 있으므로 이것을 전부 1대의 DNS 서버에 등록하는 불가능하다.
따라서 정보를 분산시켜 다수의 DNS 서버에 등록하고 DNS 서버끼리 연대하여 원하는 정보를 찾아내는 구조로 이뤄져있다.
DNS 서버에 등록된 정보는 도메인명이라는 계층적 구조를 가진다.
최상위 도메인
이제 DNS 서버가 어떻게 동작하는지 알아볼 차례다. 전세계에는 수만대의 DNS 서버가 있다. 한대의 DNS 서버가 모든 도메인에 대한 정보를 가지고 있는 것을 어려운 일이다. 그래서 인터넷에서는 도메인 정보를 분산해서 저장하고 있다. 예를들어 lab.opentutorials.org의 IP 주소를 조회한다고 해보자. 이 도메인에서 가장 상위에 있는 도메인은 무엇일까? 루트 도메인이다. 루트 도메인은 전세계에 13개가 존재하고, 이 도메인의 IP는 잘 변경되지 않기 때문에 모든 DNS 서버는 루트 도메인을 알고 있다. 여기가 출발점이 되는 것이다. 아래 그림을 보자.
클라이언트는 브라우저가 설치된 컴퓨터다. 사용자가 URL을 주소창에 opentutorials.org를 입력하고 엔터를 치면,
가장 가까운 DNS 서버
캐쉬
ref. 생활코딩