컴퓨터 네트워크 스터디 2주차 정리

Jaehyun Ahn·2024년 11월 7일
0

HTTP 프로토콜 (HyperText Transfer Protocol)

: 웹에서 클라이언트와 서버 간의 데이터를 요청하고 응답하는 무상태성 프로토콜

  • 무상태성 프로토콜 : 각 요청이 독립적으로 처리되며, 이전 요청의 상태를 저장하지 않는 통신 방식. 즉, 서버는 클라이언트가 보낸 각각의 요청을 별개의 요청으로 취급하고, 이전 요청의 정보를 기억하지 않습니다.

HTTP의 요청/응답 모델

: 클라이언트 - 서버 구조에서 웹 상의 데이터가 교환되는 방식

HTTP 요청

: 클라이언트가 서버에 특정 작업을 요청할 때 보내는 메세지

요청의 구성요소

  • 요청 라인 (Request Line) : HTTP 메서드(GET, POST 등), 요청하는 리소스의 경로(URL), HTTP 버전을 포함합니다.
  • 헤더 (Header) : 요청의 부가적인 정보를 담고있는 메타데이터. 콘텐츠 유형(Content-Type), 인코딩 방식, 인증 정보 등을 포함합니다.
  • 본문 (Body) : 주로 POST, PUT, PATCH 요청에서 사용되며, 서버에 전달하고자 하는 데이터를 포함합니다.

HTTP 응답

: 서버가 클라이언트의 요청을 처리한 후 결과를 응답 형태로 반환

응답의 구성요소

  • 상태 라인 (Status Lint) : HTTP 버전, 상태 코드 (ex. 200 ok, 404 Noe Found), 상태 메세지가 포함됩니다. 상태 코드는 요청의 성공 여부나 오류 유형을 나타냅니다.
  • 헤더 (Header) : 응답의 부가적인 정보를 담은 메타데이터. 콘텐츠 유형, 서버 정보, 캐싱 정책 등의 정보가 포함됩니다.
  • 본문 (Body) : 클라이언트가 요청한 리소스의 실제 데이터를 담고있습니다. HTML 문서, 이미지 파일, JSON 데이터 등이 포함됩니다.

요청과 응답의 순환 과정

  1. 클라이언트가 서버에 요청을 보냅니다. (Request)
  2. 서버가 요청을 처리하여 응답을 돌려줍니다. (Response)

HTTP 메서드 - GET vs POST

GET 메서드

: 서버에서 데이터를 조회(요청)할 때 사용됩니다.

  • URL의 쿼리 스트링을 통해 데이터나 조건을 서버에 전달하는 방식
  • 데이터 조회가 주 목적이므로 서버의 상태를 변경하지 않습니다.

POST 메서드

: 서버에 데이터를 추가할 때 사용합니다.

  • HTTP 요청의 본문(Body)에 데이터를 포함하여 전송합니다.
  • 서버의 데이터나 상태를 변경하는 작업에 사용죕니다.

HTTP 메서드 - PUT vs PATCH

PUT 메서드

: 전체 데이터를 수정할 때 사용됩니다.

  • 클라이언트가 보낸 데이터로 서버 데이터 전체를 덮어쓰기 합니다. 데이터의 모든 필드를 새 데이터로 업데이트 하며, 일부 필드만 변경하더라도 전체 데이터가 다시 저장됩니다.

PATCH 메서드

: 데이터의 일부 필드를 수정할 때 사용됩니다.

  • 클라이언트가 보낸 데이터로 서버 데이터의 특정 부분만 업데이트 합니다. 전체 데이터를 덮어쓰지 않고 필요한 필드만 선택적으로 변경합니다.

HTTP 상태 코드

: 클라이언트가 보낸 요청에 대한 서버의 응답 결과를 숫자로 나타낸 코드.
상태 코드는 3자리 숫자로 이루어져 있으며, 첫 자리에 따라 5종류로 나뉩니다.

1xx (정보 응답)

: 요청이 처리 중임을 나타내는 정보 상태입니다.

  • 클라이언트가 요청을 계속해도 되는지를 알려주는 용도로 사용됩니다.
    ex.
  • 100 Continue (요청을 계속해도 됨)

2xx (성공)

: 요청이 성공적으로 처리되었음을 나타냅니다.
ex.

  • 200 OK : 요청이 성공적으로 완료되어 데이터를 반환함.
  • 201 Created : 요청이 성공적으로 완료되었으며, 새로운 리소스가 생성됨.
  • 204 Not Content : 요청이 성공적으로 처리되었지만, 응답 본문이 없음.

리소스 : 서버에 저장된 특정 데이터

3xx (리다이렉션)

: 요청된 리소스가 다른 위치로 이동했거나, 추가 작업(리다이렉트 등)이 필요함을 나타냅니다.
ex.

  • 301 Moved Permanently : 요청한 리소스가 영구적으로 다른 URL로 이동됨.
  • 302 Found : 요청한 리소스가 임시적으로 다른 URL에 있음.
  • 304 Not Modified : 클라이언트가 캐시된 데이터를 사용해도 됨.

4xx (클라이언트 오류)

: 클라이언트 측에서 잘못된 요청을 보냈음을 나타냅니다.
ex.

  • 400 Bad Request : 요청 구문이 잘못되었거나 잘못된 형식으로 요청함.
  • 401 Unauthorized : 인증이 필요한 요청이나, 유효한 인증 정보가 없음.
  • 403 Forbidden : 요청이 서버에 의해 거부됨.(권한 없음)
  • 404 Not Found : 요청한 리소스를 찾을 수 없음.

5xx (서버 오류)

: 서버에서 요청을 처리하는 중에 오류가 발생했음을 나타냅니다.
ex.

  • 500 Internal Server Error : 서버 내부에서 오류가 발생함.
  • 502 Bad Gateway : 서버가 잘못된 게이트웨이로부터 응답을 받음
  • 503 Service Unavailable : 서버가 일시적으로 과부하 상태이거나 유지 보수 중이라서 요청을 처리할 수 없음.

HTTP 헤더

: 클라이언트와 서버가 요청 및 응답을 주고받을 때 전송되는 부가 정보를 담고 있는 필드

HTTP 헤더를 통해 데이터 형식을 지정할 수 있고, 보안을 설정할 수 있으며, 캐싱 및 속도 개선, 리소스 위치 지정을 할 수 있습니다.

일반 헤더

: 요청과 응답 모두에 공통으로 사용될 수 있는 정보가 담깁니다.

요청 헤더

: 클라이언트가 서버에 요청을 보낼 때 추가하는 정보. 서버가 요청을 이해하고 처리할 수 있도록 도움을 줍니다.

응답 헤더

: 서버가 클라이언트에 응답을 보낼 때 추가하는 정보. 응답에 대한 부가적인 내용을 설명합니다.

엔티티 헤더

: 메시지 본문에 포함된 리소스에 대한 정보(파일 크기, 데이터 형식 등)을 나타냅니다.


HTTP 무상태성

: 서버가 클라이언트의 상태를 저장하지 않는 것. 즉, 각각의 요청이 독립적으로 처리되며, 이전 요청의 정보를 기억하지 않는다는 의미


HTTP Keep-Allive

: 클라이언트와 서버 간의 연결을 지속적으로 유지하여, 하나의 TCP 연결 내에서 여러 요청과 응답을 처리할 수 있게 해주는 기능


HTTP 파이프라이닝

: 클라이언트가 응답을 기다리지 않고 여러 개의 요청을 보내는 방식.

  • HTTP 요청의 전송 효율을 높이고 지연 시간을 줄여줍니다.

HTTP/1.1, HTTP/2, HTTP/3

HTTP/1.1

: HTTP 프로토콜의 표준화된 첫 번째 버전

  • Persistent Connections (Keep-Alive) : 연결이 지속적으로 유지되며, 여러 요청을 하나의 연결에서 처리할 수 있어 성능이 개선되었습니다.
  • 파이프라이닝 (Pipelining) : 클라이언트가 응답을 기다리지 않고 여러 요청을 연속으로 전송할 수 있습니다. 하지만 서버가 순차적으로 응답을 처리해야하기 때문에 HOL Blocking 문제가 발생할 수 있습니다.

HOL Blocking (Head Of Blocking)
: 연속된 요청 간에 헤더의 많은 중복이 생긴다는 문제.
앞의 요청에 대한 응답이 늦어지면 뒤의 모든 요청들은 모두 blocking되어 응답이 지연됩니다.

HTTP/2

: 성능 최적화와 속도 개선을 목표로 HTTP/1.1의 단점을 보완한 버전

  • 멀티플렉싱(Multiplexing) : 단일 연결에서 여러 요청과 응답을 동시에 처리할 수 있게 되어 HOL Blocking 문제를 개선했습니다. 각 요청이 독립적으로 처리되므로 응답 지연이 줄어듭니다.
  • 헤더 압축 : HTTP 헤더 정보를 HPACK 방식으로 압축전송하여 전송 효율성을 높였습니다.
  • 서버 푸시 : 서버가 클라이언트의 요청 없이도 필요한 리소스를 미리 전송할 수 있어, 리소스 요청을 줄려 페이지 로딩 시간을 개선합니다.
  • 이진 프레이밍 (Binary Framing) : 데이터가 텍스트가 아닌 이진 형식으로 전송되어 데이터 처리가 더욱 효율적입니다.

HTTP/3

: TCP 위에서 돌아가는 HTTP/2와는 달리, UDP 가빈의 QUIC 프로토콜을 사용하는 HTTP 버전

  • QUIC 프로토콜 : TCP 대신 UDP 기반의 QUIC 프로토콜을 사용하여, 연결 설정 시간이 짧고 네트워크 혼잡에 강합니다. TCP 연결에 비해 더욱 데이터를 빠르게 주고받을 수 있습니다.
  • 연결 복구 및 이동성 : QUIC는 연결이 끊겨도 세션을 복구할 수 있어 모바일 환경에서 네트워크 변경 (WI-FI -> 데이터 로 변환) 시에도 연결이 유지됩니다
  • HOL Blocking 해결 : TCP의 stream은 하나의 chain으로 연결되는 것과 달리, 각 stream당 독립된 stream chain을 구성하여 TCP의 HOL Blocking을 해결했습니다.
  • HTTP/1.1: Keep-Alive와 파이프라이닝을 통해 여러 요청을 하나의 연결에서 처리하지만, 헤드-오브-라인 블로킹 문제가 존재.
  • HTTP/2: 멀티플렉싱, 헤더 압축, 서버 푸시로 성능을 개선하였으며, 텍스트가 아닌 이진 형식을 사용.
  • HTTP/3: UDP 기반의 QUIC을 사용하여 연결 복구가 빠르고, 불안정한 네트워크에서도 성능이 향상됨.

HTTPS

: HTTP에 보안 기능(SSL/TLS 암호화)을 추가한 프로토콜. 데이터의 기밀성, 무결성, 인증성을 보장하여 안전하게 통신할 수 있도록 합니다.


SSL/TLS

: 인터넷 상에서 데이터를 안전하게 전송하기 위해 개발된 암호화 프로토콜. SSL/TLS는 데이터 기밀성, 인증, 무결성 보호 기능을 제공하며 핸드셰이크 과정을 통해 안전한 암호화 연결을 설정합니다.

  • SSL은 초기 버전, TLS는 SSL을 개선한 최신 버전입니다.

대칭키 암호화 방식이란

: 데이터를 암호화하고 복호화할 때, 하나의 동일한 대칭키(비밀 키)를 사용하는 암호화 방식입니다.

  • 빠른 암호화/복호화 속도 및 간단한 구조를 가지고 있지만 키를 안전하게 공유 및 관리 하는 것이 번거롭습니다.

비대칭키(공개 키) 암호화 방식이란

: 데이터를 암호화하고 복호화할 때 서로 다른 두 개의 키(공개 키, 비밀 키)를 사용하는 암호화 방식입니다.

  • 공개 키는 자유롭게 공개된 키, 비밀 비는 개인만 가지고 있는 키
  • 키 관리엔 용이하나 속도가 느리다는 단점 존재

전자 서명

: 비대칭키 암호화를 사용하여 디지털 환경에서 데이터의 작성자 신원과 무결성을 보장하기 위해 생성된 디지털 서명.

  • 문서가 인증된 작성자로부터 왔으며, 전송 과정에서 내용이 변조되지 않았음을 보장

HTTPS 암호화 과정

: HTTPS는 HTTP와 SSL/TLS 프로토콜이 결합된 것이기 때문에, 데이터를 주고받기 전에 SSL Handshake를 통해 안전한 연결을 설정합니다.

SSL Handshake : 클라이언트와 서버 간에 안전한 연결을 설정하기 위해 수행되는 초기 협상 과정

1. SLL Handshake 시작 : 클라이언트 Hello

  • HTTPS 통신을 시작하기 위해 클라이언트가 서버에 ClientHello 메시지를 전송합니다.
  • 메시지에는 클라이언트가 지원하는 SSL/TLS 버전, 사용할 수 있는 암호화 알고리즘 목록, 클라이언트에서 생성한 랜덤 데이터가 포함됩니다.

2. 서버 Hello

  • 서버는 ServerHello 메시지를 통해 클라이언트 요청에 응답합니다.
  • 서버는 클라이언트의 옵션 중에서 가장 높은 SSL/TLS 버전과 암호화 알고리즘을 선택하고, 서버에서 생성한 랜덤 데이터를 함께 전송합니다.

3. 서버 인증서 전송

  • 서버는 자신의 신원을 확인하기 위해 디지털 인증서를 클라이언트에 전송합니다. 서버의 공개키, 신뢰할 수 있는 인증 기관(CA)의 서명이 포함되어 있습니다.
  • 클라이언트는 이 인증서를 확인하여 신뢰할 수 있는 서버인지, 유효한 인증서인지 검증합니다.

4. Pre-Master Secret 생성 및 공유

  • 클라이언트는 서버의 공개 키를 사용하여 Pre-Master Secret 이라는 임시 암호화 데이터를 생성하고 이를 서버에 전송합니다.
  • 서버는 자신의 비밀 키를 사용하여 이 Pre-Master Secret를 복호화하고 동일한 값을 얻습니다.

5. 세션 키 생성

  • 클라이언트와 서버는 서로 공유한 두 개의 랜덤 데이터와 Pre-Master Secret을 사용하여 세션 키를 생성합니다.
  • 세션 키는 암호화된 통신에서 데이터를 보호하는 데 사용됩니다.

6. Change Cipher Spec 및 Finished 메시지 교환

  • 클라이언트와 서버는 ChangeCipherSpec 메시지를 통해 암호화 설정을 변경했음을 알리고, Finished 메시지를 전송하여 SSL Handshake가 무사히 완료되었음을 확인합니다.

7. SSL Handshake 완료 및 HTTPS 암호화 통신 시작

  • SSL Hansshake가 완료되면, 클라이언트와 서버는 서로 암호화된 데이터 통신을 시작합니다.
  • 세션 키를 사용하여 대칭키 암호화 방식으로 데이터를 주고 받으며, 모든 HTTP 요청과 응답은 암호화됩니다.

8. 암호화된 데이터 전송

  • HTTPS 통신에서는 모든 HTTP 요청과 응답을 세션 키로 암호화하여 전송합니다.

9. 연결 종료 및 세션 키 삭제

  • 클라이언트와 서버 간의 통신이 끝나면, 세션 키는 삭제됩니다.
  • 다음에 다시 연결할 때는 새로운 SSL Handshake가 수행되고 새로운 세션 키가 생성됩니다.

DNS (Domain Name System)

: 도메인 이름을 IP 주소로 변환해주는 시스템

  • 사용자가 이해하기 쉬운 주소인 도메인 이름(google.com)을 해당 도메인에 해당하는 IP 주소로 찾아 사용자에게 제공해줍니다

DNS의 작동 방식

  1. 사용자가 도메인 이름을 입력
  2. Local DNS 서버에게 도메인에 해당하는 IP 주소를 요청
  3. Root DNS 서버에게 도메인에 해당하는 IP 주소를 요청
  4. TLD 네임 서버에게 도메인에 해당하는 IP 주소를 요청
  5. Authoritative DNS 서버에게 도메인에 해당하는 IP 주소를 요청
  6. IP 주소 반환 및 캐싱
  7. 해당 도메인 접속 완료

Local DNS 서버 (기지국 DNS 서버) : 기지국 DNS 서버. 인터넷을 사용하기 위해선 IP를 할당해주는 통신사(KT, SKT, LG...)에 등록하게 되는데, 컴퓨터의 LAN선을 통해 인터넷이 연결되면, 가입했던 각 통신사의 기지국 DNS 서버가 등록되게 된다. (KT를 사용하면 KT DNS...)
Root DNS 서버 (루트 네임 서버) : 인터넷의 도메인 네임 시스템의 루트 존. ICANN이 직접 관리하는 절대 존엄 서버로, TLD DNS 서버 IP들을 저장해두고 안내하는 역할
TLD(Top-Level Domain, 최상위 도메인) DNS 서버 : 도메인 등록 기관이 관리하는 서버. 도메인 네임의 가장 마지막 부분을 말한다. Authoritative DNS 서버 주소를 저장해두고 안내하는 역할을 한다.
Authoritative DNS 서버 : 실제 개인 도메인과 IP 주소의 관계가 기록/저장/변경되는 서버 (ex. google.com DNS 서버에는 'www.google.com'의 IP 주소가 있다


DNS 질의

재귀 질의

  • 클라이언트가 Local DNS 서버에게 특정 도메인의 IP 주소를 요청할 때 사용하는 방식
  • 클라이언트가 example.com의 IP 주소를 요청하면, 로컬 DNS 서버가 루트 서버, TLD 서버, 권한이 있는 서버를 거쳐 최종적으로 IP 주소를 찾아 클라이언트에 반환합니다.

반복 질의

  • 클라이언트가 요청을 보내면 DNS 서버가 최종 IP 주소를 찾지 않고, 단계별로 다음 DNS 서버의 주소를 알려주는 방식
  • 클라이언트가 로컬 DNS 서버에 질의하면, 로컬 서버는 루트 서버의 주소를 알려주고, 클라이언트는 다시 루트 서버에 요청을 보냅니다. 루트 서버는 TLD 서버 주소를 알려주고, 클라이언트가 그 TLD 서버로 질의하는 식으로 반복됩니다.

순방향 질의

  • 도메인 이름을 IP 주소로 변환하는 질의 방식
  • 사용자가 example.com과 같은 도메인 이름을 입력하면, DNS 서버는 해당 도메인의 IP 주소를 찾아 반환합니다.

역방향 질의

  • IP 주소를 도메인 이름으로 변환하는 질의 방식
  • 특정 IP 주소에 대해 해당하는 도메인 이름을 요청합니다.

DNS 서버에게 IP 주소를 요청할 때, 왜 UDP를 사용하나요?

: 빠른 속도, DNS의 간단한 요청-응답 구조, 낮은 오버헤드 때문입니다.

  • 속도 : UDP는 TCP와 달리 연결을 설정하거나 해제하는 과정(3-way Handshake)이 없기 때문에 TCP보다 요청-응답 속도가 빠릅니다.
  • DNS의 간단한 요청-응답 구조 : DNS는 단순한 요청과 응답을 주고 받기 때문에, 패킷 손실 시 재전송하거나 다시 질의하는 방식으로 대응할 수 있습니다
  • 낮은 오버헤드 : TCP는 3-way Handshake 등 연결 설정에 오버헤드가 발생하지만, UDP는 이러한 과정이 없어 효율적입니다.

DNS 레코드

: 도메인 이름과 관련된 다양한 정보를 저장하는 데이터 파일

  • 도메인이 어느 IP 주소로 연결되는지, 이메일 서버가 어디에 있는지 등 도메인에 대한 중요한 설정을 정의합니다.

참고문헌

https://zu-techlog.tistory.com/113
https://kanoos-stu.tistory.com/46
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-DNS-%EA%B0%9C%EB%85%90

profile
미래 프론트 어쩌고
post-custom-banner

0개의 댓글