HTTPS의 원리 상세 설명
a. SSL/TLS 프로토콜
HTTPS는 SSL/TLS 프로토콜 위에 HTTP를 구현한 것입니다. SSL/TLS는 대칭키 암호화와 공개키 암호화를 조합하여 통신의 보안을 유지합니다.
b. Handshake 과정
- Client Hello:
- 클라이언트는 가능한 암호화 방식과 SSL/TLS 버전을 서버에 전송합니다.
- 클라이언트가 생성한 임시 공개키도 전송됩니다.
- Server Hello:
- 서버는 선택된 암호화 방식과 SSL/TLS 버전을 클라이언트에게 응답합니다.
- 서버의 디지털 인증서도 함께 전송됩니다.
- Key Exchange:
- 클라이언트는 서버의 공개키를 사용하여 대칭키를 암호화하고, 이를 서버에 전송합니다.
- 서버는 개인키를 사용하여 대칭키를 복호화합니다.
- Secure Connection:
- 대칭키를 사용하여 데이터를 암호화하고 전송합니다.
- 이후 모든 통신은 이 대칭키를 이용해 암호화됩니다.
TCP 3 Way Handshake 상세 설명
TCP 3-way Handshake는 TCP 연결을 초기화하기 위해 사용되며, 다음과 같은 이유로 필요합니다.
1. 연결 확립
3-way Handshake를 통해 클라이언트와 서버 모두 연결을 확립할 준비가 되었음을 확인합니다. 이 과정을 통해 양측이 데이터 전송을 시작할 시점을 동기화합니다.
2. 초기 Sequence Number 동기화
TCP는 각 패킷이 순서대로 도착하도록 Sequence Number를 부여합니다. 3-way Handshake 과정에서 양측은 초기 Sequence Number를 교환하여, 이후 패킷의 순서를 정확히 판단할 수 있습니다.
3. 리소스 할당
서버는 클라이언트로부터 연결 요청이 올 때마다 새로운 연결을 위한 자원을 할당합니다. 3-way Handshake가 완료되어야만, 이러한 리소스 할당이 유효하다고 판단됩니다.
4. 파라미터 교환
3-way Handshake 과정에서 양측은 TCP 연결에 사용될 여러 파라미터(예: 윈도우 크기)를 교환합니다. 이를 통해 양측은 서로 다르게 구성된 네트워크 환경에서도 효율적인 데이터 전송이 가능합니다.
5. 신뢰성 확보
만약 어떤 이유로 초기에 전송된 패킷이 유실되면, 3-way Handshake를 통해 이를 감지하고, 연결을 재시도할 수 있습니다. 이러한 방식으로 TCP는 네트워크의 신뢰성을 확보합니다.
요약
3-way Handshake는 TCP 연결의 안정성, 신뢰성을 보장하며, 효율적인 데이터 통신을 위한 준비 과정을 수행합니다. 이 과정 없이 데이터 전송을 시작하면, 패킷 유실, 순서 문제, 리소스 할당 문제 등이 발생할 수 있습니다.
a. SYN (Step 1)
- 클라이언트는 서버에게 초기 Sequence Number와 함께 SYN 패킷을 보냅니다.
b. SYN-ACK (Step 2)
- 서버는 클라이언트의 Sequence Number에 1을 더한 값과, 서버 자체의 초기 Sequence Number를 함께 SYN-ACK 패킷으로 응답합니다.
c. ACK (Step 3)
- 클라이언트는 서버의 Sequence Number에 1을 더한 값을 ACK 패킷과 함께 보냅니다.
- 이 시점에서 TCP 연결이 완전히 확립됩니다.
TCP와 UDP 상세 비교
a. TCP
- Flow Control: 윈도우 기반의 흐름 제어를 통해 데이터의 흐름을 관리합니다.
- Congestion Control: 네트워크 혼잡 시 데이터 전송률을 조절합니다.
- Error Recovery: 오류 패킷이 감지되면 재전송을 수행합니다.
- Ordered Packets: 패킷 순서가 보장되며, 도착 순서가 다르면 재정렬합니다.
b. UDP
- No Connection: 연결 설정 및 해제 과정이 없어서 오버헤드가 적습니다.
- No Guarantee: 패킷의 순서, 도착, 에러 복구 등이 보장되지 않습니다.
- Fast: 오버헤드가 적고, 보장되지 않는 특성 때문에 전송 속도가 빠릅니다.
CORS 상세 설명
a. Preflight Request
- 복잡한 요청의 경우, 실제 요청 전에 브라우저는 사전 요청(Preflight Request)를 보내어 서버의 허용 여부를 확인합니다.
- 이 요청은
OPTIONS 메서드를 사용하며, 서버는 Access-Control-Allow-Methods와 Access-Control-Allow-Headers 등의 헤더를 포함한 응답을 보냅니다.
b. Implementation
- 서버는 응답 헤더에
Access-Control-Allow-Origin 등의 CORS 관련 헤더를 포함시켜야 합니다.
- 웹 서버 소프트웨어나 백엔드 코드에서 이러한 헤더를 설정할 수 있습니다.
- 특정 출처, 메서드, 헤더를 허용하거나, 인증 정보를 포함한 요청을 허용할 수도 있습니다.