체크리스트
1. http 설명 가능?
2. http 통신 흐름 설명 가능?
3. https 설명 가능?
IP 주소 (Internet Protocol Address)
- 인터넷에 연결된 장치의 고유 주소
- 인터넷에 연결된 모든 pc는 ip를 가짐
- IPv4(32bit) 보편화 -> 대체할 버전은 IPv6(128bit)
Domain Name System (DNS)
- 도메인 네임 : ip 주소를 문자로 표현
- DNS : ip주소에 도메인 네임 할당하고 이를 관리하는 시스템
- 도메인 : URL

포트
- 운영체제 통신의 종단점
- ip주소를 통해 목적지 도달 후 어떤 프로세스에서 데이터 받을지 알아야할 때 쓰이는 것이 포트번호

DNS 서버에서 IP 정보 보내는 방법

회선 통신 / 패킷 통신
회선 통신
- 회선 교환(Circuit Switching) 방식
- 회선의 트래픽이나 이동 효율 전혀 고려하지 않은 채 미리 정하는 방식

패킷 통신
- 패킷 교환 (Packet Switching) 방식
- 미리 이동 경로 정하지 않고, 데이터를 패킷 이라는 작은 단위로 나눠 전송하는 방식
- 전송 전 쪼개지고, 수신지 도착했을 때 각 패킷의 고유 번호 순서대로 결합되어 원래 데이터로 완성
- 전송 당시 가장 효율적인 경로를 설정하여 최종 목적지까지 이동함
TCP/IP
IP
- 가장 효율적인 방법으로 전송
- 전달 여부나 순서 보장 안함
TCP
- 안전하게 전달
- IP 위에서 동작
- 전달, 순서 모두 보장
- 흐름제어 : 송신, 수신측의 데이터 처리 속도 차이 해결
- 혼잡제어 : 송신 측의 처리 속도 차이 해결
TCP handshake
- 3-way handshake
- 정확한 데이터 전송을 보장하기 위해 연결 설정
- 4-way handshake
TCP/IP
의 목적은 효율적으로 빠르게 (ip), 안전하게(tcp) 전달하려는 것
HTTP(HyperText Transfer Protocol)
- 클라이언트와 서버 간의 자원을 교환하기 위한 TCP/IP 기반 통신 프로토콜
- 단방향성 : 클라이언트 요청이 있어야만 서버 응답 가능
- 비연결성(connertionless) : 요청에 응답하면 연결 종료
- 실시간 통신 불가
- 웹소켓 사용 : TCP 기반 통신 프로토콜
- 웹소켓 이전에는 폴링, 롱폴링, 스트리밍 등을 사용해 실시간 처럼 보이게 하는 방식을 사용함
- 평문 통신으로 도청 위험
- 통신 상대 검증된 상대인지 확인하지 않기 때문에 위장이 가능
- 완전성 증명 어려워 변조 위험
HTTP 메소드(Method)와 상태코드(Status code)
http method
- 클라이언트가 웹 서버에게 요청의 목적이나 종류를 알리는 수단 (명시)
GET
, POST
, PUT
, PATCH
, DELETE
http status code
- 클라이언트가 보낸 요청 처리 상태를 응답에서 알려주기 위한 정보
- 400번대 클라이언트 오류
- 500번대 서버 오류
HTTP 통신흐름
- URL 주소 중 도메인 네임 부분을 DNS 서버에 검색하고, DNS 서버에서 해당 도메인 네임에 해당하는 IP주소 찾아옴
- URL정보와 찾아온 IP주소를 포함하는 HTTP 요청 메세지를 생성하여 TCP 프로토콜을 사용하여 인터넷 망을 통해 해당 IP주소의 컴퓨터로 전송
- 요청 메세지를 받은 컴퓨터(서버)는 웹 페이지 URL 정보 중 PATH와 HTTP Method에 맞는 액션을 취함
- HTTP 응답 메세지로 만들어지고 TCP 프로토콜을 사용하여 인터넷 망을 통해 요청했던 컴퓨터(클라이언트)로 전송
- 웹 브라우저에 의해 브라우저 렌더링 과정을 거쳐 화면에 출력
HTTPS

대칭키
- 암호화 및 복호화에 드는 비용 적음
- 키를 함께 사용하기 때문에 전달이 어려움
비대칭키
- 한 쌍의 두개의 키로 구성
- 공개키로 암호화 -> 개인키로 복호화
- 개인키로 암호화 -> 공개키로 복호화
- 보안성 뛰어남
- 구현 어려움, 암호화와 복호화 속도 느림
- 주로 전자서명과 메시지 송신에 사용
- 통신사 이메일 주민번호 앞자리 등으로 인증하는 것
HTTPS
- http의 보안(Secured)버전
- SSL / TLS 프로토콜 사용하여 HTTP 암호화하여 주고 받을 때 쓰는 통신 프로토콜
SSL/TLS Handshake
- 서비스를 서빙하는 서버가 CA로부터 CA 인증서를 발급받는다. [인증서 기간 만료까지 1회성]
- 서비스를 서빙하는 서버는 CA에 자신의 도메인 정보와 서버 측 공개 키를 보낸다.

- 인증기관은 받은 두 데이터를 자신의 개인키로 암호화한 CA 인증서를 서버로 보낸다.

- 브라우저에서 도메인을 쳐서 요청을 보내 클라이언트(브라우저)와 서버가 TCP 연결을 맺는다.
- 버는 브라우저가 보내준 Cipher Suite 중 하나를 고르고, 자신의 SSL/TLS 프로토콜 버전을 브라우저에게 알리면서, 서버 자신의 도메인에 대한 CA 인증서를 보낸다.

- 브라우저는 브라우저에 내장된 CA의 공개 키를 이용하여 CA 인증서를 복호화하여 인증서가 유효한지 검증한 후, 서버 측의 공개 키를 얻는다.

- 브라우저는 앞으로 서버와 통신하는데 있어 암호화를 위해 사용할 대칭 키를 만들고, 그 대칭 키를 사이트 공개 키로 암호화하여 서버로 보낸다.

- 서버는 자신의 개인 키를 사용하여 암호화된 것을 복호화하여 사용자 대칭 키를 얻어 낸다.

- 이렇게 얻은 대칭 키를 활용하여 서버와 클라이언트가 서로 데이터를 안전하게 암/복호화 하면서 통신할 수 있게 된다.

- http
클라이언트와 서버 간의 자원을 교환하기 위한 TCP/IP 기반 통신 프로토콜
- https
SSL/TLS 프로토콜을 사용해 HTTP를 암호화하여 주고 받을 때 쓰는 통신 프로토콜
- 브라우저에 naver.com 치면 어떤 일이?
- 웹 브라우저에 www.naver.com 입력.
- 사용자가 입력한 URL 주소 중 도메인 네임 부분을 DNS 서버에 검색하고, DNS서버에서 해당 도메인 네임에 해당하는 IP주소를 찾아온다.
- HTTP 프로토콜을 사용하여 페이지 URL정보와 찾아온 IP주소를 포함하는 HTTP 요청 메세지를 생성하고, 생성된 HTTP 요청 메세지는 TCP 프로토콜을 사용하여 인터넷 망을 통해 해당 IP주소의 컴퓨터로 전송된다.
- HTTP 요청 메세지를 받은 컴퓨터(서버)는 웹 페이지 URL 정보 중 PATH와 HTTP Method에 맞는 액션을 취한다. (여기서는 naver 페이지를 띄우기 위해 필요한 html 등의 리소스를 찾을 것이다.)
- 생성된 응답 데이터는 또 다시 HTTP 프로토콜을 사용하여 HTTP 응답 메세지로 만들어지고 TCP 프로토콜을 사용하여 인터넷 망을 통해 요청했던 컴퓨터(클라이언트)로 전송된다.
- 도착한 HTTP 응답 메세지는 웹 브라우저에 의해 브라우저 렌더링 과정을 거쳐 화면에 출력되어 사용자가 볼 수 있게 된다.