[혼공네트] Chapter 03. 네트워크 계층 (3주차)

한샛코드·2025년 1월 14일
0

03-1. LAN을 넘어서는 네트워크 계층

데이터 링크 계층의 한계

  1. 물리 계층과 데이터 링크 계층은 LAN을 다루는 계층
    • 일반적으로 같은 LAN 상의 호스트끼리만 하는 것이 아닌, 다른 네트워크의 호스트와도 통신함
    • 다른 네트워크의 호스트와 통신할 때, 패킷은 수많은 경로를 통해 이동할 수 있음
      • 라우팅(routing) - 패킷이 이동할 최적의 경로를 결정하는 것 (네트워크 계층의 라우터 담당)
  2. MAC 주소만으로 모든 호스트가 수많은 네트워크의 호스트를 특정하기 어려움

인터넷 프로토콜

  • 인터넷 프로토콜(Internet Protocol, 이하 IP) - 네트워크 계층의 핵심적인 프로토콜
    • 두 가지 버전 IP 버전 4(이하 IPv4), IP 버전 6(이하 IPv6)가 있음
    • 일반적으로 IP 주소를 이야기하는 경우에는 IPv4를 말함

IP 주소 형태

  • 4바이트(32비트)로 주소를 표현하고 4개의 10진수로 표기되며, 각 10진수는 점으로 구분됨
    • 옥텟(octet) - 점으로 구분된 8비트(0~255 범위의 10진수)

IP의 기능

  1. IP 주소 지정 - IP 주소를 바탕으로 송·수신 대상지정하는 것
  2. IP 단편화 - 전송하려는 패킷이 MTU 크기보다 큰 경우, MTU 크기 이하로 패킷을 자르는 것
    • MTU(Maximum Transmission Unit) - 한 번에 전송 가능한 IP 패킷의 최대 크기
    • MTU 크기 이하로 나누어진 패킷은 수신지에 도착하면 재조합됨

IPv4

ℹ️ 식별자, 플래그, 단편화 오프셋은 IP 단편화, 송·수신지 IP 주소는 IP 주소 지정에 관여함

  • IPv4의 패킷 - 프레임의 페이로드로 데이터 필드에 명시됨
    1. 식별자(identifier) - 패킷에 할당된 번호
    2. 플래그(flag) - 세 개의 비트로 이루어진 필드
      • 0 - 항상 0으로 예약된 비트 (현재 사용되지 않음)
      • DF(Don't Fragment) - IP 단편화를 수행하지 말라는 것을 나타냄
        • 단, DF 비트가 1이라고 하더라도 패킷의 크기가 너무 크면 해당 값을 무시함
      • MF(More Fragment) - 단편화 된 패킷이 더 있는지를 나타냄
        • MF 값이 0 - 마지막 패킷임을 의미함 (단편화 된 패킷이 더이상 없음)
        • MF 값이 1 - 아직 단편화 된 패킷이 더 남아 있다는 것을 의미함
    3. 단편화 오프셋(fragment offset) - 단편화 되기 전의 패킷의 첫 데이터에서 떨어진 정도를 나타냄
    4. TTL(Time To Limit) - 패킷의 수명을 나타냄
      • 홉(hop) - 패킷이 호스트 또는 라우터에 한 번 전달되는 것
      • TTL 값은 홉마다 1씩 감소하며, TTL 값이 0이 되면 해당 패킷은 폐기됨
        (네트워크 상에서 패킷이 계속 남아있는 것을 방지하기 위함)
    5. 프로토콜 - 상위 계층에서 사용한 프로토콜이 명시됨
    6. 송·수신지 IP 주소 - 송·수신지의 IPv4 주소가 명시됨

IPv6

ℹ️ 단편화 확장 헤더에 의해 IP 단편화, 송·수신지 IP 주소를 통해 IP 주소 지정이 이루어짐

  • IPv6의 패킷 - IPv4에 비하여 간소화되고, 고정적인 크기를 가짐
    1. 다음 헤더(next header) - 상위 계층의 프로토콜 혹은 확장 헤더를 나타냄
      • 확장 헤더(extension header) - 추가적인 헤더 정보가 필요할 경우에 사용함
      • 기본 헤더 및 페이로드 데이터 사이에 위치하며, 여러 확장 헤더를 가질 수 있음
    2. 홉 제한(hop limit) - (IPv4의 TTL처럼) 패킷의 수명을 나타냄
    3. 송·수신지 IP 주소 - 송·수신지의 IPv6 주소가 명시됨

ARP (Address Resolution Protocol)

  • ARP - 동일 네트워크에서 송·수신 호스트의 IP 주소를 통해 MAC 주소를 알아낼 수 있는 프로토콜

    1. ARP 요청(ARP Request) - 브로드캐스트로 ARP 요청(패킷) 메시지를 보냄
      • 수신할 대상의 IP 주소를 담은 메시지를 보냄 (관련 없는 호스트는 해당 패킷을 폐기)
    2. ARP 응답(ARP Reply) - 유니캐스트로 ARP 응답(패킷) 메시지를 보냄
      • 수신한 호스트의 MAC 주소를 담은 메시지를 보냄 (서로의 MAC 주소를 알게됨)
    3. ARP 테이블(ARP Table) 갱신 - IP 주소와 MAC 주소가 대응하는 테이블을 갱신함
      • ARP 테이블에 서로의 MAC 주소를 아는 경우에는 ARP 요청/응답 과정은 필요 없음
  • 서로 다른 네트워크에 속해 있는 호스트와 통신할 때도 사용됨 (ex. 라우터의 MAC 주소를 알아낼 때)

좀 더 알아보기 : IP 단편화를 피하는 방법

  • IP 단편화는 되도록 안하는 편이 좋음
    • 단편화 = 보내야 할 패킷의 헤더가 늘어남 → 트래픽 증가 및 대역폭 낭비 → 성능 저하
    • 그러나, 호스트의 MTU 크기가 크더라도 라우터의 MTU 크기가 작으면 IP 단편화를 해야함
  • 경로 MTU(Path MTU) - IP 단편화 없이 주고 받을 수 있는 최대 크기
    • 경로 MTU 발견 - 경로 MTU 크기만큼 송·수신하여 IP 단편화를 회피하는 기술
    • DF가 1인 IP 패킷의 크기를 점차 줄여가면서(단편화), 서로의 경로 MTU를 알아가게 됨

03-2. IP 주소

네트워크 주소와 호스트 주소

  • 네트워크 주소(네트워크 ID/식별자) - 호스트가 속한 특정 네트워크를 식별하는 역할
  • 호스트 주소(호스트 ID/식별자) - 네트워크 내에서 특정 호스트를 식별하는 역할
  • IP 주소에서 네트워크 주소와 호스트 주소를 구분하는 범위는 유동적일 수 있음

클래스풀 주소 체계

  • 클래스풀 주소 체계(classful addressing) - 클래스 기반으로 IP 주소를 관리하는 주소 체계
    • 클래스(class) - 네트워크 크기에 따라 IP 주소를 분류하는 기준

ℹ️ 클래스는 A 부터 E 클래스까지 있으며, D와 E는 멀티캐스트 및 특수 목적으로 예약된 클래스임

⚠️ 네트워크 주소브로드캐스트 주소로 인해, 실질적으로는 [(이론상 사용 가능 주소) - 2]개임

  1. A 클래스
    • 네트워크 주소의 비트가 '0'으로 시작하고, 1 옥텟으로 구성됨 (2^7개의 클래스 네트워크)
    • 호스트 주소가 3 옥텟으로 구성됨 (2^24 - 2개의 호스트 주소)
  2. B 클래스
    • 네트워크 주소의 비트가 '10'으로 시작하고, 2 옥텟으로 구성됨 (2^14개의 클래스 네트워크)
    • 호스트 주소가 2 옥텟으로 구성됨 (2^16 - 2개의 호스트 주소)
  3. C 클래스
    • 네트워크 주소의 비트가 '110'으로 시작하고, 3 옥텟으로 구성됨 (2^21개의 클래스 네트워크)
    • 호스트 주소가 1 옥텟으로 구성됨 (2^8 - 2개의 호스트 주소)
  • 특정 호스트를 지칭하는 IP 주소
    • 네트워크 주소 - 호스트 주소가 전부 0인 IP 주소
    • 브로드캐스트 주소 - 호스트 주소가 전부 1인 IP 주소

클래스리스 주소 체계

  • 클래스리스 주소 체계(classless addressing) - 클래스와 상관없이 네트워크 영역을 나누어 호스트에게 IP 주소 공간을 할당
    • 클래스별 네트워크 크기가 고정되어 있음 (수많은 IP 주소가 낭비될 가능성이 있음)

서브넷 마스크

  • 서브넷 마스크(subnet mask) - 네트워크 내의 부분적인 네트워크를 구분짓는 비트열
    • 서브네팅(subnetting) - 서브넷 마스크로 클래스를 더 잘게 잘라서 사용하는 것
  • IP 주소상에서 네트워크 주소1, 호스트 주소는 0으로 표기함
    • A 클래스 - 255.0.0.0 (11111111.00000000.00000000.00000000)
    • B 클래스 - 255.255.0.0 (11111111.11111111.00000000.00000000)
    • C 클래스 - 255.255.255.0 (11111111.11111111.11111111.00000000)

서브네팅 : 비트 AND 연산

  • 서브넷 마스크와 IP 주소 간에 비트 AND 연산을 통해 IP 주소 내의 네트워크 주소를 알 수 있음

서브넷 마스크 표기 : CIDR 표기법

  • 서브넷 마스크를 표기하는 방법은 크게 2가지가 있음
    1. 10진수로 표기하는 방법 (ex. 255.255.255.0)
    2. IP 주소서브넷 마스크상의 1의 갯수로 표기하는 방법
      • ex. 192.168.123.100(IP 주소)와 255.255.255.0(서브넷 마스크) → 192.168.123.100/24

공인 IP 주소와 사설 IP 주소

  • 공인 IP 주소(public IP address) - 전 세계에서 고유한 IP 주소 (인터넷에서 사용하는 IP 주소)
  • 사설 IP 주소(private IP address) - 사설 네트워크에서 사용하기 위한 IP 주소
    • 사설 IP 주소의 할당 주체는 (일반적으로) 라우터 (혹은 공유기)임
    • LAN 내의 수많은 호스트가 해당 주소를 이용하며, 동일 네트워크에서만 유효한 주소임
  • NAT(Network Address Translation) - 사설 IP 주소와 공인 IP 주소간에 변환을 하는 기술
    • 사설 네트워크에서 만든 패킷의 사설 IP 주소는 라우터를 거쳐 공인 IP 주소로 변경 후, 외부 네트워크로 전송
    • 외부 네트워크에서 받은 패킷의 공인 IP 주소는 라우터를 거쳐 사설 IP 주소로 변경 후, 사설 네트워크로 전송

정적 IP 주소와 동적 IP 주소

정적 할당

  • 정적 할당(정적 IP 주소, static IP address) - 호스트에게 수작업으로 IP 주소를 할당하는 방식
    • 정적으로만 할당하면 잘못되거나 이미 사용중인 IP 주소를 입력할 수 있음 (관리하기 까다로움)

동적 할당

  • 동적 할당(동적 IP 주소, dynamic IP address) - 호스트에게 자동으로 IP 주소를 할당하는 방식
  • DHCP(Dynamic Host Configuration Protocol) - IP 동적 할당에 사용되는 대표적인 프로토콜
  • 호스트DHCP 서버간에 메시지를 주고받음으로써 이루어짐
    • DHCP 서버는 라우터(혹은 공유기)가 역할을 수행함 (특정 호스트가 역할을 수행할 수도 있음)
    • DHCP 서버는 클라이언트에게 할당 가능한 IP 주소 목록을 관리하다가 요청할 때 IP 주소를 할당
  • 호스트와 DHCP 서버 간에 주고받는 메시지의 4가지 종류
    1. DHCP Discover (클라이언트 → DHCP 서버)
      • 클라이언트는 브로드캐스트로 DHCP Discover 메시지를 통해 DHCP 서버를 찾음
      • 클라이언트는 아직 IP 주소를 할당받지 못하여, 송신지 주소는 0.0.0.0으로 설정됨
    2. DHCP Offer (DHCP 서버 → 클라이언트)
      • DHCP 서버는 클라이언트에게 IP 주소(및 서브넷 마스크, 임대 기간)를 제안함
    3. DHCP Request (클라이언트 → DHCP 서버)
      • 클라이언트는 DHCP Offer에 대한 응답을 브로드캐스트로 전송함
    4. DHCP Acknowledgement(이하 DHCP ACK) (DHCP 서버 → 클라이언트)
      • DHCP 서버는 DHCP ACK 메시지를 보내며 최종 승인을 함
      • 클라이언트는 할당 받은 IP 주소를 설정하여 임대 기간이 도래될 때까지 사용함
  • DHCP 서버로부터 제공 받은 IP 주소는 임대 기간이 정해져 있어, 기간이 끝나면 DHCP 서버로 반납됨
    • IP 주소가 반납되면 다시 위의 4단계 과정을 거쳐 임대해야함
    • 임대 갱신(lease renewal) - 임대 기간이 끝나기 전에 임대 기간을 연장할 수 있음
      • 만약, 임대 갱신에 실패한 경우에는 해당 IP 주소는 DHCP 서버로 반납됨

좀 더 알아보기 - 예약 주소 : 0.0.0.0 vs. 127.0.0.1

  • 루프백 주소(loopback address; localhost) - 자기 자신을 가리키는 주소
    • 자신을 마치 다른 호스트로 간주하여 패킷을 전송할 수 있음 (주로 디버깅 용도로 사용됨)
  • 0.0.0.0/8 - 호스트가 IP 주소를 할당 받기 전에 임시로 사용하는 주소
    • DHCP Discover 메시지를 보낼 때의 패킷의 송신지 IP 주소와 같음
  • 0.0.0.0/0 - 모든 임의의 IP 주소 (보통 디폴트 라우트를 나타내기 위해 사용함)
    • 디폴트 라우트(default route) - 패킷을 어떤 IP 주소로 보내야 할지 모를 때, 기본적으로 패킷을 전달할 경로

03-3. 라우팅

라우터

  • 라우팅(routing) - 패킷이 이동할 최적의 경로를 결정한 뒤, 패킷을 이동하는 작업
  • 라우터(router; L3 switch) - 라우팅을 하는 네트워크 계층의 핵심 장비
    • 일반적으로 공유기가 라우터의 역할을 대신함 (공유기는 수많은 기능이 함축된 네트워크 장비)
  • 패킷은 여러 을 거쳐 라우팅됨
    • 홉(hop) - 호스트와 라우터, 혹은 라우터와 라우터 사이를 넘는 하나의 과정

라우팅 테이블

  • 라우팅 테이블(routing table) - 특정 수신지까지 도달하기위한 정보
    • 라우터는 라우팅 테이블을 바탕으로 특정 수신지까지의 도달 거리를 판단함

ℹ️ 라우팅 테이블에 포함된 정보는 라우팅 방식호스트 환경에 따라 달라질 수 있음

  • 라우팅 테이블에 포함된 핵심 정보
    1. 수신지 IP 주소서브넷 마스크 - 최종적으로 패킷을 전달할 대상
    2. 다음 홉(next hop; 게이트웨이) - 다음으로 거쳐야할 호스트의 IP 주소나 인터페이스
    3. 네트워크 인터페이스 - 패킷을 내보낼 통로
    4. 메트릭(metric) - 해당 경로로 이동하는데 발생하는 비용
      • 라우터는 경로의 메트릭 비용이 낮을수록 비교적 선호함
  • 기본 게이트웨이 - 호스트가 속한 네트워크 외부로 나아가기 위한 첫 경로
    • 디폴트 라우트는 보통 기본 게이트웨이를 뜻하는 경우가 많음

정적 라우팅

  • 정적 라우팅(static routing) - 사용자가 직접 라우팅 테이블을 채운 값을 바탕으로 라우팅하는 방식
    • 실수를 할 수도 있고, 직접 설정한 경로에 문제가 생기면 다른 경로로 일일이 변경해줘야함
  • 동적 라우팅(dynamic routing) - 자동으로 라우팅 테이블을 만든 값을 바탕으로 라우팅하는 방식
    • 더욱 편리하고, 경로에 문제가 생기더라도 해당 경로를 우회할 수 있게 자동으로 갱신됨
    • 모든 라우터는 특정 수신지까지의 최적의 경로를 찾고, 그 값을 라우터끼리 정보를 공유함
      • 해당 과정에서 라우팅 프로토콜이 사용됨

라우팅 프로토콜

  • AS(Autonomous System) - 한 집단에서(동일한 정책으로) 관리하는 라우터 집단
  • 라우팅 프로토콜(routing protocol) - 라우터끼리 정보를 공유하고, 패킷이 이동할 최적의 경로를 찾기 위한 프로토콜
  • 라우팅 프로토콜은 크게 AS 내부AS 외부로 종류를 나눌 수 있음
    1. IGP(Interior Gateway Protocol) - AS 내부에서 수행되는 프로토콜
      • RIP(Routing Information Protocol) - 거리 벡터 기반 라우팅 프로토콜
        • 거리 벡터 = 패킷이 경유한 라우터의 수 = 홉의 수 (홉 수가 가장 적은 경로)
        • 인접한 라우터끼리 경로 정보를 주기적으로 공유함
      • OSFP(Open Shortest Path First) - 링크 상태 기반 라우팅 프로토콜
        • 현재 네트워크 상태를 그래프 형태로 링크 상태 데이터베이스에 저장함
        • 대역폭을 기반으로 메트릭을 계산하며, 대역폭이 높을수록 메트릭이 낮은 경로로 인식
        • 네트워크 구성이 변경되었을 때에만 라우팅 테이블이 갱신됨
          • AS를 에어리어(area)라는 단위 내에서만 링크 상태를 공유함
          • 에이리어의 경계에는 ABR(Area Border Router)가 에이리어를 연결함
    2. EGP(Exterior Gateway Protocol) - AS 외부에서 수행되는 프로토콜
      • BGP(Border Gateway Protocol) - AS 간의 통신을 위해 사용되는 프로토콜
        • 피어(peer) - AS의 BGP 라우터와 또 다른 AS의 BGP 라우터를 연결한 것
        • BGF는 경로 결정 과정에서 수신지 주소 및 속성(경로 부가 정보)정책을 고려함
          1. AS-PATH - 패킷이 수신지에 이르는 과정에서 통과하는 AS의 목록
          2. NEXT-HOP - 다음 홉 (다음으로 거칠 라우터의 IP 주소)
          3. LOCAL-PREF - 지역 선호도

숙제

기본 숙제

  1. IPv4의 대표적인 기능 두 가지를 골라 보세요.
    • ① 신뢰성 있는 전송
      • (미리 예습) IP는 패킷이 제대로 전송되었다는 것을 보장하지 않음 (비신뢰성 통신)
    • ② IP 주소 지정
      • IP 주소를 바탕으로 송수신 대상을 지정할 수 있음
    • ③ IP 단편화
      • 패킷의 크기가 MTU 크기보다 큰 경우, MTU 크기보다 작은 크기로 패킷이 쪼개짐
    • ④ IP 주소 변환
      • IP 주소 변환 = NAT = 라우터에서 지원하는 기술
  2. 라우팅 프로토콜과 관련한 아래 설명을 읽고 옳은 것을 골라 보세요.
    • 라우팅 프로토콜은 AS 내부에서 수행되는 IGP와 AS 외부에서 수행되는 EGP로 나뉩니다. RIP는 대표적인 거리 벡터 라우팅 프로토콜이고, OSPF는 대표적인 링크 상태 라우팅 프로토콜입니다.

추가 숙제

  • 윈도우 환경의 경우, 명령 프롬프트 창에서 ipconfig /all을 입력하면 해당 정보를 볼 수 있다.

회고

이번 차시를 배우면서도 잘못 알고있었던 개념들이 정말 많았다. IP 주소의 옥텟마다 앞에서부터 A 클래스, B 클래스, C클래스, D클래스라고 알고 있었는데, 실상은 달랐다는 것이다. 그래서 그런지 다른 차시를 공부할 때보다 좀 더 집중하게된 것 같았다. 또한 그 무엇보다 흥미로웠던 점은 바로 서브넷 마스크이다. 해당 차시를 배우기 전에 수동으로 사설 IP 주소(정적 할당)를 설정할 일이 있을 때, IPv4 주소와 기본 게이트웨이, 그리고 DNS 주소는 그래도 그 주소의 역할에 대한 짐작이 어느정도 있었다. 하지만 서브넷 마스크는 255 혹은 0으로 표현되는 경우가 많아 "왜 2개의 수로만 표현하는 것일까?"라고 생각해보는 순간이 많았다. 그 궁금증이 해당 차시를 통해 왜 2개의 수로만 표현했는지(클래스 별 서브넷 마스크), 그리고 그 외의 수(비트)도 사용이 가능하다는 것을 알게 되어 무척 흥미로웠다 (결론적으로는 서브넷 마스크를 사용하는 이유를 알게 되었다는 것이다). 이번 차시에서 라우팅 부분이 생각보다 살짝 어려운 감이 있었는데, 개념이 어렵다기 보다는 이것이 어떻게 구현되고 하는 지에 대해서 머릿 속 생각으로 연결하려니 살짝 꼬이는 감이 있었다. 아마 이 부분에 대해서는 복습을 거듭할 필요가 있을 것 같다.

profile
개발도 하고 요리도 하는 노근본 개발자

0개의 댓글

관련 채용 정보