TCP와 UDP의 차이점과 각각의 사용 사례는?
TCP(Transmission Control Protocol) | UDP(User Datagram Protocol) | |
연결 설정 | 연결 지향적, 3-way handshake를 통해 연결을 설정 후 데이터 전송 | 비연결형, 데이터 전송 전 연결 설정이 필요 없음 |
전송 속도 | 상대적으로 느리다. 왜냐하면 클라이언트에서 계속 데이터를 보내는게 아니라 서버에서 ACK와 다음 패킷 번호를 줄 때까지 기다렸다가 보내는 점과 윈도우 크기 이상은 보내지 않도록 제한하기 때문이다. | 상대적으로 빠르다. 단순한 구조로 빠른 데이터 전송 |
데이터 패킷 크기 | 세그먼트가 크고, 각 패킷마다 헤더가 포함되어 있다 (20바이트 이상) | 데이터그램이 크기가 작고, 헤더 크기도 작은 편 (8바이트) |
흐름 제어 | 윈도우 크기가 정해져 있기 때문에 흐름과 속도를 제어를 한다. | 흐름 제어가 없어서 네트워크의 혼잡이 발생할 수 있음 |
메모리 사용 | 연결 설정, 재전송, 순서 보장을 위한 버퍼와 세그먼트 관리 등 메모리를 더 많이 사용 | 상대적으로 메모리 사용이 적음, 간단한 데이터그램 처리만 필요 |
패킷 전달 및 확인 | ACK(acknowledgement) 패킷을 통해 각 패킷의 수신을 확인하고 손실된 패킷을 재전송 | ACK가 없으며, 패킷의 손실을 확인하거나 복구하지 않음 |
패킷 크기 관리 | MSS, 윈도우 크기, 혼잡 제어를 사용하여 패킷 크기 조절 | 패킷 크기가 고정되어 있으며, 흐름 제어나 크기 조절이 없음 |
네트워크 계층에서의 처리 | 네트워크 인터페이스 카드(NIC)에서 세그먼트의 전송을 처리하고, 각 세그먼트가 정확한 순서로 도달하도록 처리 | 네트워크 인터페이스 카드(NIC)**에서 각 데이터그램을 바로 전송하며, 순서 보장이 없음 |
소켓 상태 | 소켓 연결 상태를 유지하며, 연결이 끊어질 때까지 상태를 추적 (3-way handshake) | 소켓 상태를 유지하지 않음, 데이터를 보내면 즉시 종료 |
하드웨어 리소스 활용 | TCP 소켓의 상태 추적, 패킷 재전송, 흐름 제어 등을 위한 메모리와 CPU 자원 소모 | 패킷을 전송하는 데 필요한 최소한의 하드웨어 리소스 사용 |
타임아웃 및 재전송 | 타임아웃이 발생하면 패킷을 재전송하는 메커니즘이 있음 (타이머와 재전송 큐 사용) |
타임아웃 및 재전송 기능 없음, 데이터 손실시 재전송 안 됨 |
하드웨어적 제약 | 더 많은 메모리와 CPU 자원을 소비, 버퍼링 및 상태 추적을 위한 하드웨어 리소스를 사용 | 상대적으로 적은 메모리와 CPU 자원 사용, 단순한 패킷 전송 |
사용사례 | 웹사이트 접속 (HTTP, HTTPS), 파일 전송 (FTP, SFTP), 원격 접속 (SSH, Telnet) | 실시간 스트리밍 (유튜브, 넷플릭스, 트위치), 온라인 게임 (롤, 배틀그라운드, 오버워치), VoIP (카카오톡 음성 통화, 줌, 디스코드) |
HTTP와 HTTPS의 차이점은?
https 암호화 순서: CPU에서 이루어진다.
* 대칭키와 비대칭키
대칭키: 클라이언트와 서버 모두 같은 키를 사용해서 암호화 하고 그 키를 사용해서 복호화 한다.
장점: 속도가 빠름
단점: 키를 공유하는 과정에서 탈취되면 정보가 해킹됨
예제: AES, DES, 3DES
비대칭키: 공개키(Public Key)와 비밀키(Private Key) 한 쌍을 사용하여, 공개키로 암호화하면, 비밀키로만 복호화가 가능하다.
장점: 키를 공유할 필요 없음 (공개키는 누구나 볼 수 있음)
단점: 속도가 느림 (수학적으로 복잡한 연산을 수행해야 함)
예제: RSA, ECC, DSA
1. 클라이언트: 브라우저를 처음 설정할 때 RSA 키 쌍(공개키, 비밀키)을 생성한다. 브라우저에만 키쌍이 존재.
2. 클라이언트: 클라이언트가 서버에 HTTPS 요청을 보내기 전에, TLS/SSL 핸드셰이크를 요청한다.
3. 서버: 서버가 서버의 공개키, 서버의 비밀키를 생성한다
4. 서버 -> 클라이언트로 서버의 공개키, 서버의 비밀키를 공유한다.
5. 클라이언트: 서버의 공개키로 Pre-master secret(클라이언트와 서버가 대칭 키(AES) 암호화에 사용할 세션 키를 안전하게 생성하기 위한 공통 비밀 값) 암호화
6. 서버의 비밀키로 Pre-master secret 복호화
7. 클라이언트와 서버는 Pre-master secret을 바탕으로 동일한 AES 세션 키를 생성
8. 이후부터는 AES세션키를 이용한 통신이 진행됨
TLS 핸드셰이크 과정에서 세션 키(AES)가 생성된 이후 id, pw로 로그인 시:
1. 클라이언트는 AES 세션 키를 사용하여 ID와 PW를 암호화하고, 이를 서버로 전송
2. 서버는 AES 세션 키를 사용하여 암호화된 ID와 PW를 복호화하고, 로그인 처리를 진행
네이버 뉴스를 보다가 웹툰을 봐도 같은 AES키가 계속 유지된다
웹 브라우저는 HTTP Keep-Alive와 같은 기능을 통해 서버와의 연결을 유지합니다. 이 방식으로 한 번 연결이 성립되면, 여러 요청에 대해 같은 연결을 사용할 수 있습니다. 따라서 세션이 끊어지지 않는 한, 세션 키 (AES)도 계속 유효하다. 반면, 서버는 세션 정보를 서버 메모리 또는 세션 스토리지에 일시적으로 저장합니다. 이 세션 정보에는 세션 ID, 세션 키 (AES), 세션 상태(로그인 여부 등) 등이 포함됩니다.세션 키는 일반적으로 서버의 메모리에만 저장되며, 디스크나 파일 시스템에 저장되지 않습니다. 이는 보안 상의 이유로 세션 키가 유출되거나 오랫동안 저장되지 않도록 하기 위함입니다. 10명의 사용자가 로그인하면, 서버의 메모리에는 각각의 세션에 해당하는 AES 세션 키가 저장된다.
'면접 준비' 카테고리의 다른 글
CS공부 ) 컴파일러 (0) | 2025.03.25 |
---|---|
CS공부 ) 데이터베이스 설계 (0) | 2025.03.25 |
CS공부 ) 운영체제 (0) | 2025.03.24 |
CS공부 ) 데이터베이스 (0) | 2025.03.24 |
CS공부 ) 자료구조와 알고리즘 (0) | 2025.03.24 |