네트워크
1. 웹 통신의 큰 흐름: https://www.google.com/을 접속할 때 일어나는 일
(1) 브라우저 검색창에 'www.google.com'를 입력한 후 엔터를 친다.
브라우저는 URL을 분석하고, 프로토콜(https), 도메인 이름(www.google.com), 및 경로를 분리한다.
(2) DNS 조회
브라우저는 www.google.com의 IP 주소를 찾기 위해 DNS 서버에 요청을 보낸다.
특정 웹사이트에 접속하기 위해서는 도메인이 아닌 IP 주소가 필요한데, 이는 외우기가 힘들고, 가독성이 떨어지기 때문에 도메인 명으로 웹페이지에 접속할 수 있도록 DNS 서버를 이용한다. (URL 이름과 IP 주소를 저장하고 있는 데이터베이스)
- DNS 조회 과정
- 로컬 캐시 확인
- ISP(ex. KT, LG, SKT)의 DNS 서버로 요청
- 루트 네임서버 -> TLD 네임서버(최상위 도메인 서버) -> 도메인 네임서버(Authoritative DNS 서버)로 순차적으로 요청
(3) TCP 연결 (3-way handshake)
브라우저는 142.250.190.78 과 같은 서버와 통신하기 위해 TCP 연결을 설정한다
- SYN : 브라우저가 서버에 연결 요청을 보냄
- SYN-ACK : 서버가 요청을 승인
- ACK : 브라우저가 응답을 확인하고 연결 완료
(4) TLS Handshake (HTTPS의 경우)
TLS(Transport Layer Security)를 통해 보안 연결을 설정한다.
- 브라우저와 서버는 암호화 키를 교환한다.
- 서버의 SSL/TLS 인증서를 검증한다.
(5) HTTP 요청
브라우저가 HTTP GET 요청을 서버에 보낸다.
(6) 서버 처리
서버는 요청을 받고, 요청된 리소스를 준비한다. (ex. google 검색 페이지를 반환)
(7) HTTP 응답
서버는 HTTP 응답과 함께 HTML 콘텐츠를 브라우저로 보낸다.
(8) 브라우저 렌더링
브라우저가 받은 HTML을 분석하고 화면에 표시한다.
가장 먼저 DNS 서버에 요청을 통해 해당 도메인의 IP주소를 획득하고, TCP 3-way handshake를 통해 연결을 맺습니다. HTTPS 프로토콜을 사용하는 경우에는 TLS handshake로 보안 연결을 설정합니다. 그리고 나서 브라우저가 서버에 HTTP GET 요청을 보내면 서버는 요청된 HTML, CSS, JavaScript와 같은 리소스를 응답으로 보냅니다. 브라우저는 받은 데이터를 파싱하고 화면에 렌더링하여 최종적으로 사용자가 볼 수 있는 Google 페이지를 표시합니다.
2. TCP와 UDP의 차이점
TCP (Transmission Control Protocol)
- 연결 지향적: 데이터 전송 전에 3-way handshake로 연결 설정
- 신뢰성 보장: 데이터가 정확하고 순서대로 도착하도록 ACK(확인)과 재전송 지원
- 속도: 상대적으로 느림
- 용도: 파일 전송 (FTP), 웹 브라우징 (HTTP/HTTPS), 이메일 (SMTP) 등 신뢰성이 중요한 애플리케이션에서 사용
UDP (User Datagram Protocol)
- 비연결 지향적: 연결 설정 없이 데이터 전송
- 신뢰성 없음: 데이터 도착 여부나 순서 보장 X
- 속도: 빠름
- 용도: 실시간 스트리밍, 온라인 게임, VolP 등 속도가 중요하고 약간의 데이터 손실이 허용되는 애플리케이션에서 사용.
TCP와 UDP의 가장 큰 차이는 연결 방식과 신뢰성입니다. TCP는 연결 지향적이므로 3-way handshake를 통해 연결을 설정하며 데이터가 순서대로 전달되도록 보장하여 신뢰성이 있습니다. 반면 UDP는 비연결 지향적이므로 데이터 전송 시 확인 절차가 없어 신뢰성이 낮지만 속도는 빠른 특징을 갖고 있습니다.
3. TCP 3/4 way handshake란
3-way handshake (연결 설정) : 신뢰성 있는 연결을 위해 이 과정을 통해 클라이언트와 서버 간 연결을 설정한다.
- SYN : 클라이언트가 서버에 연결 요청을 위해 SYN 패킷을 보낸다. 초기 시퀀스 번호(ISN)가 포함되어 있음.
- SYN-ACK: 서버는 클라이언트의 요청을 받고 연결을 수락하며 SYN-ACK 패킷을 보낸다. 이때 서버의 초기 시퀀스 번호와 클라이언트 요청을 확인하는 ACK 값이 포함되어 있음.
- ACK: 클라이언트는 서버의 응답을 확인하고 ACK 패킷을 보낸다. 이때 서버의 ISN에 대한 확인 응답이 포함되어 있음.
4-way handshake (연결 종료) : 양방향 통신을 안전하게 종료하기 위한 과정
- FIN: 클라이언트가 더이상 데이터를 전송하지 않겠다고 요청하며 FIN 패킷을 보낸다.
- ACK: 서버는 클라이언트의 종료 요청을 확인하고 ACK 패킷을 보낸다. (이 상태에서 서버는 여전히 데이터 전송 가능)
- FIN: 서버가 자신의 데이터 전송이 완료되었다고 알리며 FIN 패킷을 보낸다.
- ACK: 클라이언트는 서버의 종료 요청을 확인하고 최종 ACK 패킷을 보낸다.
TCP 3-way handshake는 클라이언트와 서버가 통신 연결을 설정하는 과정입니다. 클라이언트는 서버에 SYN 요청을 보내고, 서버는 연결 요청을 수락하며 SYN-ACK을 보냅니다. 이후 클라이언트가 서버의 응답을 확인하고 ACK 메시지를 보내면 양쪽이 데이터 전송 준비가 완료되어 연결을 설정합니다. TCP 4-way handshake는 연결 종료를 위한 과정입니다. 클라이언트가 연결 종료를 위해 FIN 요청을 보내고, 서버는 이를 확인하여 ACK을 보냅니다. 서버가 종료 준비가 되면 FIN 요청을 보내고 마지막으로 클라이언트가 서버의 요청을 확인하여 ACK 요청을 보내며 연결이 종료됩니다.