Jeomxon's Tech Note

2024.01.02.(화) 2회 차 모각코 정리 본문

Mogaco/2023동계

2024.01.02.(화) 2회 차 모각코 정리

저문(jeomxon) 2024. 1. 2. 17:14

1. IP 주소의 기본

브라우저는 HTTP 메시지를 네트워크에 송출하는 기능이 없기 때문에 OS에 맡김

이때 도메인명이 아닌 IP 주소로 메시지를 받을 상대를 지정해야함

  • 서브넷
  • 허브에 몇대의 PC가 접속된 것
  • 라우터
  • 패킷을 중계하는 장치의 일종

IP 주소

OO동 OO번지로 나타낼 수 있음

OO동 : 네트워크 번호

OO번지 : 호스트 번호

TCP/IP 네트워크

Untitled

작은 서브넷을 라우터로 연결하여 전체 네트워크를 구성

  1. 송신 측이 메시지를 보내면 서브넷 내부의 허브가 운반하고, 송신 측에서 가장 가까운 라우터에 도착
  2. 라우터가 메시지를 보낸 상대를 확인하여 다음 라우터를 판단하여 그 라우터로 송신하도록 지시
  3. 이동한 서브넷에서의 허브가 라우터까지 메시지를 보냄
  4. 반복

IP 주소의 표기 방법

실제 IP 주소는 32비트로 구성되어있지만, 8비트씩 점으로 구분하여 10진수로 표기

(a) IP 주소 본체의 표기 방법

10.11.12.13

(b) IP 주소 본체와 같은 방법으로 네트워크를 표기하는 방법

10.11.12.13 / 255.255.255.0 (IP 주소 본체 / 넷마스크)

(c) 네트워크 번호의 비트 수로 넷마스크를 표기하는 방법

10.11.12.13 / 24 (IP 주소 본체 / 넷마스크)

(d) 서브넷을 나타내는 주소

10.11.12.0 / 24

호스트 번호 부분의 비트가 모두 0인 것은 각 컴퓨터가 아니라 서브넷 자체를 나타냄

(e) 서브넷의 브로드캐스트르 나타내는 주소

10.11.12.255 / 24

호스트 번호 부분의 비트가 모두 1인 것은 서브넷 전체에 대한 브로드캐스트를 나타냄

IP 주소 뒤에 넷마스크를 붙이는 이유

(a)와 같은 형태가 보통의 IP 주소지만 네트워크 번호와 호스트 번호를 구분하기 어렵기 때문에 뒤에 넷마스크를 붙여서 구분함

(c)는 (b)의 넷마스크를 이진수로 나타내었을 때 1의 개수를 표시해둔 것, 의미는 동일

Untitled

2. 도메인명과 IP 주소를 구분하여 사용하는 이유

숫자로 작성된 IP 주소는 기억하기 어렵기 때문에 보통 도메인명을 사용

IP 주소는 4바이트(32비트) vs 도메인명은 최대 255바이트

도메인명으로 통신한다면 취급하는 문자 길이가 길어지고, 라우터에 부하가 생겨 데이터 운반동작에 많은 시간 소요 → 결론적으로 네트워크의 속도가 느려짐

DNS(Domain Name System)

도메인명 ↔ IP 주소가 서로를 알 수 있게 만든 시스템

3. Socket 라이브러리가 IP 주소를 찾는 기능을 제공한다

DNS 리졸버(리졸버)

DNS 서버에 IP 주소를 응답받기 위해 요청을 보내는데, 이때 요청을 보내는 클라이언트

이런 행위를 네임 리졸루션이라고 함

리졸버는 Socket 라이브러리에서 제공

  • Socket 라이브러리

네트워크의 기능을 호출하기 위한 프로그램의 부품집

4. 리졸버를 이용하여 DNS 서버를 조회한다

리졸버는 애플리케이션 단에서 간단히 호출할 수 있음

<애플리케이션 프로그램의 이름> (<매개변수>)
{
...
    <메모리 영역> = gethostbyname("www.lab.cyber.co.kr");
...
    <HTTP 메시지 송신>
...
}

gethostbyname : 리졸버의 프로그램 명

www.lab.cyber.co.kr : 조회하는 서버의 도메인 명

gethostbyname의 라인을 실행하면 메모리 영역에 IP 주소가 기입됨

실제로는 응답 메시지를 받고, 응답 메시지에서 IP 주소를 추출하여 메모리 영역에 저장

5. 리졸버 내부의 작동

  1. 애플리케이션(브라우저)에서 리졸버를 호출하는 부분을 실행하면 애플리케이션이 일시적으로 정지(제어가 넘어감)
  2. Socket라이브러리가 제공하는 gethostbyname이 호출되어 동작
  3. DNS 서버에 보내는 조회 메시지를 만들어서 보냄
  4. 메시지 송신은 OS 내부의 프로토콜 스택을 호출하여 실행을 의뢰(리졸버도 브라우저와 같이 네트워크 데이터 송,수신 기능이 없기 때문)
  5. 제어가 리졸버로 넘어가고 LAN 어댑터를 통해 메시지가 DNS 서버로 송신
  6. 요청 서버가 DNS 서버에 등록되어 있으면 응답 메시지에 담아 클라이언트에게 반송
  7. 프로토콜 스택을 경유하여 리졸버에게 전달
  8. 리졸버가 내용을 해독하여 IP 주소를 추출하여 애플리케이션에 전달
  9. 지정된 메모리 영역에 IP 주소를 저장