HTTP 프로토콜은 클라이언트의 요청과 서버의 응답으로 데이터를 주고 받는다. 클라이언트는 서버에게 요청하는 데이터의 정보 등과 함께 요청의 목적이나 종류를 알리는 수단인 HTTP Method를 HTTP Request Message에 담아 요청을 보낸다.
존재하는 자원에 대한 요청
새로운 자원을 생성
HTTP 프로토콜은 텍스트 교환 방식이기 때문에 GET, POST Message 모두 보안에 취약하다. 이러한 보안 문제를 해결해주는 것이 바로 HTTPS이다.
HTTP: TCP ▶ HTTP
HTTPS: TCP ▶ SSL ▶ HTTP
HTTPS는 SSL 프로토콜을 추가하여 접속한 사이트가 신뢰할 수 있는 사이트인지 검증, 요청 데이터를 암호화하여 전송한다.
= TLS(Transport Layer Security)
전송 데이터를 암호화하여 신뢰할 수 있는 인터넷 연결이 가능하게 해주는 프로토콜
SSL은 대칭키, 비대칭키를 암호화 방식으로 채택했다.
1) 키의 사전 공유
▶ 공격자가 중간에서 가로챌 위험이 있고, 사용자가 많아지면 관리할 키가 많아짐
2) 키 배포 센터
▶ 사용자가 많아지면 키 배포 센터의 부하가 커지고, 키 배포 센터에 문제가 발생하면 사용자들의 암호화 통신에 문제가 생김
3) Diffie-hellman 키 교환
▶ 비밀키를 계산하기 어려울 수 있고, 사용자 간의 인정 과정이 없어 중간자 공격에 취약
4) 비대칭키 사용
두 개의 키로 암호화와 복호화
: 공개키(Public key)와 개인키(Private Key)
1) 공개키 암호화
공개키로 암호화하고 개인키로 복호화하는 방식
▶ 개인키로만 데이터 복호화가 가능하기 때문에 데이터의 보안을 강화할 때 사용
2) 전자 서명
개인키로 암호화하고 공개키로 복호화하는 방식
▶ 데이터의 보안에는 취약하나 보낸 사람이 확실(개인키)하기 때문에 사용자 인증 가능 (사용자 A의 공개키를 아는 사용자들은 모두 복호화가 가능)
👀 공개키를 공개해도 되는 이유
공개키를 통해 개인키를 찾을 수 없다고 판단하기 때문
실제로는 대칭키와 공개키 방식을 함께 사용
: 공개키 방식은 시간이 오래 걸리고 리소스를 더 많이 요구하기 때문
1) Server가 Key 생성 (Public Key - Private Key)
2) Server가 CSR(인증 서명 요청서) 생성(Public Key + Server info)하여 CA에 전송
3) CA가 SSL 인증서(Server info를 Private Key로 암호화하여) 발급
4) Server의 SSL 인증서 획득
CA(Certificate Authority): 인증서 발급 기관. 신뢰성이 엄격하게 공인된 기업들만 참여할 수 있음
1) Client가 Server에게 SYN 패킷 전송(접속 요청) 후 SYN_SENT 상태(SYN/ACK 응답 대기)
2) Server는 ACK, SYN flag 패킷 전송(요청 수락) 후 SYN_RECEIVED 상태(ACK 응답 대기)
3) Client가 Server에게 ACK 패킷 전송
이 과정 이후 연결이 생성되고 데이터 통신 가능
1) TCP 연결이 완료되면 Client가 Client Hello 수행
2) Server는 Client Hello 패킷을 받고 Client에게 Server Hello 수행
3) Client는 Premaster Secret 생성: Premaster Secret=Session Key
세션키를 통해 HTTPS 통신 가능 (SSH Handshake 단계까지는 공개키 방식, 이후 HTTPS 통신은 대칭키 방식 사용)
출처:
(위에 내용이 있기 때문에 간단히 그림으로 대체 하겠습니당)
1) 1단계: Client가 연결 종료를 요청하는 FIN 패킷 전송
2) 2단계: Server는 FIN에 대해 확인 패킷 ACK 전송
4) 3단계: 데이터 전송이 끝나면 Client에게 FIN 패킷 전송
5) 4단계: Client는 FIN에 대한 확인 패킷 ACK 전송
6) Server는 ACK 패킷을 받았기 때문에 연결을 종료
7) Client는 아직 도착하지 못한 패킷을 염두하여 TIME_WAIT 상태로 대기
8) 일정 시간이 지나면 Client도 연결 종료
동일한 컴퓨터 내에서 통신하고 있는 애플리케이션을 식별할 때 사용하는 애플리케이션 주소
신뢰성있는 바이트 스트림 전송을 위한 프로토콜
Transport 계층의 패킷: 세그먼트
패킷
- 네트워크에서 전송되는 데이터의 단위
- 네트워크 계층(3)에서 정의되는 데이터의 단위
👀 네트워크 계층의 데이터그램을 패킷이라고 부르는 이유
패킷 교환 방식에서 라우터가 패킷의 경로를 확인할 때 데이터그램의 헤더의 목적지 IP를 사용하기 때문
1) TCP 연결 확립: 3-way Handshake
2) 데이터 전송
3) TCP 연결 해제: 4-way Handshake
데이터 송신 후 수신자에게서 응답이 올 때까지 기다린다면 패킷 전송이 지연됨
▶ 흐름 제어를 통해 전송 효율 향상
윈도우 사이즈(수신 가능한 버퍼의 크기)
: 확인 응답을 기다리지 않고 송신할 수 있는 데이터의 크기, 한 번에 전송할 수 있는 전체 패킷의 크기
호스트 간 연결 설정 없이 IP 데이터그램을 캡슐화하여 전송하는 프로토콜
1) 비신뢰성, 비연결성
출처:
도메인 이름을 사용했을 때 입력한 도메인을 실제 네트워크 상에서 사용하는 IP 주소로 바꾸고 해당 IP 주소로 접속하는 계층 구조 시스템
Domain Name: 숫자로만 구성된 IP 대신 사용할 수 있는 인터넷 주소
사용자가 'www.naver.com'을 주소창에 치면
1) 웹 브라우저는 local DNS server에게 도메인 이름에 대한 ip 주소 요청
2) local DNS server는 root DNS server에게 ip 주소 요청, root DNS Server에게 해당 도메인에 대한 정보가 없을 경우 TLD server의 주소를 전달
3) local DNS server는 TLD server에게 ip 주소 요청, TLD server에게 해당 도메인에 대한 정보가 없을 경우 하위 level의 DNS server 주소 반환
4) local DNS server는 도메인에 대한 ip 주소를 받을 때까지 이 과정을 반복(Iterative Query, Recursive Query)하고, 주소를 받으면 이 ip 주소를 캐싱한 후 웹 브라우저에게 전달
사용자가 주소창에 도메인 주소를 입력하면 DNS는 도메인의 정보를 조회하는데, 이때 IP 주소를 여러 대의 서버 IP 리스트 중에서 라운드 로빈 형태로 랜덤하게 하나 또는 여러 개를 선택해 사용자에게 알려줌
▶ 웹 사이트에 접속하는 다수의 사용자는 여러 개의 웹 서버에 나뉘어 접속하게 되면서 서버의 부하가 분산
부하 분산을 위해 서버의 수를 늘리기 위해서는 그만큼의 공인 IP가 필요하다.
모바일의 경우 특정 프록시 서버(캐리어 게이트웨이)를 경유하는데 같은 프록시 서버를 경유하는 접속은 항상 같은 서버로 접속된다. 또한 PC의 경우에도 DNS 질의 결과를 브라우저가 캐싱하기 때문에
균등 부하 분산이 어려울 수 있다.
DNS 서버는 웹 서버의 부하나 접속자 수 등을 감지할 수 없기 때문에 웹 서버가 다운되어도 이를 알지 못한 채 사용자에게 주소를 제공한다.
AP 서버에 Virtual IP를 부여하여 다중화를 구현하는 방식
각각의 웹 서버에 가중치를 주어 분산 비율을 변경하는 방식
접속 클라이언트 수가 가장 적은 서버를 선택하는 방식
출처:
url에 입력된 값을 분석하여그 의미에 따라 HTTP Request Message를 생성
브라우저 내부에 존재하는 HSTS List에 해당 도메인이 존재하면 HTTPS Protocol로, 존재하지 않으면 요청 Protocol로 요청을 보냄
HSTS(Http Strict Transport Security)
: web site에 접속할 때 강제적으로 HTTPS Protocol로 접속하게 하는 기능
해당 사이트가 HTST 기능을 지원한다면 브라우저에 내장된 HSTS List에 해당 사이트 도메인과 함께 도메인 정보를 저장해두고, 다음에 그 사이트에 접속할 때에는 HTTPS 프로토콜로 접속 요청을 보냄
DNS 서버에게 IP 주소를 요청하여 도메인을 IP 주소로 변환
url의 분석 결과를 토대로 HTTP Request Message를 만들어 웹 서버에게 전송
LAN 어댑터가 송신한 프레임은 스위칭 허브를 경유하여 인터넷 접속용 라우터에 도착하고, 라우터는 패킷을 프로바이더에 전달하여 인터넷으로 넣어줌
프로바이더(POP, Point Of Presence)는 인터넷 입구의 액세스 회선을 통해 온 패킷을 다른 POP으로 전달, 패킷은 목적지를 향해 이동
패킷이 웹 서버 측 LAN의 방화벽에 도착하면 방화벽, 캐시 서버가 패킷을 검사하여 웹 서버 안에 넣음
출처: