HTTP, HTTPS
IP주소란?
Internet Protocol Address
인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트폰 등)을 식별할 수 있는 고유 주소
인터넷에 연결된 모든 컴퓨터는 IP를 갖는다.
📌 IPv4와 IPv6
구분 | IPv4 | IPv6 |
주소 길이 | 32bit | 128bit |
표시 방법 | 4개 부분에 8bit씩 10진수로 표시 ex) 202.30.64.22 |
8개 부분에 16bit씩 16진수로 표시 ex) 2001:0203:abcd:ffff:0000:0000 |
주소 개수 | 256*256*256*256 = 약 43억개 | 약 43억*43억*43억*43억개 |
DNS
Domain Name System
도메인 네임은 IP 주소를 사람들이 이해하기 쉽게 문자로 표현한 것.
📌 PORT
운영 체제 통신에서의 종단점
IP 주소를 통해 목적지 호스트까지 도달한 후, 어떤 프로세스에서 테이터를 받을 것인지 포트번호로 구분!
http://www.domain.com:1234
1234는 port임.
구분 | 포트 범위 | 설명 |
잘 알려진 포트(well-known port) | 1~1023 | 공식적으로 지정되어 있는것도 있고 아닌것도 있음 이미 알려져 있는 것들이 많은 구간 대표적으로 80(http), 443(https) |
등록된 포트(registered port) | 1024~49151 | 사용자가 직접 등록해서 사용할 수 있는 포트 |
동적 포트(dynamic port) | 49152~65535 | 매번 접속할 때마다 포트번호가 변경되며, 인터넷이나 시스템에서 사용할 때 동적으로 할당하는 포트 |
📌 DNS 서버가 IP정보를 보내주는 방식
- 회선통신(Circuit Switching) : 미리 설정한 고정 경로를 따라 데이터 전송
- 패킷통신(Packet Switching) : 전송 당시 가장 효율적인 경로로 패킷 전송
📌 TCP/IP
IP + TCP = 인터넷 프로토콜 + 전송 제어 크포토콜
TCP를 기반으로 한 HTTP, FTP, SMTP 등 수 많은 프로토콜들이 IP 위에서 동작하기에 묶어서 TCP/IP라고 한다.
효율적으로 빠르게(IP) 보내면서 안전하게(TCP) 전달해주려는 목적!
HTTP
HyperText Transfer Protocol
클라이언트와 서버 간의 자원을 교환하기 위한 TCP/IP 기반 통신 프로토콜(규약, 약속)
📌 특징
- 단방향성 : 서버가 넘저 응답을 보낼 수 없고 클라이언트 요청에만 응답할 수 있다.
- 비연결성 : 클라이언트 요청으로 서버와 연결된 후, 요청에 대한 응답의 데이터를 전송하면 연결 종료(실시간 통신 불가)
📌 문제점
- 평문 통신이기에 도청 가능
- 통신 상대가 검증된 상대인지 확인되지 않아 위장이 가능
- 완전성을 증명할 수 없기에 변조 가능
📌 HTTP 메소드
클라이언트가 웹 서버에게 요청의 목적이나 종류를 알리는 수단
- GET : 리소스 조회, 서버에 전달하고 싶은 데이터는 query를 통해서 전달
- POST : 리소스를 새롭게 생성, 서버에 전달하고 싶은 데이터는 메시지 바디를 통해 전달
- PUT : 리소스가 있으면 대체하고 없으면 생성한다. 즉, 데이터를 덮어쓴다.
- PATCH : PUT과 마찬가지로 리소스를 일부분 변경(수정)할 때 사용
- DELETE : 리소스를 제거할 때 사용
캐시가능은 GET, HEAD, POST, PATCH가 가능하지만, 구현이 어려워
실제로는 GET과 HEAD만 주로 캐싱이 쓰인다.
📌 HTTP 상태코드
클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주기 위한 정보
- 1xx (Informational): 요청이 수신되어 처리중
- 2xx (Successful): 요청 정상 처리
- 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 (보통 리다이렉션처리)
- 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
HTTPS란?
HTTP의 보안(Secured) 버전
SSL/TLS 프로토콜 사용해 HTTP를 암호화하여 주고 받을 때 쓰는 프로토콜
📌 SSL/TLS 흐름
0. 서비스를 서빙하는 서버가 CA로 부터 CA 인증서를 발급받는다.
서비스를 서빙하는 서버는 CA에 자신의 도메인정보와 서버측 공개키를 보낸다.
인증기관은 받은 두 데이터를 자신의 개인키로 암호화한 CA 인증서를 서버로 보낸다.
1. 브라우저에서 도메인을 쳐서 요청을 보내 클라이언트(브라우저)와 서버가 TCP 연결을 맺는다.
2. 서버는 브라우저가 준 Cipher Suite 중 하나를 골라 자신의 SSL/TLS 프로토콜 버전을 브라우저에게 알리면서, 서버 자신의 도메인에 대한 CA 인증서를 보낸다.
3. 브라우저는 브라우저에 내장된 CA의 공개 키를 이용해 CA 인증서를 복호화하여 인증서가 유효한지 검증 후, 서버 측에 공개키를 얻는다.
4. 브라우저는 앞으로 서버와 통신하는데 있어 암호화를 위해 사용할 대칭 키를 만들고, 그 대칭 키를 사용해 공개 키로 암화화하여 서버로 보낸다.
5. 서버는 자신의 개인키를 사용해 암호화된 것을 복호화하여 사용자 대칭 키를 얻어 낸다.
6. 이렇게 얻은 대칭 키를 활용하여 서버와 클라이언트가 서로 데이터를 안전하게 암/복호화 하면서 통신할 수 있음
'CS(ComputerScience)' 카테고리의 다른 글
Memory allocation using implicit free block tracking and next-fit method (0) | 2023.04.10 |
---|---|
Memory allocation using implicit free block tracking and first-fit method (0) | 2023.04.10 |
RESTful API (0) | 2022.12.01 |
프로세스, 스레드, 비동기 (0) | 2022.11.22 |
CPU (0) | 2022.11.11 |