인터넷에 접속하면 벌어지는 일
세줄 요약
- 와이파이에 연결된 이후 실제 인터넷 서비스를 사용하는 과정은 세션, 표현, 응용 계층에서 일어남.
- 반면, 와이파이에 연결하는 자체는 물리, 데이터링크, 네트워크 계층의 일임.
- 1번과 2번의 다리 역할을 해주는 것은 전송계층임. 그래서 TCP/IP 4계층과 OSI 7계층을 아래 그림처럼 대응지을 수 있는 것.
이미지를 누르면 원본 블로그로 이동됩니다.
OSI 7계층 구조
7계층 (응용계층)
- 사용자와 네트워크 간의 인터페이스를 제공하는 계층이다.
- HTTP, FTP, SMTP, DNS 등의 프로토콜이 이 계층에서 동작한다.
- 웹 브라우저, 이메일 클라이언트 등의 애플리케이션이 이 계층에 해당한다.
6계층 (표현계층)
- 데이터 형식 변환, HTTPS 암호화, 데이터 압축 등을 담당하는 계층이다.
- TLS/SSL 프로토콜이 이 계층에서 동작하며 암호화와 복호화를 수행한다.
5계층 (세션계층)
- 연결 세션 수립, 유지, 종료를 관리하는 계층이다.
- 통신 장치 간의 대화(세션)를 제어하고 동기화한다.
4계층 (전송계층)
- TCP, UDP 프로토콜이 동작하며 end-to-end 통신을 관리하는 계층이다.
- 데이터 전송의 신뢰성을 보장하고 포트 번호를 통해 어플리케이션 식별이 이루어진다.
3계층 (네트워크계층)
- IP주소를 기반으로 패킷 라우팅을 담당하는 계층이다.
- 서로 다른 네트워크 간의 통신 경로를 결정한다.
2계층 (데이터링크계층)
- 물리적 네트워크 간의 데이터 전송을 담당하는 계층이다.
- 이더넷, 와이파이 등의 프로토콜이 이 계층에서 동작한다.
- MAC 주소를 사용하여 데이터 프레임을 전송한다.
1계층 (물리계층)
- 비트 단위의 데이터를 전기 신호로 변환하는 계층이다.
- 케이블, 허브, 리피터 등의 물리적 장치가 이 계층에 해당한다.
웹 브라우저 연결 과정 (OSI 계층과 연결)
1. 브라우저 실행 (응용계층)
- 사용자가 웹 브라우저 애플리케이션을 실행하는 단계이다.
2. 브라우저 주소창에 방문하려는 웹사이트 URL 입력 (응용계층)
- URL과 URI의 차이점:
- URI가 상위 집합이고, 그 안에 URL이 하위집합으로 존재한다.
- URL 형식:
protocol://host[:port]/path[?query][#fragment]
- 웹사이트 URL은 보통
http://도메인주소
의 형태로 이루어져 있다.1 2 3 4 5
www.example.com │ │ │ │ │ └── 최상위 도메인(TLD): .com │ └────── 2차 도메인(SLD): example └────────── 서브도메인: www
- 도메인 주소는 왜 필요할까
- 누군가의 전화번호를 기억하듯이 IP주소 자체를 기억하는건 쉽지 않다. 고로 마치 주소록에서 00의 연락처를 찾듯, 도메인 이름을 00이라는 사람의 이름이라 생각하고 이를 응용계층이 찾는 것이다.
- 서브도메인 사용 여부:
- 과거에는 웹사이트, 이메일, 도서관 검색 등 모든 네트워크 URI를 별도로 구성해야 했다.
- 고로 웹사이트로 연결되는 URI의 경우엔 서브 도메인에 www를 지정했다.
- 하지만 현재는 하나의 웹사이트 안에서 거의 모든 기능을 처리할 수 있기때문에 서브도메인을 생략하는 추세다.
3. DNS 조회 - 도메인을 IP 주소로 변환 (응용계층)
- 브라우저는 입력한 웹사이트 URL 중 도메인 부분을 IP 주소로 변환한다.
- DNS 조회 순서:
- 로컬 캐시 확인:
- 브라우저의 DNS 캐시 확인
- 운영체제의 DNS 캐시 확인
- 라우터 캐시 확인
- Local DNS 서버 조회:
- 위 캐시에 없는 경우, 사용자의 ISP(통신사)가 제공하는 Local DNS 서버에 요청
- 재귀적 쿼리(Recursive Query) 시작:
- Local DNS 서버 캐시에도 정보가 없는 경우
- 전 세계에 분산된 Root DNS 서버에 먼저 질의
- Root DNS는 TLD(Top-Level Domain) DNS 서버 정보 제공
- 왜 재귀적 쿼리일까? -> Root DNS → TLD DNS → Authoritative DNS
- TLD DNS 서버에 쿼리:
- 예: .com, .org, .net, .kr 등의 도메인을 관리하는 서버
- TLD DNS는 해당 도메인의 Authoritative DNS 서버 정보 제공
- Authoritative DNS 서버에 쿼리:
- 실제 도메인(예: naver.com)을 관리하는 네임서버
- 요청한 도메인의 IP 주소 정보 제공
- 응답 전달 및 캐싱:
- Authoritative DNS 서버로부터 받은 IP 주소를 Local DNS 서버가 캐싱
- Local DNS 서버가 사용자(브라우저)에게 IP 주소 전달
- 브라우저와 운영체제도 해당 정보를 캐싱 -> 추후 빠르게 접속 가능
- 로컬 캐시 확인:
4. TCP/UDP 연결 수립 (전송계층)
- IP주소와 TCP(Transmission Control Protocol)/ UDP(User Datagram Protocol) 연결을 수립한다.
- IP는 출발지에서 목적지까지 패킷을 전달하는 용도로, 어떤 애플리케이션에 전달할지는 TCP/UDP가 결정한다.
- 3-way handshake 과정: (전송계층)
- 클라이언트 → 서버: SYNchronize(동기화) 패킷
- 서버 → 클라이언트: SYN-ACK 패킷
- 클라이언트 → 서버: ACKnowledgement(승인) 패킷
- 연결 종료 시 4-way handshake: (전송계층)
- 페이지 이동 시(라우터 변경 시) 4-way handshake 과정이 발생한 후 새로운 3-way handshake가 진행된다.
- 단순히 탭을 닫을 때는 타임아웃으로 연결이 종료된다. 고로 어떤 한 사이트에서 로그아웃을 하지 않고 그냥 브라우저 탭을 닫으면 세션이 만료되지 않는 한 로그인 상태가 유지되는 것이다.
- TCP와 UDP의 차이:
TCP | UDP | |
---|---|---|
연결 방식 | 연결 지향형: 전송 전에 연결을 설정. | 비연결 지향형: 연결 없이 데이터를 전송. |
신뢰성 | ↑ | ↓ |
오류 처리 | O | X |
속도 | 상대적으로 느림 | 상대적으로 빠름 |
순서 보장 | O | X |
5. HTTP 요청 전송 (응용계층)
- TCP 연결이 수립되면 브라우저는 HTTP 요청을 서버로 보낸다.
- HTTPS 연결 시 TLS handshake (표현계층):
- 보안 연결을 위해 SSL/TLS 프로토콜이 작동한다.
- 암호화 알고리즘과 키 교환이 이루어진다.
- HTTPS 연결 시 TLS handshake (표현계층):
- GET, POST 등의 메서드를 사용한다.
- 쿠키, 사용자 에이전트 정보 등이 포함된다.
6. 서버 처리 (응용계층)
- 웹 서버가 요청을 받아 처리한다.
- 데이터베이스 조회, 서버 측 스크립트 실행 등이 이루어진다.
7. HTTP 응답 수신 (응용계층)
- 서버가 처리한 결과를 HTTP 응답으로 클라이언트에게 전송한다.
- HTML, CSS, JavaScript 등의 리소스가 포함된다.
8. 브라우저 렌더링 (응용계층)
- 받은 HTML, CSS, JavaScript를 해석하여 웹 페이지를 화면에 표시한다.
- 렌더링 엔진이 DOM 트리와 CSSOM 트리를 구성하고 렌더 트리를 만들어 화면에 출력한다.
질문
- 왜 브라우저 주소창에
google.com
과 같이 도메인 주소만 입력해도 그 사이트로 이동될까?- 브라우저가 제공해주는 편의임. 브라우저가 알아서
https://
과 같이 프로토콜을 자동으로 입력해서 그 사이트로 이동해주는거다.
- 브라우저가 제공해주는 편의임. 브라우저가 알아서
- 왜 HTTP는 응용계층에서 일어나는데 HTTPS는 표현계층에서 일어나는가?
- 크게 보면 둘 다 응용계층에서 일어나는게 맞다. HTTPS가 HTTP의 일부니까.
- 그치만 HTTPS는 이름에서부터 HTTP에 Secure(보안) 기능을 추가한 프로토콜이며 이 때 암호화를 하는 과정은 표현계층에서 일어난다.
- 고로 엄밀히 말하면, HTTPS는 응용계층의 HTTP 프로토콜과 표현계층의 TLS/SSL을 함께 사용한다.
- 온라인 화상 회의는 UDP를 사용하고 라이브 스트리밍은 TCP를 사용한다?
- zoom이나 google meet과 같은 온라인 화상 회의 플랫폼은 WebRTC를 사용하고,
- 치지직이나 트위치 같은 온라인 라이브 스트리밍 플랫폼은 HLC를 사용하는 걸로 알고있다.
- 근데 WebRTC는 UDP 기반 통신 기술이고, HLC는 TCP 기반 기술이다.
WebRTC is a unique browser protocol because it transmits its data over UDP instead of TCP, like most others.
- 나는 개인적으로 방송을 볼 때 지연 없이 보여지는게 좋다 생각해서 그럼 UDP 통신이 나은거 아닌가? 왜 TCP 기반 기술을 쓰지? 라는 생각을 했는데
- 게임 방송일 경우엔 화질이 깨지면 서터레서.를 엄청 받으니까 TCP 기반 기술을 사용하는듯 하다.
생각해보니 나도 타르코프 방송은 눈 아파서 잘 못 봤음. 보통 TV로 보는데 잔디밭 나오면 지옥 시작임.
- 결론적으로 보통 UDP는 즉시성이 중요할 때 사용하고, TCP는 약간의 지연이 있더라도 화질을 좀 더 깨끗하게 전달하는게 좋을 때 사용하는듯.
- 이 질문에 대해선 좀 더 알아봐야 될 것 같긴하다.
- 왜 TCP/IP 4계층이라 부르는가? UDP/IP 라고도 부를 수 있는 것 아닌가?
- UDP는 TCP가 나온 지 6년 뒤에 생겼고,
- 그때쯤엔 이미 IP가 네트워크 계층의 대세가 됐기 때문에,
- 굳이 “UDP/IP”라고 새로 부를 이유가 없었다고 한다.
- TCP도 IP 위에서 동작하는 프로토콜이고, UDP도 IP 위에서 동작하는 프로토콜 이니까.
- 참고로 “IP가 대세가 됐다”는 말이 잘 이해되지 않아서 더 찾아봤는데, 옛날에는 네트워크 계층에 IPX/SPX 와 같은 다양한 프로토콜이 많았다고 한다.
- 근데 IPX/SPX는 LAN 기반이라 한 장소 안에서만 쓰일 수 있었다. 인터넷 연결은 다 WAN이지 않는가. 그래서 이런 프로토콜은 점차 사라지고 네트워크 계층엔 IP가 자리잡게 된거다.
참고
This post is licensed under CC BY 4.0 by the author.