Post

[Network] URL과 네트워크 송수신

네트워크 송수신

탐험 여행은 URL 입력부터!

  • URL이란? -> Uniform Resource Locator!
  • URL은 웹서버에 어떠한 기능(정보 가져오기, 정보 보내기 등)을 요청하는 하나의 문장
  • URL의 구성은 프로토콜 + 도메인 + 파일의 경로명(유동적)
  • Ex) http://localhost:8080/dir/file1.html

URL을 해독해보자!

  • 결국은 브라우저나 클라이언트가 웹 서버에 요청(리퀘스트 메시지)을 보내야 한다.
  • 때문에 모든 것의 시작이 되는 URL을 해독해야 한다.

파일명을 생략한 경우

  • Ex) http://www.lab.co.kr/dir/
  • 디렉토리만 적어놓고 특정 파일을 적지 않은 경우 기본으로 설정한 파일로 요청감
  • index.html, default.html 등등

Http의 기본 개념

  • 브라우저 등의 클라이언트와 서버가 주고 받는 메시지의 내용을 정한 것.
  • URI = URL을 포함하여 /dir1/file1.html 등과 같은 액세스 대상(‘무엇을’)을 통칭하는 말.
  • 메소드 = Post, Get 처럼 ‘어떻게 해서’ 를 담당

Http 리퀘스트 메시지 만들기

  • 첫째 행에는 리퀘스트 라인 쓴다.<메소드><공백><공백>
  • 그 다음에는 메시지 헤더 키:밸류 값으로 이루어진 헤더 필드
  • 그 다음에는 메시지 본문! 송신하는 데이터, 파일에서 읽은 데이터 등이 바이너리 형태로.

리퀘스트 보내면 리스폰스가 온다!

  • 첫째 행 빼고 리퀘스트 메시지랑 형식은 비슷하다
  • 응답의 경우 실행 결과를 나타내는 스테이터스 코드(200,404 등)
  • 리퀘스트 메시지의 URI는 메시지 당 1개이기 때문에 파일을 따로따로 읽어야 한다.
  • 리퀘스트 - 리스폰스 짝궁

Story 02

IP 주소의 기본

  • 브라우저는 네크워크 송신을 하지 않고 OS에 의뢰한다.
  • URL속에 있는 도메인 명에서 IP를 추출한다.
  • 패킷을 중계하는 라우터로 허브와 허브를 연결한다.
  • IP = 네트워크 번호(동) + 호스트 번호(번지)

도메인명과 IP주소를 구분하는 이유

  • 전화번호를 일일이 기억할 수 없어서 자기만의 이름으로 연락처를 저장한다고 보면 된다.
  • Ex) 124.0.0.1 = localhost
  • DNS = Domain Name System, Ip와 서버명을, 메일주소와 메일서버를 대응 시켜줌.

Socket 라이브러리가 IP주소를 찾는 기능을 제공

  • 위에 설명했던 DNS가 Socket 라이브러이에 들어있는 부품화한 프로그램 = 리졸버

리졸버를 이용하여 DNS 서버를 조회한다.

  • 따라서 브라우저는 웹 서버에 리퀘스트 메시지를 보낼 때 메모리 영역에서 IP 주소를 추출하여 OS에 건네주어 송신 의뢰.

리졸버 내부의 작동

  • 위의 IP 주소를 추출하는 행을 실행하면 애플리케이션은 잠시 일시 정지
  • 그리고 리졸버에게 작업 의뢰, 이것을 제어가 넘어간다고 한다.
  • 리졸버가 프로토콜 스택을 호출하여 LAN 어댑터를 통해 메시지가 DNS 서버를 향해 송신.
  • 그리고 DNS 서버는 요청 받은 것을 작업하고 답을 줌.
  • 그리고 리졸버는 받은 것을 해독하여 IP주소로 추출하고 제어가 다시 어플로 돌아감.

Story03

DNS 서버의 기본 동작

  • DNS서버가 클라이언트로부터 받는 3가지

    • 이름: 서버나 메일 배송 목적지
    • 클래스: 네트워크의 종류, 하지만 인터넷 밖에 남아있지 않기 때문에 (IN)만 존재.
    • 타입: 타입, A타입이면 IP주소 지원, MX타입이면 메일 배송 목적지 지원
    • EX) 이름: cyber.co.kr / 클래스 = IN / 타입 = MX

도메인 계층

  • 도메인에는 계층이 존재한다.
  • www.cyber.co.kr이라면 맨 뒤부터 최상위계층이다.
  • com > cyber > lab > www

담당 DNS 서버를 찾아 IP 주소를 가져온다.

  • 처음 www.naver.com을 요청하면 가장 가까운 DNS서버로 보내진다.
  • 그 다음 com 도메인 DNS 서버로 가고 com DNS 서버는 naver.com DNS로 보내고
  • 결국 www.naver.com의 IP를 가지고 있는 DNS 서버까지 가게 된다.

DNS 서버는 캐시 기능으로 빠르게 회답할 수 있다.

1
2
- DNS는 한번 조사한 도메인을 캐시에 저장할 수 있다.
- 그렇지만 등록 정보가 변경될 수 있으니 유효 기간이 지나면 삭제된다.

프로토콜 스택에 메시지 송신을 의뢰한다.

데이터 송-수신 동작의 개요

  • IP주소를 조사했으면 IP 주소의 상대, 대상 웹 서버에 메시지를 송신하도록 프로토콜 스택에 의뢰.
  • 양끝에 소켓이 장착된 데이터 파이프라인을 통해서 데이터가 클라이언트 - 서버 간 이동이 가능.
    • 소켓 생성
    • 서버측의 소켓에 파이프 연결
    • 데이터를 송 - 수신. 파이프를 분리하고 소켓을 말소

소켓의 작성 단계

  1. socket이라는 부품 호출, socket생성.
  2. 소켓이 복수일 경우 이 소켓을 식별해야 하는데, 그것을 위해 디스크립터가 있음.

파이프를 연결하는 접속 단계

  • 만든 소켓을 서버측의 소켓에 접속하도록 프로토콜 스택에 의뢰.
  • 이 때 connect 프로그램 부품 호출(디스크립터, 서버의 IP주소, 포트 번호)
    • 디스크립터: 소켓을 만들고 나온 꼬리표. 이것으로 어느 소켓이 서버측과 연결되야 하는지 알 수 있음.
    • IP 주소는 DNS서버에서 리턴 받은 주소.
    • 디스크립터는 내부의 소켓을 식별, 포트 번호는 목적지의 소켓을 식별(ex. 웹-80, 메일-25)

메시지를 주고받는 송-수신 단계

  • 통신은 의외로 간단. 목적지 소켓과 연결된 내부의 소켓에 데이터를 쏟아붓는다.
  • 송신은 write, 수신은 read, 수신의 경우 응답 메시지를 저장하기 위한 수신 버퍼의 메모리 영역이 지정됨.

연결 끊기 단계에서 송-수신이 종료된다.

  • close 호출.
  • 소켓 사이를 연결한 파이프 분리, 소켓도 말소.
This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.