12 Dec 2019
|
Network
프로토콜 스택의 데이터 송수신 과정
-
IP 주소를 조사했으면 IP 주소의 상대, 여기에서는 액세스 대상 웹 서버에 메시지를 송신하도록
OS 내부에 있는 프로토콜 스택에 의뢰한다. 이 행위는 socket 라이브러리에 의해 이루어 진다.
-
송 수신 동작의 이미지를 그림으로 나타내면 아래와 같다.

데이터 송수신 과정
- 해당 과정은 모두 OS 내부 프로토콜 스택에서 발생한다
- 클라이언트에서 소켓을 만든다
- 서버측의 소켓에 파이프를 연결한다
- 데이터를 송수신 한다
- 파이프를 분리하고 소켓을 제거한다
다음 과정을 사진으로 보며 이해해보자.

클라이언트에서 소켓을 만든다
- socket 라이브러리의 socket() 메서드를 호출한다.
- 운영체제 내부 프로토콜 스택은 소켓의 정보를 저장하기 위해 메모리 영역을 할당하고 그곳에 소켓 제어 정보(상대 IP, 소켓 상태 정보 등)를 저장한다.
- 운영체제는 생성된 소켓의 정보의 파일 디스크립터를 사용자 프로그램에게 반환해준다.
- 디스크립터
- 프로토콜 스택의 내부에 이는 다수의 소켓 중 어느 것을 가리키는지를 나타내는 번호표와 같은 존재이다.
서비측의 소켓에 파이프를 연결한다
- socket 라이브러리의 connect(디스크립터, 서버 IP 주소, 서버 포트 번호)를 호출하여 서버와 소켓을 연결한다.
- 웹은 포트번호 80, 메일은 25이 default
메시지를 주고 받는 송∙수신 단계
- socket 라이브러리의 write(디스크립터, 송신 데이터, 송신데이터 길이)를 호출하여 데이터를 송신한다.
- socket 라이브러리의 read(디스크립터, 수신 버퍼 , …)를 호출하여 데이터를 수신한다.
- 수신한 응답 메시지를 저장하는 영역을 수신 버퍼라 한다.
파이프를 분리하고 소켓을 제거 한다
ref 성공과 실패를 결정하는 1% 네트워크 원리
12 Dec 2019
|
Network
브라우저
- 웹 서버(HTTP), FTP, MTP,SMTP 등등을 액세스하는 복합적인 클라이언트 소프트웨어
// 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 리퀘스트 메시지를 작성한다.
-
DNS 서버에 도메인의 IP주소를 알아내기 위한 리퀘스트 메시지를 작성한다.
(name resolution, 이름 확인)
- DNS 클라이언트에 해당하는 것을 DNS 리졸버라 부른다
- 리졸버는 소켓 라이브러리에 존재한다.
-
리졸버는 메시지 송신을 위해 OS의 프로토콜 스택을 호출한다.
-
LAN 어댑터를 통해 메시지가 DNS 서버로 송신된다.
-
응답이 프로토콜 스택을 경유하여 리졸버에 건네지고, 리졸버는 브라우저에게 IP주소를 건네준다.
-
리졸버를 통해 얻은 IP 주소와 HTTP 리퀘스트 메시지를 OS의 프로토콜 스택에 건네준다.
-
5와 같은 과정이 일어난다.
-
웹 서버에서 돌아온 응답을 화면에 표시한다
-
응답 내용에 추가 리퀘스트가 필요한 내용이 존재하면(사진,동영상 등등) 그 부분을 비워놓고
순차적으로 다시 리퀘스트 한다.
(리퀘스트 시 URI는 하나만 존재하므로 한 번에 여러 요청을 할 수 없다)
라우터
- 라우터(router[a] 혹은 라우팅 기능을 갖는 공유기는 패킷의 위치를 추출하여, 그 위치에 대한 최적의 경로를 지정하며, 이 경로를 따라 데이터 패킷을 다음 장치로 전향시키는 장치이다.
간단히 말해 서로 다른 네트워크 간에 중계 역할을 해준다.
IP 주소
도메인명과 IP 주소를 구분하여 사용하는 이유
ref 성공과 실패를 결정하는 1% 네트워크 원리
12 Dec 2019
|
Network
DNS 서버
DNS 서버의 기본동작

- DNS 서버의 응답내용
- request 정보로 찾은 리소스 레코드(사진 참고)의 내용(192.0.2.226)을 반환한다.
서브 도메인
- 예를들어, 도메인 opentutorials.org 는 오픈튜토리얼스의 서버를 가리킨다. 만약 오픈튜토리얼스의 내부 구성원들간에 커뮤니케이션을 위해서 게시판을 운영해야 하고, opentutorials.org 와는 다른 서버를 사용해야 한다면, 도메인을 새로 구입해야 할까? 아니다. DNS 서버에 bbs.opentutorials.org에 대한 IP를 등록하면 opentutorials.org와 bbs.opentutorials.org가 가리키는 IP를 서로 다르게 설정해서, 각각의 도메인이 서로 다른 서버를 가리키게 할 수 있다. 이런 것을 서브 도메인이라고 부른다.

도메인의 계층
-
인터넷에는 막대한 수의 서버가 있으므로 이것을 전부 1대의 DNS 서버에 등록하는 불가능하다.
따라서 정보를 분산시켜 다수의 DNS 서버에 등록하고 DNS 서버끼리 연대하여 원하는 정보를 찾아내는 구조로 이뤄져있다.
-
DNS 서버에 등록된 정보는 도메인명이라는 계층적 구조를 가진다.
- www.opentutorials.org 처럼 점으로 계층을 구분한다.
- 오른쪽에 위치한 것이 상위 계층이다.
- 각각을 도메인이라 한다. (org 도메인, opentutorials 도메인, www 도메인 …)
- 위의 그림에서 www, bbs, file을 서브 도메인이라고 부르고, 위의 예제에서는 서버를 식별하기 위해서 사용됐다. 그리고 opentutorials는 서브 도메인인 www, bbs, file를 포괄하는 상위 도메인으로 사용되고 있고, .org는 최상위 도메인으로 opentutorials가 영리를 목적으로 하지 않는 비영리의 단체나 서비스라는 점을 의미한다. 그리고 최상위 도메인의 상위 도메인이 하나 더 있는데, 이것을 루트 도메인(root domain)이라고 부른다. 루트 도메인은 모든 도메인의 뿌리이기 때문에 ‘.org’의 org나 ‘.com’의 com과 같은 도메인 이름이 없고 그냥 ‘.’으로 표시된다. 그런 이유로 도메인을 표기할 때 일반적으로 생략한다. 하지만, opentutorials.org. 과 같이 주소를 입력해도 정상적으로 잘 작동한다. 이해를 돕기 위해서 비유하자면 루트 도메인 ‘.’에는 ‘.org’라는 디렉토리가 들어 있고, ‘.org’ 안에는 ‘.opentutorials’라는 디렉토리가 있고 ‘.opentutorials’ 안에는 다시 www, bbs, file이 있는 셈이다. 이 관계를 그림으로 나타내면 아래와 같다.

최상위 도메인
최상위 도메인
- 최상위 도메인은 도메인을 구분하는 가장 큰 카테고리인데, 도메인을 성격에 따라서 분류한 것이다. 이것은 국제기구인 ICANN에서 관리하기 때문에 도메인을 구입하려면 미리 정해져있는 최상위 도메인 중의 하나를 골라야 한다. 도메인을 고르는 방법은 생활코딩의 도메인 수업을 참고하자. 아래는 몇가지 대표적인 항목이다. 전체 목록은 위키백과를 참조하자.
이제 DNS 서버가 어떻게 동작하는지 알아볼 차례다. 전세계에는 수만대의 DNS 서버가 있다. 한대의 DNS 서버가 모든 도메인에 대한 정보를 가지고 있는 것을 어려운 일이다. 그래서 인터넷에서는 도메인 정보를 분산해서 저장하고 있다. 예를들어 lab.opentutorials.org의 IP 주소를 조회한다고 해보자. 이 도메인에서 가장 상위에 있는 도메인은 무엇일까? 루트 도메인이다. 루트 도메인은 전세계에 13개가 존재하고, 이 도메인의 IP는 잘 변경되지 않기 때문에 모든 DNS 서버는 루트 도메인을 알고 있다. 여기가 출발점이 되는 것이다. 아래 그림을 보자.

클라이언트는 브라우저가 설치된 컴퓨터다. 사용자가 URL을 주소창에 opentutorials.org를 입력하고 엔터를 치면,
- (1) 브라우저가 설치된 컴퓨터는 opentutorials.org의 IP를 알아내기 위해서 가장 가까운 곳에 위치한 DNS에 opentutorials.org의 IP를 문의 한다.
- (2)가장 가까운 DNS 서버가 IP를 알고 있다면 즉시 IP 주소를 알려준다.
하지만 IP 주소를 모르면 루트 도메인 네임서버에게 문의한다.
- (3) 루트 네임서버는 도메인의 최상위 도메인이 .org인 것을 보고 .org가 등록된 네임서버의 IP를 전달한다.
이것은 이런 의미가 된다. “나는 IP 주소를 가지고 있지 않지만, .org 네임서버에게 물어보면 도와줄꺼야”
- (4) 가장 가까운 DNS는 org 도메인을 관리하는 네임서버에게 문의한다.
- (5) org 네임서버는 opentutorials의 네임서버 IP 주소를 알려준다.
- (6) 가장 가까운 DNS 서버는 opentutorials의 네임서버에게 문의하고,
- (7) www 의 네임서버를 알려준다.
- (8) 최종적으로 www 네임서버에게 문의 후
- (9) www.opentutorials.org의 IP 주소를 얻는다.
- (10) 가장 가까운 DNS 서버는 이 IP 주소를 클라이언트에게 알려준다.
클라이언트 컴퓨터는 이 IP를 브라우저에게 알려주면 브라우저는 이 IP에 해당하는 컴퓨터에 접속 할 수 있게 된다.
가장 가까운 DNS 서버
- 위의 그림에서 가장 가까운 DNS 서버의 의미는 클라이언트에 기본적으로 등록되어 있는 DNS 서버를 의미한다. 클라이언트는 최소 한개 이상의 DNS 서버가 등록되어 있어야 이 DNS 서버를 이용해서 접속하고자 하는 도메인에 대한 IP를 알아낼 수 있다. 기본 DNS라고도 하는데 이 정보는 인터넷에 연결하면 인터넷 서비스 제공자(KT, SK브로드밴드 등)에 의해서 자동으로 설정된다. 기본 DNS를 직접변경하려면 아래의 자료를 참조한다. 이전 단락에서 언급한 분류법에 의하면 ‘가장 가까운 DNS’는 cache DNS에 해당된다.
캐쉬
- 전세계에 흩어져 있는 네임서버들은 이렇게 협력해서 도메인과 IP를 연결해주고 있는 것이다. 이것은 마치 낮선 곳을 찾아갈 때 그 동네 사람들에게 물어 물어서 목적지를 찾아가는 것과 흡사하지 않은가? 그런데 실제로 네임서버는 이것 보다 조금 더 복잡하게 동작한다. 한번 조회한 IP 주소는 각 단계의 네임서버들에 저장되어 있어서, 다음 요청이 들어올 때 다른 네임서버에 방문할 필요가 없이 저장된 IP 주소를 알려줘서 시간과 네트워크 트래픽 부담을 줄인다. 한번 처리 한 작업을 보존해서 속도와 비용을 절감하는 행위를 캐쉬(cache)라고 한다. 이러한 캐쉬 메커니즘은 브라우저를 비롯해서 클라이언트 각 단계의 DNS 서버가 모두 가지고 있다. 그런 이유로 도메인의 IP 주소가 변경되었는데도 불구하고, IP가 변경되지 않는 경우가 있다. 이런 경우 1~2일 정도 경과된 후에는 자동으로 캐쉬들이 새로 만들어지기 때문에 자동으로 해소된다. 또는 도메인의 소유자가 자신의 도메인의 캐쉬 갱신 주기를 저정 할 수 있다.
ref. 생활코딩
ref 성공과 실패를 결정하는 1% 네트워크 원리