2023. 4. 2. 18:23ㆍCS
해당 글은
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network#%EC%9B%B9-%ED%86%B5%EC%8B%A0%EC%9D%98-%ED%81%B0-%ED%9D%90%EB%A6%84
위 게시물의 "웹 통신의 큰 흐름"을 좀 더 자세하게 풀어보는 글입니다.
먼저 해당 url 을 타고 들어가서 한번 설명을 읽고 오시면 좋을 거 같습니다 :)
브라우저에서 URL 을 입력하고 Enter를 누르면 어떤 일이 일어나는 가?
- 브라우저가 정해진 브라우저의 규칙에 따라 URL을 해석한다.
- 브라우저의 규칙의 예시로는 Fragment Identifer 가 있습니다.
https://xpmxf4.tistory.com/15
- 브라우저의 규칙의 예시로는 Fragment Identifer 가 있습니다.
- 해석된 URL 의 의미를 토대로 HTTP Request Message를 생성,
- 해당 Message 를 웹 서버로 보내게 된다.
해당 설명만 본다면 브라우저가 하는 일이 2가지로 보입니다.
- URL 해석
- HTTP Message 생성&전송
하지만 위 2가지에서 브라우저가 하는 일은 1번만 해당하고,
2번을 수행하는 것은 프로토콜 스택입니다.
프로토콜 스택이란?
프로토콜 스택은 운영체제에 내장된 네트워크 제어용 소프트웨어입니다.
또 다른 표현으로는 컴퓨터와 다른 네트워크 장치 간에 통신을 가능하게 하는
일련의 프로토콜을 구현한 소프트웨어입니다.
이 프로토콜들은 계층적인 구조를 가지며, 각 계층은 네트워크 통신 과정에서 특정 기능을 수행합니다.
대표적인 프로토콜 스택으로는 인터넷 프로토콜 스택(IP 프로토콜 스택)이 있으며, 이는 TCP/IP를 기반으로 합니다.
브라우저는 웹 사이트에 액세스하기 위해 네트워크 통신을 수행하며,
이때 프로토콜 스택을 사용합니다.
브라우저가 메시지를 보내거나 받을 때, 프로토콜 스택의 각 계층은 메시지를
적절한 형태로 변환하고 전송 과정을 제어합니다.
각 계층에 대해 알아보겠습니다.
- 애플리케이션 계층 (Application Layer)
사용자가 직접 상호작용하는 프로토콜이 이 계층에 위치합니다.
애플리케이션 계층 프로토콜은 특정한 목적에 따라 네트워크 통신을 수행하며,
웹 브라우징, 이메일 전송, 파일 전송 등 다양한 애플리케이션에 사용됩니다.
대표적인 애플리케이션 계층 프로토콜로는 HTTP, HTTPS, FTP, SMTP, DNS 등이 있습니다. - 전송 계층 (Transport Layer)
이 계층에서는 데이터 전송의 신뢰성과 흐름 제어를 담당합니다.
전송 계층의 주요 프로토콜은 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)입니다. - 인터넷 계층 (Internet Layer)
이 계층에서는 데이터 패킷을 올바른 목적지로 전송하기 위한 경로를 결정합니다.
인터넷 계층의 주요 프로토콜은 IP(Internet Protocol)입니다. IP는 각 패킷에 출발지와 목적지 IP 주소를 할당하여, 패킷이 올바른 경로를 통해 전달되도록 합니다. 이때 라우터와 같은 네트워크 장비들이 사용됩니다. - 링크 계층 (Link Layer)
이 계층에서는 실제 네트워크를 통한 데이터 패킷의 전송이 이루어집니다.
링크 계층은 물리적인 네트워크 연결 및 프레임의 생성과 전송을 담당합니다.
예시
구체적인 예시와 함께 설명해 보겠습니다.
예를 들어, 크롬 브라우저에서 "www.example.com"이라는 웹사이트를 방문하려고 한다고 가정해 보겠습니다.
이때 웹 브라우저가 OS에 내장된 프로토콜 스택을 사용해야 합니다.
웹 브라우저가 웹 사이트에 액세스 하기 위한 요청을 보내면,
프로노콜 스택은 다음과 같은 과정을 거칩니다.
- 애플리케이션 계층
브라우저가 HTTP(Hypertext Transfer Protocol) 또는 HTTPS(Hypertext Transfer Protocol Secure)와 같은 프로토콜을 사용하여 웹 페이지 요청을 생성합니다. - 전송 계층
생성된 요청은 TCP(Transmission Control Protocol) 또는 UDP(User Datagram Protocol)를 사용하여 데이터 패킷으로 변환됩니다. 이때 각 패킷에는 출발지와 목적지 IP 주소, 포트 번호 등이 포함됩니다. - 인터넷 계층
IP(Internet Protocol)를 사용하여 데이터 패킷을 올바른 목적지로 전송하기 위한 경로를 결정합니다.
이 과정에서 라우터와 같은 네트워크 장비들이 사용됩니다. - 링크 계층
데이터 패킷이 실제로 네트워크를 통해 전송됩니다.
이 과정에서는 이더넷, Wi-Fi 등의 프로토콜이 사용됩니다.
이렇게 웹 브라우저의 요청이 프로토콜 스택을 거쳐 전송되고
웹 사이트 서버에서는 이와 반대 순서로 프로토콜 스택을 거쳐 웹 페이지 데이터를 브라우저로 보냅니다.
이후 브라우저는 웹 페이지 데이터를 해석하여 화면에 표시하게 됩니다.
이처럼 프로토콜 스택은 웹 브라우저와 웹 서버 사이의 통신을 가능하게 하는 핵심 역할을 담당하며
운영체제에 내장되어 있습니다.
프로토콜 스택 내부 정보 보기
Mac OS 기준으로 프로토콜 스택과 관련된 네트워크 정보를 확인할 수도 있습니다.
netstat -a
해당 명령어를 실행할 때, 컴퓨터의 모든 네트워크 연결 정보와 네트워크 통계를 출력합니다.
이 명령어를 사용하면 현재 컴퓨터에서 열려 있는 네트워크 연결, 연결 대기 중인 포트, 사용 중인 포트 등을 확인할 수 있습니다.
출력된 결과는 다양한 정보를 포함하고 있어 처음에는 이해하기 어려울 수 있습니다.
netstat -a 명령어를 터미널에서 사용하면 다음과 같이 화면에 나오게 됩니다.
해당 화면에서 확인할 수 있는 주요 정보를 간단히 설명해 보겠습니다.
- Proto
연결에 사용된 프로토콜을 나타냅니다. 예를 들어, TCP 또는 UDP 등입니다. - Local Address
현재 사용 중인 로컬 IP 주소와 포트 번호를 나타냅니다.
* 기호는 모든 IP 주소를 의미합니다. - Foreign Address
외부 IP 주소와 포트 번호를 나타냅니다.
이 주소는 연결된 원격 시스템을 의미합니다. - State
네트워크 연결의 상태를 나타냅니다.
예를 들어, TCP 연결의 경우 LISTEN, ESTABLISHED, CLOSE_WAIT 등의 상태가 있습니다.
각 컬럼별로 구분되어 있는 정보들을 참고하여, 현재 시스템에서 사용 중인 네트워크 연결 상태를 파악할 수 있습니다.
'CS' 카테고리의 다른 글
WebKit과 Blink 이해하기: 당신의 웹 브라우저 뒷면의 엔진 (0) | 2023.04.06 |
---|---|
JIT 컴파일러의 이해와 자바와 자바스크립트에서의 활용 (0) | 2023.04.03 |
도커란? docker? (0) | 2023.03.31 |
URL Encoding 이란? (0) | 2023.03.29 |
DNS란? eTLD란? (0) | 2023.03.28 |