클라이언트와 서버의 통신 과정
웹 환경에서 클라이언트와 서버의 통신 과정 정리
1. DNS Query¶
클라이언트가 DNS Resolver로 검색 요청을 보내고 DNS Resolver가 실제 서비스 서버의 IP를 탐색해서 알려주는 과정을 DNS Query라고 하며, 수행 방식에 따라 Iterative, Recursive 두 가지 방식이 있다.
DNS 시스템을 구성하는 요소들은 아래와 같다.
- Root DNS: 전 세계 영역을 다루는 DNS, 현재는 전 세계에 13개 존재
- Top Level DNS, TLD name server:
.kr
,.com
수준의 DNS - Second Level DNS:
.co
수준의 DNS - DNS Resolver
- 클라이언트 사이드의 DNS 역할 수행
- DNS 쿼리 시작 및 수행 관리
Recursive DNS Query¶
---
title: Recursive DNS Query
---
sequenceDiagram
Client ->> DNS Resolver : request
activate Client
activate DNS Resolver
alt if data in DNS Resolver Cache
DNS Resolver -->> Client : service server IP
else if not data in DNS Resolver Cache
DNS Resolver ->> Root DNS : request TLD IP
Root DNS -->> DNS Resolver : return TLD IP
DNS Resolver ->> Top Level DNS : request Second Level DNS IP
Top Level DNS -->> DNS Resolver : return Second Level DNS IP
DNS Resolver ->> Second Level DNS : request service server IP
Second Level DNS -->> DNS Resolver : return service server IP
DNS Resolver -->> Client : service server IP
deactivate DNS Resolver
end
Client ->> service server : request
deactivate Client
Tip
Iterative DNS Query 방식에 비해 응답 속도가 빠르다는 장점이 있으나, 부하가 심해 공격에 취약한 단점이 있다.
Iterative DNS Query¶
---
title: Iterative DNS Query
---
sequenceDiagram
Client ->> DNS Resolver : request
activate Client
activate DNS Resolver
alt if data in DNS Resolver Cache
DNS Resolver -->> Client : service server IP
else if not data in DNS Resolver Cache
DNS Resolver ->> Root DNS : request TLD IP
Root DNS -->> DNS Resolver : return TLD IP
DNS Resolver -->> Client : return TLD IP
deactivate DNS Resolver
Client ->> Top Level DNS : request Second Level DNS IP
Top Level DNS -->> Client : return Second Level DNS IP
Client ->> Second Level DNS : request service server IP
Second Level DNS -->> Client : return service server IP
end
Client ->> service server : request
deactivate Client
2. HTTP/HTTPS¶
3-way handshake¶
HTTP 통신을 위해 TCP 헤더에 있는 SYN, ACK 비트를 통해 연결을 확인하는 과정을 3-way handshake라고 한다.
---
title: 3-way handshake
---
sequenceDiagram
Client ->> Server : SYN
Note over Client, Server : TCP 헤더에 SYN 플래그 지정한 세그먼트 발송
Server -->> Client : SYN-ACK
Note over Client, Server : 연결 수락 시 SYN과 ACK 플래그 지정 세그먼트 발송
Client ->> Server : ACK
Note over Client, Server : 연결 수락 세그먼트 수신 확인
Client ->> Server : HTTP request
Server -->> Client : HTTP response
- SYN: SYNchronize
- SYN-ACK: SYNchronize-ACKnowledgement
- ACK: ACKnowledgement
SSL handshake¶
HTTPS 통신을 위해서는 보안 절차(HTTP Secure)가 포함된 SSL handshake 절차를 진행해야 한다.
---
title: SSL handshake
---
sequenceDiagram
Client ->> Server : Client Hello
Note over Client, Server : 사용할 암호화 알고리즘 목록(cipher sweet)과 난수, 세션 ID 등을 전송
Server -->> Client : Server Hello
Note over Client, Server : 암호화 알고리즘 중 사용할 알고리즘 선택 결과, 난수, 세션 ID 등을 전송
Server -->> Client : Certificate
Note over Client, Server : 인증서를 전송하며 암호화에 사용할 공개키 전송
Server -->> Client : Server Key Exchange
opt
Server -->> Client : Certificate Request
end
Server -->> Client : Server Hello Done
opt
Client ->> Server : Certificate
end
Client ->> Server : Client Key Exchange
opt
Client ->> Server : Certificate Verify
end
Client ->> Server : Change Cipher spec
Client ->> Server : Finished
Server -->> Client : Change Cipher spec
Server -->> Client : Finished
Client ->> Server : HTTPS request
Server -->> Client : HTTPS response
3. Web Server/WAS¶
클라이언트가 서버로 요청을 보낼 경우 웹서버가 정적 요청을 처리하고, Web Application Server와 TCP/IP 통신을 통해 복잡한 로직을 처리하여 처리 결과를 회신함
---
title: How response working with Web Server, WAS
---
sequenceDiagram
Client ->> Web Server : request
activate Client
activate Web Server
Web Server -->> Client : static response
Web Server ->> WAS(WSGI) : request
WAS(WSGI) -->> Web Server : response
Web Server -->> Client : response
deactivate Web Server
deactivate Client
Note
과거에는 웹서버가 클라이언트의 요청을 접수한 후에 복잡한 로직을 처리하기 위해 Common Gateway Interface(CGI)를 통해 고급언어로 작성된 프로그램을 실행하고 출력 결과를 회신하였다.
그러나 가상 머신을 기반으로 실행되는 언어로 작성된 프로그램을 매 요청마다 새롭게 실행하는 것은 처리속도가 너무 느리기 때문에 해당 언어로 개발된 애플리케이션을 상시 실행해두는 Web Application Server(WAS), Web Server Gateway Interface(WSGI) 등의 방식이 개발되었다.