웹 통신의 큰 흐름 : HTTP://WWW.GOOGLE.COM/ 을 접속할 때 일어나는 일
브라우저가 URL에 적힌 값을 파싱해서 HTTP Request Message를 만들고 OS에 전송 요청을 합니다. 이 때, Domain으로 요청을 보낼 수 없기 때문에 DNS Lookup을 수행합니다.
DNS 룩업 과정은 크롬의 경우 브라우저 -> 호스트파일 -> DNS Cache의 순서로 도메인에 매칭되는 ip를 찾습니다.
일반적으로 설명하는 DNS Lookup은 루트 도메인서버에서부터 서브도메인 서버순으로 찾게됩니다.
이 요청은 프로토콜 스택이라는 OS에 내장된 네트워크 제어용 소프트웨어에 의해 패킷에 담기고 패킷에 제어정보를 덧붙여 LAN 어댑터에 전송하고, LAN 어댑터는 이를 전기신호로 변환시켜 송출합니다.
패킷은 스위칭 허브 등을 경유하여 인터넷 접속용 라우터에서 ISP로 전달되고 인터넷으로 이동합니다.
액세스 회선에 의해 통신사용 라우터로 운반되고 인터넷의 핵심부로 전달됩니다. 고속 라우터들 사이로 목적지까지 패킷이 흘러들어가게 됩니다.
핵심부를 통과한 패킷은 목적지의 LAN에 도착하고, 방화벽이 패킷을 검사한 후 캐시 서버로 보내어 웹 서버에 갈 필요가 있는지 검사합니다.
웹 서버에 도착한 패킷은 프로토콜 스택이 패킷을 추출하여 메시지를 복원하고 웹 서버 애플리케이션에 넘깁니다.
애플리케이션은 요청에 대한 응답 데이터를 작성하여 클라이언트로 회송하고, 이는 전달된 방식 그대로 전송됩니다.
----
[내용 파악]
Q. 1. 브라우저가 URL에 적힌 값을 파싱한다는 것은 무엇인가?
브라우저가 URL에 적힌 값을 파싱한다는 것은 주어진 URL(Uniform Resource Locator) 문자열을 분석하여 구성 요소별로 나누고, 이를 이해할 수 있는 형태로 변환하는 과정을 의미합니다. URL은 웹상의 자원을 찾기 위한 주소로, 다음과 같은 구성 요소로 이루어져 있습니다:
- **프로토콜**: 웹 서버와 통신할 때 사용되는 규칙을 정의합니다. 예를 들어, `http`나 `https`가 이에 해당합니다.
- **도메인 이름**: 인터넷 상의 서버를 나타내는 주소입니다. 예: `http://www.google.com`
- **포트 번호**: 서버 내에서 특정 서비스를 찾기 위한 문이며, 일반적으로 웹(HTTP) 서비스의 기본 포트는 80, HTTPS는 443입니다. URL에 직접 명시되지 않는 경우, 사용하는 프로토콜의 기본 포트 번호가 사용됩니다.
- **경로(Path)**: 서버에서 특정 페이지나 자원에 접근하기 위한 구체적인 경로를 나타냅니다. 예: `/search`
- **쿼리 스트링(Query String)**: 웹 페이지에 전달할 추가 정보를 포함하며, `?`로 시작하여 `key=value` 쌍의 형태로 구성됩니다. 여러 쌍이 있는 경우 `&`로 구분됩니다.
- **프래그먼트(Fragment)**: 페이지 내에서 특정 섹션으로 직접 이동하기 위해 사용되며, `#`으로 시작합니다.
브라우저가 URL을 파싱하는 과정은 다음과 같습니다:
1. **프로토콜 분석**: 브라우저는 URL에서 프로토콜을 식별하여 해당 프로토콜에 맞는 방식으로 요청을 처리합니다.
2. **도메인 이름 분석**: 도메인 이름을 추출하여 DNS 조회를 통해 해당 도메인의 IP 주소를 찾습니다.
3. **포트 번호 확인**: URL에 포트 번호가 명시되어 있으면 해당 포트를 사용하고, 그렇지 않으면 프로토콜의 기본 포트 번호를 사용합니다.
4. **경로, 쿼리 스트링, 프래그먼트 처리**: URL의 나머지 부분을 분석하여 서버에 전송할 HTTP 요청 메시지를 구성합니다.
이 파싱 과정을 통해 브라우저는 주어진 URL을 구성하는 각 부분의 의미를 이해하고, 이를 바탕으로 웹 서버에 올바른 형식의 요청을 보낼 수 있습니다.
Q. 2. http request message?
HTTP 요청 메시지(HTTP Request Message)는 클라이언트(웹 브라우저나 다른 HTTP 클라이언트)가 웹 서버에게 데이터를 요청하거나 서버에 특정 작업을 수행하도록 요청할 때 사용하는 데이터 포맷입니다. 이 메시지는 HTTP 프로토콜을 사용하여 웹 서버와 클라이언트 간의 통신을 가능하게 합니다.
HTTP 요청 메시지는 다음과 같은 주요 구성 요소로 이루어집니다:
1. **시작 줄(Start Line)**: 이 줄에는 세 가지 중요한 정보가 포함됩니다.
- **메서드(Method)**: 클라이언트가 수행하고자 하는 동작을 나타내는 HTTP 메서 (예: GET, POST, PUT, DELETE 등).
- **요청 URI(Request URI)**: 클라이언트가 요청하는 리소스의 위치나 경로.
- **HTTP 버전(HTTP Version)**: 사용하는 HTTP 프로토콜의 버전 (예: HTTP/1.1, HTTP/2).
2. **헤더(Headers)**: 요청에 대한 메타데이터를 포함하는 키-값 쌍의 집합입니다. 여기에는 요청을 보내는 클라이언트의 정보, 서버로 전송되는 데이터의 타입, 캐싱 정책, 인증 정보 등이 포함될 수 있습니다.
3. **빈 줄(Empty Line)**: 헤더와 바디를 구분하는 빈 줄입니다. 이 줄은 헤더의 끝을 나타내고, 바디의 시작을 알립니다.
4. **바디(Body)**: 요청의 바디는 선택적으로 포함될 수 있으며, 주로 POST나 PUT 메서드와 같이 서버에 데이터를 전송할 때 사용됩니다. 바디에는 전송하고자 하는 데이터가 포함됩니다.
HTTP 요청 메시지의 예시는 다음과 같습니다:
```
GET /index.html HTTP/1.1
Host: http://www.example.com
User-gent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
```
이 예시에서는 클라이언트가 `http://www.example.com`의 루트(`/index.html`)에서 HTML 페이지를 요청하고 있으며, 사용하는 HTTP 메서드는 `GET`입니다. `Host`와 `User-Agent`는 요청의 헤더에 포함되어 있습니다. `GET` 메서드는 일반적으로 바디를 포함하지 않으므로, 이 예시에는 바디가 없습니다.
HTTP 요청 메시지는 클라이언트와 서버 간의 통신을 위한 기본적인 수단으로, 클라이언트가 웹 서버에 정보를 요청하거나 서버 상의 리소스를 조작하기 위해 사용됩니다.
Q. 3. http request message를 만든다는 것은 무엇인가?
HTTP 요청 메시지를 만든다는 것은 클라이언트(예: 웹 브라우저)가 웹 서버에 정보를 요청하거나 서버에 특정 작업을 수행하도록 지시하기 위해, HTTP 프로토콜의 규칙에 따라 구성된 특정 형식의 데이터 패킷을 생성하는 과정을 말합니다. 이 메시지는 웹 서버가 이해하고 처리할 수 있는 방식으로 요청의 세부 사항을 포함합니다.
HTTP 요청 메시지는 크게 두 부분으로 구성됩니다: **시작 라인(Start Line)**과 **헤더(Headers)**, 그리고 선택적으로 **바디(Body)**가 포함될 수 있습니다.
1. **시작 라인(Start Line)**: 이 부분에는 HTTP 메서드(GET, POST, PUT 등), 요청 대상의 URI(Uniform Resource Identifier), 그리고 HTTP 버전 정보가 포함됩니다. 예를 들어, 웹 페이지를 요청할 때는 주로 GET 메서드가 사용됩니다.
2. **헤더(Headers)**: HTTP 요청의 다양한 속성과 메타데이터를 정의합니다. 예를 들어, `Host` 헤더는 요청이 전송되는 서버의 도메인 이름을 지정하고, `User-Agent` 헤더는 요청을 보내는 클라이언트의 정보(브라우저 타입, 운영 체제 등)를 서버에 알립니다. 또한, `Accept` 헤더는 클라이언트가 처리할 수 있는 컨텐츠 유형을 나타냅니다.
3. **바디(Body)**: 주로 POST나 PUT 메서드와 같이 서버로 데이터를 전송할 때 사용됩니다. 바디에는 전송할 데이터가 포함되며, 이 데이터는 폼 데이터, 파일 업로드 등 다양한 형태일 수 있습니다.
HTTP 요청 메시지를 만드는 과정은 다음과 같습니다:
- URL을 파싱하여 호스트, 경로, 쿼리 스트링 등을 결정합니다.
- 선택한 HTTP 메서드와 요청의 목적에 따라 시작 라인을 구성합니다.
- 요청을 정확히 처리하기 위해 필요한 헤더를 추가합니다. 예를 들어, 요청하는 데이터의 타입, 인증 정보, 캐시 제어 방법 등을 지정할 수 있습니다.
- 필요한 경우, 바디에 데이터를 포함시킵니다.
이렇게 구성된 HTTP 요청 메시지는 TCP/IP 네트워크를 통해 웹 서버로 전송되며, 서버는 이 메시지를 받아 처리한 후, 적절한 HTTP 응답 메시지를 클라이언트로 회송합니다.
Q. 4. ` HTTP Request Message를 만들고 OS에 전송 요청을 합니다.` 운영체제에 전송요청을 어떻게 하는 것인가?
"HTTP 요청 메시지를 만들고 OS(운영 체제)에 전송 요청을 합니다"라는 부분은 웹 통신 과정에서 브라우저와 운영 체제 간의 상호작용을 설명합니다. 이 과정은 네트워크 스택을 통해 인터넷에 데이터를 전송하는 방법에 대한 것입니다. 여기서 말하는 "OS에 전송 요청"은 브라우저가 생성한 HTTP 요청 메시지를 실제 네트워크를 통해 웹 서버로 보내기 위해 운영 체제의 네트워크 스택을 사용하는 과정을 의미합니다.
이 과정은 다음 단계로 이루어집니다:
1. **HTTP 요청 메시지 생성**: 브라우저는 사용자가 입력한 URL을 바탕으로 HTTP 요청 메시지를 생성합니다. 이 메시지에는 요청할 웹 페이지의 주소, 사용할 HTTP 메서드(예: GET, POST), 헤더, 그리고 필요한 경우 바디 정보가 포함됩니다.
2. **네트워크 스택을 통한 전송 요청**: 생성된 HTTP 요청 메시지는 운영 체제의 네트워크 스택으로 전달됩니다. 이 과정에서 브라우저는 운영 체제가 제공하는 API(응용 프로그래밍 인터페이스)를 사용하여 네트워크 스택에 데이터 전송을 요청합니다.
3. **DNS 조회**: 만약 요청한 URL의 도메인 이름에 해당하는 IP 주소가 캐시되어 있지 않다면, 운영 체제는 DNS(Domain Name System) 조회를 수행하여 도메인 이름을 IP 주소로 변환합니다.
4. **TCP 연결**: DNS 조회를 통해 얻은 IP 주소로 TCP(Transmission Control Protocol) 연결을 설정합니다. TCP 연결은 데이터가 신뢰성 있게 전송될 수 있도록 합니다. 이 단계는 3-way handshake 과정을 포함합니다.
5. **데이터 패킷 전송**: TCP 연결이 설정되면, 운영 체제의 네트워크 스택은 HTTP 요청 메시지를 TCP 패킷으로 캡슐화하고 이를 인터넷을 통해 목적지 서버로 전송합니다.
6. **응답 대기 및 처리**: 요청이 웹 서버에 도달하고 처리되면, 웹 서버는 HTTP 응답 메시지를 클라이언트로 다시 보냅니다. 이 응답 메시지는 동일한 네트워크 경로를 따라 클라이언트의 운영 체제로 전송되며, 운영 체제는 이 메시지를 브라우저로 전달합니다.
이 전체 과정은 사용자가 브라우저를 통해 웹 페이지에 접근하려고 할 때 매번 자동으로 발생합니다. 운영 체제의 네트워크 스택은 이러한 요청과 응답을 처리하는 데 필수적인 역할을 하며, 브라우저와 웹 서버 간의 통신을 가능하게 합니다.
Q. 5. 운영체제의 네트워크 스택이란 무엇이야?
운영체제의 네트워크 스택(Network Stack), 또는 TCP/IP 스택은 컴퓨터 네트워크에서 데이터 통신을 가능하게 하는 프로토콜 집합과 이를 구현한 소프트웨어 모듈의 집합을 말합니다. 이 스택은 데이터를 송수신하기 위해 필요한 기능을 계층화하여 제공하며, 각 계층은 특정한 역할을 수행합니다. 네트워크 스택은 일반적으로 OSI(Open Systems Interconnection) 모델 또는 TCP/IP 모델을 기반으로 구성되며, 인터넷 통신에서는 주로 TCP/IP 모델이 사용됩니다.
### TCP/IP 모델의 주요 계층:
1. **응용 계층(Application Layer)**: 사용자와 직접적으로 상호작용하는 애플리케이션 프로토콜(예: HTTP, FTP, SMTP 등)을 정의합니다. 이 계층은 웹 페이지 요청, 이메일 전송, 파일 전송 등의 높은 수준의 네트워크 서비스를 제공합니다.
2. **전송 계층(Transport Layer)**: 네트워크 간의 통신을 관리합니다. 주요 프로토콜로는 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)가 있으며, 신뢰성 있는 데이터 전송, 흐름 제어, 혼잡 제어 등을 담당합니다.
3. **인터넷 계층(Internet Layer)**: 데이터 패킷의 라우팅과 전송을 담당합니다. IP(Internet Protocol)가 이 계층의 핵심 프로토콜로, 데이터 패킷을 출발지에서 목적지까지 전달하는 역할을 합니다.
4. **링크 계층(Link Layer)**: 네트워크의 물리적 장비 간의 데이터 전송을 담당합니다. 이 계층은 네트워크 어댑터나 드라이버와 같은 하드웨어 수준의 이슈를 처리하며, 데이터를 전기 신호로 변환하여 네트워크 케이블이나 무선 링크를 통해 전송합니다.
### 네트워크 스택의 역할:
- **데이터 포장 및 해제**: 송신 측에서는 응용 데이터를 네트워크를 통해 전송할 수 있는 형태로 캡슐화(포장)하고, 수신 측에서는 이 데이터를 받아 원래의 형태로 복원(해제)합니다.
- **주소 지정 및 라우팅**: 데이터 패킷이 올바른 목적지로 전송되도록 IP 주소와 같은 주소 체계를 사용하고, 라우터를 통한 경로를 결정합니다.
- **오류 검출 및 수정**: 데이터 전송 과정에서 발생할 수 있는 오류를 감지하고, 가능한 경우 이를 수정합니다.
- **흐름 제어 및 혼잡 제어**: 네트워크의 상태에 따라 데이터 전송 속도를 조절하여 효율적인 통신을 보장합니다.
운영체제의 네트워크 스택은 이러한 계층들을 통합하여 컴퓨터가 네트워크를 통해 데이터를 송수신할 수 있도록 합니다. 사용자나 응용 프로그램이 인터넷을 통해 데이터를 전송할 때, 이 모든 과정이 내부적으로 자동으로 이루어집니다.
Q. 6. 도메인이란 무엇인가?
도메인(Domain)은 인터넷 상에서 컴퓨터나 네트워크를 식별하기 위한 주소 체계의 일부입니다. 도메인 이름은 사람이 읽고 기억하기 쉽도록 알파벳, 숫자, 그리고 하이픈(-)을 사용하여 구성된 문자열로, 인터넷의 기술적 주소인 IP 주소(Internet Protocol Address)에 대한 더 기억하기 쉬운 대체명입니다.
### 도메인 이름의 구조
도메인 이름은 여러 레벨로 구성되어 있으며, 각 레벨은 점(.)으로 구분됩니다. 가장 오른쪽에 위치한 최상위 도메인(Top-Level Domain, TLD)에서부터 왼쪽으로 갈수록 하위 도메인으로 세분화됩니다. 예를 들어, `http://www.example.com`에서:
- `.com`은 최상위 도메인(TLD)입니다.
- `example`은 두 번째 레벨 도메인(SLD)으로, 등록된 도메인 이름입니다.
- `www`는 세 번째 레벨 도메인이나 서브 도메인(Subdomain)으로, 특정 호스트나 서비스를 가리킵니다.
### 도메인의 역할
- **주소 지정**: 도메인 이름은 인터넷 상의 리소스, 예를 들어 웹 사이트의 위치를 나타내는 주소 역할을 합니다.
- **이름 해석**: 도메인 이름은 사람이 읽을 수 있는 형식이지만, 인터넷은 기계적인 IP 주소를 사용하여 데이터를 라우팅합니다. 도메인 이름 시스템(DNS)은 도메인 이름을 해당 IP 주소로 변환하는 역할을 합니다, 이를 통해 사용자는 웹 사이트에 접속할 때 도메인 이름을 사용할 수 있습니다.
- **브랜딩 및 인식**: 도메인 이름은 브랜드, 기업, 개인 등의 온라인 신원과 밀접하게 연관되어 있습니다. 좋은 도메인 이름은 쉽게 기억되고, 특정 웹 사이트나 서비스를 사용자에게 인식시키는 데 중요한 역할을 합니다.
### 최상위 도메인(TLD)
최상위 도메인은 크게 두 가지 카테고리로 나뉩니다:
- **일반 최상위 도메인(gTLD)**: 일반적인 용도로 사용되며, `.com`, `.org`, `.net`, `.info` 등이 여기에 속합니다.
- **국가 코드 최상위 도메인(ccTLD)**: 특정 국가나 지역을 나타내며, `.uk`(영국), `.de`(독일), `.kr`(대한민국) 등이 있습니다.
도메인 이름은 전 세계적으로 유일하며, 도메인 이름 등록 기관을 통해 등록할 수 있습니다. 도메인 이름은 웹 사이트 주소, 이메일 주소 등 다양한 온라인 활동의 기초가 됩니다.
Q. 7. DNS Lookup이란 무엇?
DNS 조회(DNS lookup)는 인터넷에서 도메인 이름을 해당하는 IP 주소로 변환하는 과정입니다. DNS(Domain Name System)는 사실상 인터넷의 전화번호부와 같으며, 사용자가 웹 브라우저에 URL을 입력할 때나 이메일을 보낼 때와 같이 도메인 이름을 사용하여 통신하려고 할 때, DNS 서버는 이러한 이름을 네트워크 장비가 이해할 수 있는 숫자로 된 IP 주소로 변환해줍니다.
DNS Lookup의 작동 방식
1. 사용자 요청: 사용자가 웹 브라우저에 URL을 입력하면, 브라우저는 먼저 해당 도메인 이름의 IP 주소를 알아내기 위해 DNS 조회를 시작합니다.
2. 로컬 DNS 캐시 확인: 브라우저와 운영 체제는 각각 자체 DNS 캐시를 유지합니다. 조회 과정은 이 캐시에서 시작되어, 최근 조회된 도메인 이름의 IP 주소가 여기 저장되어 있을 수 있습니다. 캐시에서 찾을 수 없으면 조회는 계속됩니다.
3. 리졸버(Resolver)로 요청: 사용자의 인터넷 서비스 제공업체(ISP)에 있는 리졸버에 요청이 전송됩니다. 리졸버는 요청받은 도메인 이름의 IP 주소를 찾기 위해 DNS 조회 과정을 진행합니다.
4. 루트 DNS 서버 조회: 리졸버는 먼저 전 세계에 있는 13개의 루트 DNS 서버 중 하나에 조회를 요청하여, 요청받은 도메인의 최상위 도메인(TLD, 예: .com, .org)을 관리하는 TLD 서버의 주소를 알아냅니다.
5. TLD 서버 조회: TLD 서버는 해당 최상위 도메인을 관리하며, 요청받은 도메인 이름의 네임서버 정보를 리졸버에게 알려줍니다.
6. 권한 있는 DNS 서버 조회: 리졸버는 네임서버 정보를 바탕으로 권한 있는 DNS 서버에 접근하여, 실제 도메인 이름에 대한 IP 주소를 요청합니다.
7. 응답 및 캐싱: 권한 있는 DNS 서버는 도메인 이름에 매핑된 IP 주소를 리졸버에게 전달합니다. 리졸버는 이 정보를 캐시에 저장한 후 요청한 클라이언트에게 IP 주소를 반환합니다. 이렇게 해서 웹 브라우저는 웹 서버에 접속할 수 있는 IP 주소를 얻게 됩니다.
'여러가지 > 이것저것' 카테고리의 다른 글
GET과 POST의 차이점 (0) | 2024.03.18 |
---|---|
HTTPS 공개키 암호화로 안전한 키 교환, 비밀키 암호화로 효율적인 데이터 통신을 보장/ 두 암호화 방식 사용 (0) | 2024.03.18 |
HTTP, HTTPS 차이점 (0) | 2024.03.18 |
TCP 3, 4 way handshake (0) | 2024.03.18 |
TCP와 UDP의 차이점 (0) | 2024.03.18 |