유튜버 널널한 개발자 TV '네트워크 기초 이론' 시리즈 무지성(반쯤만 이해한) 정리입니다.
적어두고 나중에 보면 이해가 되겠지..
식별자 세 가지: MAC 주소, IP 주소, Port 번호
MAC network interface card(NIC, 쉽게 말하면 랜카드)에 대한 식별자. 하드웨어 주소라고도 한다. 변경 가능하다. 하나의 NIC에도 여러 IP 주소가 있다.
ip주소는 호스트에 대한 식별자다. 호스트란? 인터넷에 연결된 컴퓨터.
Port 번호는 user mode 수준, 즉 소프트웨어 개발 또는 관리하는 사람에게 물어본다면 프로세스 식별자, 네트워크 관리하는 사람(4계층)에게 물어본다면 서비스 식별자라 할 것이다. 하드웨어 단계에서 네트워크를 다루는 사람에게 물어본다면 인터페이스 번호(네트워크 단자 번호)라고 할 것이다.
Host, Switch, Network
Host란 네트워크에 연결된 컴퓨터다. 네트워크 자체를 이루는 호스트와, 네트워크를 이용하는 호스트가 있다. 네트워크 이용주체면 end point(끝단, 단말기)라고 부른다.
스위치란 네트워크 자체를 이루는 컴퓨터다.
인터넷이란 라우터의 거대한 집합체로 이뤄져 있다. 인터넷을 이루는 가장 중대한 구성요소는 라우터와 DNS.
스위치 중 IP주소를 가지고 스위칭을 하면 L3 스위치. 라우터가 가장 대표적인 L3 스위치다.
IPv4
IPv4 주소 길이 32bit. 2^32 ≒ 43억개의 경우의 수가 있다.
IPv6 주소 길이 128bit.
IPv4는 점(.)을 기준으로 8비트씩 끊어져 있다. 0~255 범위.
IPv4는 네트워크 ID와 호스트 ID로 나뉜다. 네트워크 ID의 길이를 나타내는 것이 서브넷 마스크.
서브넷 마스크는 네트워크 ID가 있는 덩어리까지는 255, 그 뒤로는 0을 값으로 가져서
IPv4주소와 AND 연산을 하면 0이 아닌 값으로 나오는 곳까지가 네트워크 ID가 되는 식이다.
(e.g IP가 192.168.60.14, 넷마스크가 255.255.255.0이면 AND 연산 했을 때 192.168.60.0이 된다. 각 자리를 8비트로 보고 192.168.60.14/24 이렇게 나타내기도 한다. CIDR(사이더) 표기법.
Port 번호
프로그램 개발자의 입장에서 봤을 때 포트 번호는 프로세스 식별자다.
소켓을 생성할 때 소켓에 attach되는 정보 중 하나다. 포트 번호는 16비트라서 0~65535인데 0과 65535는 제외.
두 프로세스가 동시에 인터넷에 접속할 때 소켓을 열 텐데 똑같은 포트번호를 붙일 수 없다. 따라서 프로세스 식별자인 것.
패킷이 네트워크로 유입돼서 들어오면 레이어를 타고 들어오다가 4층에서 어떤 프로세스로 갈지 결정하는 기준이 포트 번호다.
스위치
스위치가 하는 일이 곧 스위칭인데, 스위칭이란 경로 선택.
교차로에서 길을 선택할 때 이정표를 보고 결정하는 것과 같다. 교차로가 곧 스위치. 길이 인터페이스 또는 경로. 길을 선택하는 것이 스위칭.
스위치가 곧 라우터. 인터넷은 라우터의 거대한 집합체다. 라우터를 통해서 전해지는 것은 패킷. 이정표 역할을 하는 것은 라우팅 테이블이다.
데이터 단위
네트워크 데이터 단위는 유저 모드에서 하드웨어로 내려감에 따라 stream - segment - packet - frame 순이다.
유저 모드에서 커널로 내려가서 TCP로 내려가면 스트림 단위가 세그먼트화된다.
맥시멈 세그먼트 사이즈는 패킷의 크기에 기반해서 만들어지는데, 패킷의 최대 크기는 MTM(Maximum Transmission Unit) = 1500바이트.
유저 단위에서의 (소켓 수준에서의) 스트림 데이터를 보낼 때 세그멘테이션이 일어나 세그먼트가 되고, 그것을 다시 인터넷으로 전송하기 위한 패킷으로 분해한다. 패킷의 최대 크기가 1500바이트. 패킷을 다시 프레임 데이터로 나눠서 전송하게 된다.
네트워크 인터페이스 선택 원리
터미널에서 'router PRINT'를 치면 내 컴퓨터의 라우팅 정보가 나온다.
메트릭 값이 곧 비용이라고 할 수 있다. 이 테이블에 근거해서 비용이 가장 적게 드는 경로를 선택한다.
웹 서비스의 탄생
웹의 창시자 팀 버너스 리. 정보로서의 텍스트에 어딘가로 이어지는 링크라는 개념을 도입.
그렇게 생겨난 형식이 html이다. 인터넷 기술을 활용해서 이 문서를 전달할 수 있는 방안(프로토콜)을 창안한 것이 http이고 html + http 합쳐서 웹이라고 불렀다.
언제나 프로그램은 인터페이스 + 제어 체계 + 데이터로 돼 있다는 점을 기억하라.
웹 서비스 구조
프로그래밍을 할 때 최소한의 규칙이 있다면 위에서 말한 인터페이스, 제어 체계, 데이터를 쪼개라. 유지 보수 편의성 면에서 그것이 좋다.
http의 중요한 특징 중 하나가 stateless. 그에 비해 TCP 연결은 말 그대로 연결이라는 개념이 있고 연결이란 곧 상태의 개념을 포함하는데 그 위에서 작용하는 http는 상태가 없다.
우리가 주소창에 url을 입력하면 DNS 서버에서 그 url과 매칭되는 IP 주소를 알려주고 그러면 그 IP 주소를 가지고 서버에 접속한다.
http에서 get 요청을 보내는데 이것은 Read. 정보를 받아오는 일을 한다.
서버에서 정보를 가져오면 구문 분석(parsing) -> 자료구조 생성(비선형적, 트리구조) -> 렌더링을 거쳐 화면에 정보를 표시한다. 따라서 브라우저를 이루는 핵심은 구문 분석기와 렌더링 엔진.
초기 웹은 문서 뷰어와 같지만 다만 원격지 문서 뷰어가 된다는 것이 일반 뷰어와의 큰 차이점이다.
웹 서비스 3대 요소: 파서, 렌더링 엔진, 스크립트 엔진
지금까지 언급된 것은 단방향 작용. 서버가 일방적으로 클라이언트에게 정보를 제공해준다.
html을 예쁘게 꾸미기 위해서 html의 문법에서 따로 떨어져 나온 것이 CSS. 인터페이스와 데이터의 분리.
이제는 정보를 요청했을 때 html, CSS, 사진이 날아오게 되는데 순서도 이 순서대로다.
미리 서버에 저장된 리소스들이 있을 텐데 이것을 다른 말로 하면 정적이라고 한다.
클라이언트가 서버 문서의 내용을 바꾸거나 정보를 전달해야 할 필요성이 생겨난다. 이때 쓰이는 http 메서드가 POST.
클라이언트에서 날아온 정보를 처리하는 것을 예전에는 웹 서버가 함께 담당했다가 정보 처리만을 담당하는 것(WAS)이 생긴다.
GET만 할때는 단방향이었지만 양방향 상호작용이 된 것. 이때부터 맥락이라는 것이 생기기 시작한다. 상태가 생기고 상태가 변할 텐데, 어딘가에는 이런 상태 정보를 저장해야 할 필요가 생겼다. 그래서 생겨난 것이 데이터베이스. WAS와 데이터베이스를 연결할 때는 SQL을 기반으로 한다.
이번에는 클라이언트가 보낸 정보를 바탕으로 데이터베이스에서 매칭되는 결과를 찾아 동적으로 생성된 문서가 날아가게 된다.
이렇게 웹서비스가 복잡해지면 브라우저 측에서 연산이 필요해진다. 연산 담당 엔진으로 들어가게 된 것이 자바스크립트.
그래서 웹 서비스의 3대 요소는 파서, 렌더링 엔진, 스크립트 엔진. 브라우저 성능을 얘기할 때 이 세가지를 기초로 한다.
클라이언트 쪽에서는 기억을 구현하는 것이 쿠키.
'CS' 카테고리의 다른 글
[OS] 메모리 공간, 스택 영역, 힙 영역 (0) | 2023.09.02 |
---|---|
[OS] 프로세스, 스레드 (0) | 2023.08.28 |
[Network] CORS 정책과 CORS 오류 해결법 (0) | 2023.08.23 |
[Network] HTTP, HTTPS (0) | 2023.08.16 |
네트워크 기초 이론 무지성 정리 2 (4) | 2023.04.20 |