본문 바로가기

CS/네트워크

네트워크 원리 - 웹 브라우저

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=437756

 

성공과 실패를 결정하는 1%의 네트워크 원리 : 알라딘

브라우저에 URL을 입력하면 웹 페이지가 표시된다. 이것은 당연한 일이지만 그 이면에는 많은 기술들이 서로 연계해서 동작되고 있다. 바로 이러한 기술의 연계를 해설하고 있는 책. 성공과 실패

www.aladin.co.kr

해당 책을 읽고 정리한 내용입니다.


URL

URL은 Uniform Resource Locator의 약자로 네트워크 상에서 자원의 위치를 나타낸다.

 scheme://<user>:<password>@<host>:<port>/<url-path>

위와 같이 나타낸다.

 

scheme: 프로토콜을 나타낸다

user, password(option): id와 password를 사용할 수 있지만 평문으로 노출되기에 사용하지 않는다.

host: 도메인을 나타낸다.

port: 도메인IP의 port를 나타낸다. 생략한다면 프로토콜에 따라 기본 포트를 사용한다.

url-path:서버 내에서 파일, 자원의 위치를 나타낸다.


HTTP

웹 브라우저는 URL을 해석한 뒤 HTTP를 통해 웹 서버에 액세스한다.

HTTP프로토콜은 Request 메세지에, URI와 Method를 담아 보낸다.

https://ko.wikipedia.org/wiki/HTTP

 

HTTP - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. HTTP(HyperText Transfer Protocol, 문화어: 초본문전송규약, 하이퍼본문전송규약)는 W3 상에서 정보를 주고받을 수 있는 통신 프로토콜이다. 주로 'HTML 문서를 전송'하는

ko.wikipedia.org

 

가장 많이 사용하는 Method는 GET, POST + PUT, DELETE이다.

 

HTTP는 Request를 보내면 Response가 오는 구조이다.

HTTP는 stateless이기 때문에 서버가 클라이언트를 모른다.

따라서 상태 정보를 유지하기 위해 Cookie등의 정보를 활용한다.

 

Response에는 HttpStatusCode가 돌아온다.

 

웹페이지에서 본적 있을 법한 404 Not Found가 Http Response Status Code이다.


IP(Internet Protocol)

실제로 End-Point에 대한 식별은 IP를 통해 식별한다.

브라우저가 OS에 요청-> OS가 도메인에 맞는 IP를 알아냄 -> IP로 데이터를 보냄

 

도메인에 맞는 IP를 알아내기 위해서는 DNS서버에 질의해야 한다.(혹은 PC에 캐시된 DNS정보 활용)

 

IP는 IPv4, IPv6가 존재한다.

IPv4는 8비트씩 4쌍 총 32비트이며 10진수로 표현한다. ex)255.255.255.0

IPv6는 16비트씩 8쌍 총 128비트이며 16진수로 표현한다. ex)2001:0db8:85a3:0000:0000:8a2e:0370:7334


Resolver

여기서 리졸버는 DNS질의를 위한 OS의 기능이다.

Windows에서는 WinSock 라이브러리를 사용해

getaddrinfo("www.naver.com", NULL, NULL, &res);

와 같이 IP를 얻을 수 있다.

 

실제로는 아래와 같은 과정을 거친다.(책 기준)

1. 웹 브라우저에 요청

2. Socket 라이브러리에 요청

3. DNS서버에 패킷을 보냄

4. OS내부에서 UDP 패킷 송신 

5. DNS 서버가 수신

6. DNS 서버가 송신

7. OS가 UDP 패킷 수신

8. Socket 라이브러리가 수신

9. 패킷에서 IP주소를 꺼내 반환

10. 진행

 

 

위는 실제 내 PC의 DNS 서버 주소이다.

첫번째 주소가 응답하지 않는다면 두번째 주소를 사용한다.


DNS서버

DNS서버는 도메인과 IP를 매핑한 정보를 바탕으로 클라이언트의 질의에 대해 응답한다.

 

질의는 이름(도메인), 클래스(A:IPv4, AAAA: IPv6 등) ,타입(IN: 인터넷 등)을 활용한다.

 

만약 해당 DNS서버에서 질의에 대한 정보가 없다면 상위 네임서버에 질의하게 된다.

 

만약 youtube.com이라고 한다면 루트 서버 -> .com 서버 -> youtube를 찾게된다.

그 이후 내 PC에 캐시되었다면 해당 정보를 찾아볼 수 있다.

 

아래는 내 PC에서 ipconfig -displaydns를 통해 확인할 수 있는 youtube dns캐시 정보이다.

    www.youtube.com
    ----------------------------------------
    데이터 이름 . . . . . : www.youtube.com
    데이터 유형 . . . . . : 5
    TTL(Time To Live) . : 99686
    데이터 길이 . . . . . : 8
    섹션 . . . . . . . : 응답
    CNAME 레코드  . . . . : youtube-ui.l.google.com


    데이터 이름 . . . . . : youtube-ui.l.google.com
    데이터 유형 . . . . . : 1
    TTL(Time To Live) . : 99686
    데이터 길이 . . . . . : 4
    섹션 . . . . . . . : 응답
    (호스트) 레코드 . . . : 142.250.71.142

 


Socket

endpoint에서 endpoint로 통신하기 위해서는 socket이 필요하다.

 

클라이언트 측 소켓: socket 생성 -> connect -> send, recv

 

서버 측 소켓: socket 생성 -> bind -> listen -> accept -> recv, send


연결이 끝날 때 통신 종료를 알리는 패킷을 보내, 통신을 종료한다.