본문으로 바로가기

2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 01. 허브, 스위치, 라우터

2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 02. L2, L3, L4, L7 스위치

2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 03. 백본 스위치

2015/10/28 - [01. 기술 - 인프라] - 네트워킹 기본 - 04. L4, L7 로드 밸런싱

2015/10/28 - [01. 기술 - 인프라] - 네트워킹 기본 - 05. LAN, WAN, VLAN

2015/11/05 - [01. 기술 - 인프라] - 네트워킹 기본 - 06. 프로토콜 개념

2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 07. TCP/IP 4 계층 모델

2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 08. 어플리케이션 계층 프로토콜 HTTP

2015/11/24 - [01. 기술 - 인프라] - 네트워킹 기본 - 09. TCP, IP, Ethernet 프로토콜 그리고 통신



이번 포스트부터는 데이터를 보내는 클라이언트의 어플리케이션 계층에서부터 데이터를 받는 서버의 어플리케이션까지 데이터가 전달되는 과정을 정리해보도록 한다. 먼저 어플리케이션 계층 프로토콜 HTTP부터 알아보자. 브라우저 프로세스에서 URL을 입력하고 엔터를 치면 어떻게 될까. 



브라우저 프로세스는 시스템 콜을 통해서 목적지 IP와 TCP에서 사용될 포트를 커널로 전달한다. 


■ 소켓(socket )


커널에서는 두 정보를 이용해서 소켓(Socket)을 생성해서 반환되고, 상대방의 소켓과 연결이 만들어진다. 



이제 보내는쪽 브라우저 프로세스에서 데이터(HTTP 요청)를 소켓에 부으면 상대방쪽 소켓으로 전달되어 소켓과 연결된 웹 서버의 프로세스로 전달된다.

이제 서버측에서는 전달받은 HTTP 요청을 해석하여 원하는 데이터를 HTTP 응답으로 만들어서 서버의 소켓에 부으면 그 응답은 클라이언측 소켓으로 전달되어 브라우저 프로세스로 전달된다. 이렇게 해서 HTTP 응답/요청이 마무리되고 연결은 종료된다.

참고로, HTML 페이지에 포함된 이미지 하나 하나를 요청할때마나 이렇게 소켓을 만들고 연결을 만드는 작업은 오버헤드가 될 수 있다. 그래서 Keep-Alive 기능을 활성화시키면 어느 정도(?)의 기간동안 연결을 유지할 수 있다. 이 세션 유지 시간은 적당해야 한다. 


■ 가상 연결( Virtual Circuit )


앞에서 말한 연결은 "가상" 연결이다. 그림처럼 직접적인 파이프같은 통로가 아니다. 어플리케이션 계층에서 보기에 연결이 생성되는 것처럼 보이지만, 실제로 데이터는 물리적인 통신 케이블을 통해서 중간에 스위치 및 라우터를 거치는 긴 여정을 통해서 상대방에 도착하게 된다. 우리가 "연결을 생성한다"고 하는 것은 소위 3-way handshaking이라는 과정을 거쳐서 클라이언트와 서버간에 소켓을 생성하고 서로간에 패킷을 받아들일 준비를 마치는 것을 말한다. 물론 아무 패킷이나 다 받아들이는 것은 아니다. 3-way handshaking과정에서 주고 받은 정보를 통해서 "악수"를 한 상대방이 보낸 패킷만을 받아들인다.


이제 다음에는 TCP, IP, Ethernet 프로토콜에 대해서 정리해본다.






댓글을 달아 주세요

티스토리 툴바