서버와 사용자간의 통신에서 웹 브라우저의 동작과정은 아래와 같다.
- URL과 HTTP Request 메시지 작성
- DNS 서버 통신을 통해 IP 확인
- Socket 라이브러리에 연결 요청
웹브라우저는 URL로 서버와의 통신을 시작할 수 있다.
URL은 사용자명, 패스워드, 프로토콜, 도메인, 포트번호, 파일 경로 등으로 이루어져있다.
이때 사용자명, 패스워드는 생략가능하다.
프로토콜
통신 동작의 규칙으로 웹은 범용적으로 http(보안X) 또는 https(보안O)가 널리 쓰인다.
통신 목적에 따라 ftp(파일전송), smtp(메일전송) 등으로 나뉜다.
사용자명, 패스워드
서버에 접속하는 사용자명과 패스워드이다. 일반 웹 접속에서는 생략한다.
서버도메인
원래는 서버 IP로 통신을 했지만 숫자를 외우기 힘들어 IP주소를 문자열 형식으로 표현한 것
예) wwww.naver.com = 23.40.180.205
포트번호
서버 측 여러개의 애플리케이션 중 통신에서 사용할 하나를 지정하는 번호이다. http는 80번을 사용한다.
파일경로
접근할 서버 측의 파일이 위치하는 경로이다.
이제 브라우저는 URL 정보들을 바탕으로 서버의 어디에 액세스 하는지 알게된다.
이후 브라우저는 HTTP 프로토콜을 사용하여 서버에 전송할 HTTP Request를 만든다.
먼저 그전에 구글링을 통해 HTTP의 기본 개념을 공부하기바란다.
HTTP Request/Response, URI, Header, Method 등등
HTTP Request의 구조는 세 개로 이루어져 있다.
웹브라우저는 이를 작성 후 서버로 보내게 되고 서버는 HTTP Request를 받고 HTTP Response를 웹브라우저로 보내 응답한다.
시작줄(start-line)
리퀘스트 내용을 대략적으로 알수있다.
메소드, URI, HTTP 버전이 포함되어있다.
헤더(header)
리퀘스트의 부가적인 정보를 나타낸다.
날짜, 데이터종류, 언어, 압축 형식, 클라이언트 또는 서버의 소프트웨어 종류 및 버전, 데이터 유효기간 등등이 포함되어있다.
본문(body)
서버에 송신하는 데이터, POST 메소드의 데이터가 들어있다.
자세한 내용은 다음 링크를 참고 HTTP 메시지
지금까지 웹브라우저는 URL을 해석하고 HTTP Request를 작성했다.
이제 서버로 HTTP Request를 전송해야하는데 먼저 도메인이 문자열이므로 IP주소 형식으로 치환하는 과정이 필요하다.
이러한 치환 과정은 웹브라우저가 할 수 없고 Socket 라이브러리의 도메인 검색 리졸버가 OS로 DNS 서버로 통신 요청을 한다. (DNS서버에 도메인에 대응하는 IP주소가 있음)
Socket 라이브러리: 네트워크의 기능을 호출하기 위한 프로그램 코드 모음집(라이브러리)
리졸버: Socket 라이브러리에 들어있는 기능 하나
다음은 웹브라우저가 DNS서버를 통해 IP주소를 얻는 과정이다.
웹브라우저가 Socket 라이브러리의 gethostbyname 함수를 이용하여 DNS 서버에서 IP 주소를 가져온다.
하나의 DNS 서버에서 전세계의 도메인의 IP주소를 관리하는 것은 불가능하다.
고로 여러개의 DNS 서버로 분할하여 IP주소를 관리한다.
아래는 클라이언트가 도메인을 가지고 서버 IP주소를 찾아가는 과정이다.
① 클라이언트는 가장 가까운 DNS 서버에 접속하여 루트 도메인 서버로 접근한 후,
kr DNS 서버의 주소를 가져온다.
③ 가장 가까운 DNS 서버는 co DNS 서버에 접속해 www DNS 서버 주소를 가져온다.
④ 가장 가까운 DNS 서버는 www DNS 서버에 접속해 www.website.co.kr의 IP주소를 가져온다.
그리고 클라이언트에게 가져온 IP주소를 전달한다.
이렇게 비로소 도메인을 가지고 IP 주소를 가져올 수 있다.
이제 HTTP Reqest를 서버에 보내기 위한 도메인의 IP 주소도 알아내었다.
이제 웹브라우저는 HTTP Reqest와 IP주소를 가지고 Socket 라이브러리를 사용하여 OS를 거쳐 서버로 데이터를 송신한다.
이는 좀전에 살펴본 DNS서버와 통신한 것과 똑같다.
(웹브라우저를 비롯한 애플리케이션들은 자체적으로 서버와 통신할 수 없음 모두 Socket 라이브러리를 사용하여 OS를 거쳐 통신함)
Socket 라이브러리는 아래 4단계를 거쳐 서버와 통신한다.
① 소켓 작성
② 서버측의 소켓과 연결
③ 데이터를 송/수신
④ 서버측 소켓과의 연결을 끊고 소켓 삭제
디스크립터는 소켓을 식별하는 id 이다.
다음 게시글에서는 OS(프로토콜 스택)단에서 어떻게 소켓을 서버로 전송하는지 알아보도록 하겠다.