[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 주소의 상대, 대상 웹 서버에 메시지를 송신하도록 프로토콜 스택에 의뢰.
- 양끝에 소켓이 장착된 데이터 파이프라인을 통해서 데이터가 클라이언트 - 서버 간 이동이 가능.
- 소켓 생성
- 서버측의 소켓에 파이프 연결
- 데이터를 송 - 수신. 파이프를 분리하고 소켓을 말소
소켓의 작성 단계
- socket이라는 부품 호출, socket생성.
- 소켓이 복수일 경우 이 소켓을 식별해야 하는데, 그것을 위해 디스크립터가 있음.
파이프를 연결하는 접속 단계
- 만든 소켓을 서버측의 소켓에 접속하도록 프로토콜 스택에 의뢰.
- 이 때 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.