-
[CS study] 2022.05.30CS 2022. 5. 31. 00:18
TCP 4 way handshake
TCP의 연결만 알고 연결 해제는 알지 못했다.
3 way handshake 방식으로 연결을 하고 모든 통신이 끝난 후
- 클라이언트는 서버에 연결을 종료한다는 FIN 플래그를 보냄
- 서버는 FIN을 받고 받았다는 ACK를 보냄 이때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 됨
- 서버는 데이터를 모두 보냈다면 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보냄
- 클라이언트는 FIN 플래그를 받고 받았다는 ACK를 서버에게 보냄 아직 받지 못한 데이터가 있을 수도 있으므로 TIME_WAIT를 통해 기다림
서버는 ACK를 받은 후 소켓을 닫음, TIME_WAIT 시간이 끝나면 클라이언트도 닫음
4번의 통신이 완료되면 연결이 해제된다.
TLS/SSL handshake
HTTPS 통신에서 클라이언트와 서버 간 통신 전에 SSL 인증서로 신뢰성 여부를 판단하기 위해 연결하는 방식

TLS/SSL handshake - 클라이언트가 암호화된 정보 (버전, 암호 알고리즘, 압축방식)에 "client hello"메시지를 담아 보냄
- 서버는 받아서 세션 ID와 CA 공개 인증서를 "server hello" 메시지와 함께 담아 응답함 CA 인증서는 공개키를 담고 있음
- 클라이언트는 CA 인증서가 유효한지 CA 목록에서 확인함
- CA 인증서에 신뢰성이 확보되면 클라이언트는 난수 바이트를 생성하여 서버의 공개키로 암호화 난수 바이트는 대칭키를 정하는 데 사용이 되고 앞으로 서로 메시지를 통신할 때 암호화하는 데 사용됨
- 2번 단계에서 서버가 클라이언트 인증서를 함께 요구했다면 클라이언트의 인증서와 클라이언트의 개인키로 암호화된 임의의 바이트 문자열을 함께 보내준다
- 서버는 클라이언트의 인증서를 확인한 후 난수 바이트를 자신의 개인키로 복호화한 후 대칭 마스터 키 생성에 활용함
- 클라이언트는 handshake 과정이 완료되었다는 finished 메시지를 보내면서 지금까지 보낸 교환 내역들을 해싱 후 그 값을 대칭키로 암호화해서 담아 보냄
- 서버도 동일하게 교환 내용들을 해싱한 후 클라이언트에서 보내준 값과 일치하는지 확인 후 일치하면 마찬가지로 finished 메시지를 이번에 만든 대칭키로 암호화하여 보냄
- 클라이언트는 해당 메시지를 대칭키로 복호화하여 서로 통신이 가능한 신뢰받은 사용자인걸 확인하고 앞으로 클라이언트와 서버는 해당 대칭키로 데이터를 주고받음
로드 밸런싱(Load Balancing)

Load Balancing 둘 이상의 CPU or 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것
- 시간이 흐르며 웹사이트에 접속하는 인원이 급격히 늘어나게 되었다.
- 모든 트래픽을 감당하기에는 1대의 서버로는 부족해짐
- 대응 방안으로 하드웨어의 성능 자체를 향상하거나(Scale-up) 여러 대의 서버가 나눠서 일하도록 만드는 것(Scale-out)이 있음
- 하드웨어 향상의 비용이 비싸고 성능의 한계가 있음 또한 서버가 여러 대면 무중단 서비스를 제공하기 용이함
- 이때 서버에게 균등하게 트래픽을 분산시켜주는 것이 로드 밸런싱이다
- 로드 밸런싱은 분산식 웹 서비스로 여러 대에 부하를 나누어주는 역할을 함
- 사이트의 규모가 커질 때 웹 서버를 추가로 증설하면서 로드 밸런서로 관리해주면 웹 서버의 부하를 해결할 수 있다
- 결국은 늘어난 트래픽에 대응하여 부하를 분담하기 위함
로드 밸런서가 서버를 선택하는 방식
- 라운드 로빈(Round Robin): CPU 스케줄링의 라운드 로빈 방식 활용
- Least Connections: 연결 개수가 가장 적은 서버를 선택 (트래픽으로 인해 세션이 길어지는 경우 권장됨)
- Source: 사용자 IP를 해싱하여 분배 (특정 사용자가 항상 같은 서버로 연결되는 것을 보장)
로드 밸런서 장애 대비
- 서버를 분배하는 로드 밸런서에 문제가 생길 수 있기 때문에 로드 밸런서를 이중화하여 대비
'CS' 카테고리의 다른 글
[CS study] 2022.06.08 (0) 2022.06.08 [CS study] 2022.06.01 (0) 2022.06.01 [CS study] 2022.05.22 (0) 2022.05.22 [CS study] 2022.05.11 (0) 2022.05.12 [CS study] 2022.05.10 (0) 2022.05.10