이번 유닛에서는 컴퓨터를 이용하다 보면 흔히 접할 수 있는 IP, 캐시가 무엇을 뜻하는지 살펴보고, 이를 네트워크 통신과 관련하여 더욱 깊이 탐구하였다.
그리고 네트워크 흐름을 이해하기 위해서는 웹 통신을 가능하게 한 HTTP 통신의 흐름을 파악하는 것이 중요한데, 이를 위해서 IP를 시작으로 TCP/UDP 그리고 HTTP까지 이르는 전체 통신 흐름을 살펴보았다.
IP는 지정한 IP 주소(IP Address)에 패킷(Packet)이라는 통신 단위로 데이터 전달을 한다.
IP 패킷에서 패킷은 pack과 bucket이 합쳐진 단어로 소포로 비유할 수 있다. IP 패킷은 이를 데이터 통신에 적용한 것이라고 보면 된다.(출발지 IP, 목적지 IP와 같은 정보가 포함되어있다.)
IP의 한계
- 비연결성
-> 패킷을 받은 대상이 없거나 서비스 불능 상태여도 패킷 전송- 비신뢰성
-> 중간에 패킷이 사라질 수 있음, 패킷의 순서를 보장할 수 없음
TCP
두 개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 중요한 네트워크 프로토콜이다.
- 연결지향형 프로토콜
- 전송 순서 보장
- 데이터 수신 여부 확인함
- 신뢰성 높지만 속도 느림
UDP
IP를 사용하는 네트웍 내에서 컴퓨터들 간에 메시지들이 교환될 때 제한된 서비스만을 제공하는 통신 프로토콜이다.
- 비 연결지향형 프로토콜
- 전송 순서 보장 x
- 데이터 수신 여부 확인하지 않음
- 신뢰성 낮지만 속도 빠름
해당 계층 모델은 ISO(International Organization for Standardization)라고 하는 국제표준화기구에서 1984년에 제정한 표준 규격이다.
- 1계층 - 물리 계층: OSI 모델의 맨 밑에 있는 계층으로서, 시스템 간의 물리적인 연결과 전기 신호를 변환 및 제어하는 계층입니다. 주로 물리적 연결과 관련된 정보를 정의합니다. 주로 전기 신호를 전달하는데 초점을 두고, 들어온 전기 신호를 그대로 잘 전달하는 것이 목적입니다.
ex) 디지털 또는 아날로그로 신호 변경- 2계층 - 데이터링크 계층: 네트워크 기기 간의 데이터 전송 및 물리주소(ex) MAC 주소)를 결정하는 계층입니다. 물리 계층에서 들어온 전기 신호를 모아 알아 볼 수 있는 데이터 형태로 처리 합니다. 이 계층에서는 주소 정보를 정의하고 출발지와 도착지 주소를 확인한 후, 데이터 처리를 수행합니다.
ex) 브리지 및 스위치, MAC 주소- 3계층 - 네트워크 계층: OSI 7 계층에서 가장 복잡한 계층 중 하나로서 실제 네트워크 간에 데이터 라우팅을 담당합니다. 이때 라우팅이란 어떤 네트워크 안에서 통신 데이터를 짜여진 알고리즘에 의해 최대한 빠르게 보낼 최적의 경로를 선택하는 과정을 라우팅이라고 합니다.
ex) IP 패킷 전송- 4계층 - 전송 계층: 컴퓨터간 신뢰성 있는 데이터를 서로 주고받을 수 있도록 하는 서비스를 제공하는 계층입니다. 하위 계층에서 신호와 데이터를 올바른 위치로 보내고 신호를 만드는데 집중했다면, 전송 계층에서는 해당 데이터들이 실제로 정상적으로 보내지는지 확인하는 역할을 합니다. 네트워크 계층에서 사용되는 패킷은 유실되거나 순서가 바뀌는 경우가 있는 데, 이를 바로 잡아주는 역할도 담당합니다.
ex) TCP/UDP 연결- 5계층 - 세션 계층: 세션 연결의 설정과 해제, 세션 메시지 전송 등의 기능을 수행하는 계층입니다. 즉, 컴퓨터간의 통신 방식에 대해 결정하는 계층이라고 할 수 있습니다. 쉽게 말해, 양 끝 단의 프로세스가 연결을 성립하도록 도와주고, 작업을 마친 후에는 연결을 끊는 역할을 합니다.
- 6계층 - 표현 계층: 응용 계층으로 전달하거나 전달받는 데이터를 인코딩 또는 디코딩하는 계층입니다. 일종의 번역기 같은 역할을 수행하는 계층이라고 볼 수 있습니다.
ex) 문자 코드, 압축, 암호화 등의 데이터 변환- 7계층 - 응용 계층: 최종적으로 사용자와의 인터페이스를 제공하는 계층으로 사용자가 실행하는 응용 프로그램(ex) Google Chrome)들이 해당 계층에 속합니다.
ex) 이메일 및 파일 전송, 웹 사이트 조회
HTTP/1.1, HTTP/2는 TCP 기반이며 HTTP/3는 UDP 기반 프로토콜이다.
HTTP의 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(Stateless), 비연결성(Connectionless)
- HTTP 메시지
- 단순함, 확장가능
HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담기 위해 사용한다.
요청(Request)에서 사용되는 헤더
일반적으로 잘 사용하지 않음
검색 엔진에서 주로 사용
요청에서 사용
현재 요청된 페이지의 이전 웹 페이지 주소
A → B로 이동하는 경우 B를 요청할 때 Referer: A를 포함해서 요청
Referer를 사용하면 유입경로 수집 가능
클라이언트의 애플리케이션 정보(웹 브라우저 정보, 등등)
통계 정보
어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
요청에서 사용
필수 헤더
하나의 서버가 여러 도메인을 처리해야 할 때 호스트 정보를 명시하기 위해 사용
여기서 요청을 보낸 주소와 받는 주소가 다르면 CORS 에러가 발생한다.
응답 헤더의 Access-Control-Allow-Origin와 관련
“토큰의 종류(ex) Basic) + 실제 토큰 문자”를 전송
응답(Response)에서 사용되는 헤더
응답에서 사용
ex)
Server: Apache/2.2.22 (Debian)
응답에서 사용
ex)
Date: Tue, 15 Nov 1994 08:12:31 GMT
-Location: 페이지 리디렉션
웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 리다이렉트(자동 이동)
201(Created): Location 값은 요청에 의해 생성된 리소스 URI
-Allow: 허용 가능한 HTTP 메서드
405(Method Not Allowed)에서 응답에 포함
ex)
Allow: GET, HEAD, PUT
503(Service Unavailable): 서비스가 언제까지 불능인지 알려줄 수 있음
HTTPS란?
HTTPS는 HTTP Secure의 약자로, 단어 뜻 그대로 기존의 HTTP 프로토콜을 더 안전하게(Secure) 사용할 수 있음을 의미한다.
HTTP보다 안전한 이유는 바로 HTTPS는 HTTP 요청과 응답으로 오가는 내용을 암호화하기 때문이다.
암호화 방식
대칭 키 암호화 방식은 하나의 키만 사용한다. 암호화할 때 사용한 키로만 복호화가 가능하다.
두 개의 키를 사용해야하는 공개 키 방식에 비해서 연산 속도가 빠르다는 장점이 있다. 하지만 키를 주고 받는 과정에서 탈취 당했을 경우에는 암호화가 소용없어지기 때문에 키를 관리하는데 신경을 많이 써야 한다.
비대칭 키 암호화 방식은 두 개의 키를 사용한다. 암호화할 때 사용한 키와 다른 키로만 복호화가 가능하다.
여기서 두 개의 키를 각각 공개 키, 비밀 키 라고 부른다. 여기서 공개 키는 이름 그대로 공개되어 있기 때문에 누구든지 접근 가능하다. 보통 요청을 보내는 사용자가 공개 키를, 요청을 받는 서버가 비밀 키를 가진다. 이 때, 비밀 키는 서버가 해킹당하는 게 아닌 이상 탈취되지 않는다.
HTTPS는 HTTP 통신을 하는 소켓 부분에서 SSL 혹은 TLS라는 프로토콜을 사용하여 서버 인증과 데이터 암호화를 진행한다.