TIL 220805

강지훈·2022년 8월 4일
0

프록시패턴
대상 객체에 접근하기 전 그 접근에 대한
흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴입니다.
이를 통해 객체의 속성, 변환 등을 보완하며 보안,데이터 검증, 캐싱 ,로깅에 사용합니다.
대표적으로 프록시 서버를 예로 들 수 있습니다.
프록시 서버
프록시 서버(proxy server)는 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가리킵니다.

프록시 서버로 쓰는 cloudeFlare
CloudeFlaer는 전 세계적으로 분산된 서버가 있고
이를 통해 어떠한 시스템의 콘텐츠 전달을 빠르게 할 수 있는 CDN 서비스입니다.
다음 그림처럼 사용자,크롤러,공격자가 자신의 웹 사이트에 접속하게 될 텐데, 이때 CloudFlare를
통해 공격자로부터 보호할 수 있습니다.

*DDOS는 짧은 기간 동안 네트워크에 많은 요청을 보내 네트워크를 마비시켜 웹 사이트의 가용성을 방해하는 사이버 공격 유형

CORS와 프론트엔드의 프록시서버
CORS(Cross-Origin Resource Sharing)는 서버가 웹 브라우저에서 리소스를 로드할 때 다른 오리진을 통해 로드하지 못하게 하는 HTTP 헤더 비간 메커니즘입니다.
프론트엔드 개발 시 프론트엔드 서버를 만들어서 백엔드 서버와 통신할 때 주로 CORS 에러를 마주치는데, 이를 해결하기 위해 프론트엔드에서 프록시 서버를 만들기도 합니다.

오리진
프로토콜과 호스트 이름, 포트의 조합을 말한다. 예를 들어
http://kangji.com:12010/test 라는 주소에서
오리진은
http://kangji.com:12010 을 뜻한다.

예를 들어 프론트엔드에서는 127.0.0.1:3000 으로
테스팅을 하는데 백엔드 서버는 127.0.0.1:12010
이라면 포트 번호가 다르기 때문에 CORS 에러가 나타납니다. 이때 프록시 서버를 둬서 프론트엔드 서버에서 요청되는 오리진을 127.0.0.1:12010으로 바꾸는 것이죠

TCP 3-WAY HANDSHAKE 4-WAY HANDSHAKE
TCP는 신뢰성을 확보할 때 '3-웨이 핸드셰이크'라는 작업을 진행합니다. (연결성립과정)
1.SYN 단계: 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보냅니다.
ISN은 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호를 말하며(예시로 12010을 들었습니다) 이는 장치마다 다를 수 있습니다.
2. SYN + ACK 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보냅니다.
3. ACK 단계: 클라이언트는 서버의 ISN_+ 1한 값인 승인번호를 담아 ACK를 서버에 보냅니다. 이렇게 3-웨이 핸드셰이크 과정 이후 신뢰성이 구축되고
데이터 전송을 시작합니다.
참고로 TCP는 이 과정이 있기 때문에 신뢰성이 있는 계층이라고 하며 UDP는 이 과정이 없기 때문에 신뢰성이 없는 계층이라고 합니다.

*SYN
SYNchronization의 약자, 연결 요청 플래그
ACKnowledgement의 약자, 응답 플래그
ISN initial sequence numbers의 약어,
초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호이다.

TCP가 연결을 해제할 때에는 4 웨이 핸드셰이크 과정이 발생합니다
1번: 먼저 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보냅니다.
그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다립니다.
2번: 서버는 클라이언트로 ACK라는 승인 세그먼트를 보냅니다. 그리고 CLOSE_WAIT 상태에 들어갑니다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어갑니다
3번: 서버는 ACK를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보냅니다.
4번: 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 됩니다. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제됩니다.

TIME_WAIT
이 과정 중 가장 눈여겨봐야 할 것은 TIME_WAIT 입니다. 그냥 연결을 닫으면 되지 왜 굳이 일정 시간 뒤에 닫을까요?
첫 번째는 지연 패킷이 발생할 경우를 대비하기 위함입니다. 패킷이 뒤늦게 도달하고 이를 처리하지 못한다면 데이터 무결성 문제가 발생합니다.

TIME_WAIT
소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태를 말하며 지연 패킷등의 문제점을 해결하는 데 쓰인다. OS마다 다를 수 있따.

데이터 무결성(data intergrity)
데이터의 정확성과 일관성을 유지하고 보증하는 것

profile
never stop

0개의 댓글