From 417e918abc3f2ec0e2f24d30116e196a2b518627 Mon Sep 17 00:00:00 2001 From: jalju0804 Date: Wed, 15 Apr 2026 20:53:48 +0900 Subject: [PATCH] =?UTF-8?q?6=EC=9E=A5=20network/subnet/port=20=EA=B0=9C?= =?UTF-8?q?=EB=85=90=20=EB=AC=B8=EC=84=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20import=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _quarto.yml | 8 +- .../network_subnet_port_1.png | Bin 0 -> 104258 bytes lectures/ch6/network_subnet_port.qmd | 422 ++++++++++++++++++ lectures/ch6_lec.qmd | 1 + lectures/index.qmd | 5 +- tools/scripts/import_notion_zip.py | 2 +- 6 files changed, 430 insertions(+), 8 deletions(-) create mode 100644 lectures/ch6/images/network_subnet_port/network_subnet_port_1.png create mode 100644 lectures/ch6/network_subnet_port.qmd diff --git a/_quarto.yml b/_quarto.yml index c5fe1e7..72a06d9 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -33,15 +33,13 @@ website: contents: - text: "6-1. Neutron의 agent에 대해 알아보기" file: lectures/ch6/neutron_agents.qmd + - text: "6-3. Network / Subnet / Port 개념 정리" + file: lectures/ch6/network_subnet_port.qmd - text: "6-12. SNAT/DNAT란?" file: lectures/ch6/snat_dnat.qmd - text: "6-15. OVS와 VXLAN를 이용해 가상 네트워크 만들기" file: lectures/ch6/ovs_vxlan_vpn.qmd - - - - format: html: theme: @@ -49,4 +47,4 @@ format: - custom.scss toc: true lang: ko - include-after-body: _footer.html \ No newline at end of file + include-after-body: _footer.html diff --git a/lectures/ch6/images/network_subnet_port/network_subnet_port_1.png b/lectures/ch6/images/network_subnet_port/network_subnet_port_1.png new file mode 100644 index 0000000000000000000000000000000000000000..028512952da8ade064d4676289ed78455cca22a2 GIT binary patch literal 104258 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 literal 0 HcmV?d00001 diff --git a/lectures/ch6/network_subnet_port.qmd b/lectures/ch6/network_subnet_port.qmd new file mode 100644 index 0000000..7926b84 --- /dev/null +++ b/lectures/ch6/network_subnet_port.qmd @@ -0,0 +1,422 @@ +--- +title: "6-3. Network / Subnet / Port 개념 정리" +description: "OpenStack Neutron의 Network, Subnet, Port가 각각 어떤 계층과 역할을 담당하는지 정리하고, `openstack` CLI로 각 객체를 조회하는 방법까지 함께 설명합니다." +code: "6-3" +--- + +여기서 말하는 Network, Subnet, Port는 **OpenStack Neutron**의 객체를 기준으로 설명합니다. + +## [6-3-1] Network + +### 정의 + +**Network는 동일한 L2 브로드캐스트 도메인을 표현하는 논리적 네트워크 객체입니다.** + +### 정확한 의미 + +동일 Network에 연결된 Port들은 다음과 같이 동작합니다. + +- 같은 Ethernet 세그먼트에 있는 것처럼 동작합니다. +- ARP 브로드캐스트가 서로 도달합니다. + +즉, Network는 “어디까지가 같은 L2 네트워크인가”를 정의하는 L2 연결 범위 객체입니다. + +## [6-3-2] Subnet + +### 정의 + +**Subnet은 특정 Network에 적용되는 L3(IP) 주소 체계와 관련 설정을 정의하는 객체입니다.** + +### 정확한 의미 + +- Subnet은 다음 정보를 **정의만** 합니다 + - IP CIDR (`192.168.0.0/24`) + - 게이트웨이 + - DHCP 설정 + - DNS 설정 + +중요한 점은 다음과 같습니다. + +- Subnet은 IP를 **소유하지 않습니다.** +- Subnet은 트래픽을 **직접 처리하지 않습니다.** + +Subnet은 단지 “이 Network에서 사용할 수 있는 IP 범위와 설정은 무엇인가”를 정의할 뿐이고, 실제 IP 할당과 트래픽은 다른 객체가 담당합니다. + +즉, Subnet은 Network에 적용되는 **IP 규칙 정의 객체**입니다. + +## [6-3-3] Port + +### 정의 + +**Port는 Network에 연결되는 L2/L3 엔드포인트를 표현하는 객체이며, Neutron에서 IP·보안·연결의 최소 단위입니다.** + +### 정확한 의미 + +Port는 다음과 같은 정보를 **실제 소유**합니다. + +- MAC 주소 +- IP 주소(들) +- Security Group(보안 규칙) +- 해당 엔드포인트로 드나드는 실제 네트워크 트래픽 + +Neutron에서 Port는 기본적으로 L2 관점의 “네트워크 인터페이스”에 해당하는 객체이고, 여기에 L3 주소(IP)와 보안 설정(Security Group)을 **붙여서 관리하는 단위**라고 볼 수 있습니다. + +Port는 VM, Router, Load Balancer 등과 1:1로 연결됩니다. + +Neutron 안에서 네트워크 트래픽은 항상 어떤 Port를 통해 드나듭니다. + +## [6-3-4] 다시 한 번 정리 + +Neutron에서 “연결”이란 Port를 생성해 Network에 붙이는 행위를 의미합니다. + +그래서 “VM이 Network에 직접 붙는다”라고 말하는 것은 엄밀하지 않고, 보다 정확한 표현은 다음과 같습니다. + +- VM이 Port를 통해 Network에 연결됩니다. + +즉, Port는 실제 트래픽과 IP가 존재하는 **연결의 최소 단위**입니다. + +### 핵심 사실 + +> **Neutron에서 “연결”이란 Port를 생성하는 행위입니다.** +> + +VM이 Network에 붙는다는 말은 정확하지 않습니다. + +정확한 표현은: + +> **VM이 Port를 통해 Network에 연결됩니다.** +> + +즉 Port = 실제 트래픽과 IP가 존재하는 연결 단위입니다. + + +## [6-3-5] 예시와 함께 이해 + +기본적인 개념 정리는 끝이 났고 예시와 함께 개념을 더 명확히 이해해봅시다. + +![그림 6-3-5-1. Network, Subnet, Port 관계 예시](images/network_subnet_port/network_subnet_port_1.png){width="70%" fig-align="left"} + +네트워크를 현실 생활에 연관 지어보자면, Wi-Fi를 생각하면 됩니다. + +집에 들어오면 우리 모두 보통 Wi-Fi를 연결해서 사용합니다. + +이때 Wi-Fi가 닿는 영역을 하나의 **네트워크**라고 생각해볼 수 있습니다. + +이 네트워크 안에 있는 기기들은 서로 브로드캐스트를 받을 수 있고, + +ARP 요청이 도달하며, 마치 같은 Ethernet 세그먼트에 있는 것처럼 동작합니다. + +즉, 이 단계에서의 네트워크는 “어디까지가 같은 L2 네트워크인가”를 정의하는 영역입니다. + +이제 조금 더 자세히 생각을 넓혀봅시다. + +휴대폰이 Wi-Fi에 연결되는 순간 사실 내부적으로는 IP 주소가 하나 할당됩니다. + +공유기 안에는 이미 이런 설정이 있을 겁니다. + +```text +192.168.0.0/24 +DHCP:ON +Gateway:192.168.0.1 +``` + +이 설정은 특정 기기에 붙어 있지 않습니다. “이 Wi-Fi에서는 이런 IP 규칙을 쓴다”라고 정의되어 있는 것 입니다. + +이것이 **Subnet** 입니다. Subnet은 이 시점에 이렇게 행동한다고 보면 됩니다. + +> 이 Network에 붙는 애들은 192.168.0.0/24 범위 안에서 IP를 씁니다. +> + +중요한 점은, Subnet은 IP를 **가지지 않는다**는 것 입니다. + +Subnet은 IP를 **직접 쓰지도 않습니다**. 그저 IP를 어떻게 써야 하는지에 대한 **규칙만 제공합니다**. + + +그렇다면 실제로 IP를 가지는 객체는 무엇일까요? + +바로 휴대폰의 **Wi-Fi 네트워크 인터페이스**입니다. MAC 주소를 가지고 있고, 실제로 패킷을 송수신하는 실질적인 존재가 바로 **Port**입니다. + +Port는 지금 이 모든 걸 갖고 있습니다 + +- MAC 주소 +- IP 주소 (예: 192.168.0.23) +- 방화벽 규칙 +- 실제 네트워크 트래픽 + +Subnet은 규칙을 줬을 뿐이고, 그 규칙을 실제로 적용하고 동작시키는 건 **Port** 입니다. + +즉, Port가 Subnet의 규칙을 **실체화**합니다. + +즉 간단하게 정리하자면, + +- Network: 같은 L2 브로드캐스트 도메인, 즉 “같이 브로드캐스트가 도달하는 L2 네트워크 범위” +- Subnet: 그 Network에서 사용할 **IP 주소 범위, 게이트웨이, DHCP, DNS 등 L3 규칙 세트** +- Port: 실제 MAC·IP를 가지고 트래픽이 오가는 **엔드포인트(네트워크 인터페이스) 단위** + +그리고 마지막으로 가장 중요한 관점을 다시 한 번 정리하면: + +> 기기가 네트워크에 직접 연결되는 것이 아니라, 기기의 네트워크 인터페이스(Port)가 Network에 연결됩니다. +> + +## [6-3-6] Neutron 객체 목록/내용 조회 실습 + +개념을 머리로 이해했다면, 이제는 CLI로 **Network / Subnet / Port를 직접 조회하는 걸 진행해봅시다.** + +> 아래 예시는 **OpenStackClient(= `openstack` CLI)** 를 기준으로 작성했습니다. + +다음과 같은 시나리오로 검색합니다. +> +> +> **시나리오 1)** 특정 **서브넷/네트워크**에서 실제로 사용 중인 **Port 목록 조회** +> +> **시나리오 2)** 특정 **인스턴스(Server)** 에 연결된 **Port(네트워크 인터페이스) 목록 조회** +> + +## [6-3-6-1] 기본 목록/상세 조회 + +### Network 목록 + +```bash +openstack network list +``` + +- Neutron에 존재하는 **Network 목록**(ID/이름 등)을 조회합니다. + +**예시 출력(포맷)** + +```text ++--------------------------------------+--------------+--------------------------------------+ +| ID | Name | Subnets | ++--------------------------------------+--------------+--------------------------------------+ +| 11111111-1111-1111-1111-111111111111 | wifi-network | 22222222-2222-2222-2222-222222222222 | ++--------------------------------------+--------------+--------------------------------------+ +``` + +--- + +### Network 상세 + +```bash +openstack network show +``` + +- 특정 **Network 객체의 상세 속성**을 조회합니다. +- ``: 조회할 Network의 **ID(UUID)** 또는 **Name** (`openstack network list`에서 확인) + +**예시 출력(포맷)** + +```text ++---------------------------+--------------------------------------+ +| Field | Value | ++---------------------------+--------------------------------------+ +| id | 11111111-1111-1111-1111-111111111111 | +| name | wifi-network | +| status | ACTIVE | +| subnets | 22222222-2222-2222-2222-222222222222 | +| router:external | Internal | +| mtu | 1450 | ++---------------------------+--------------------------------------+ +``` + +--- + +### Subnet 목록 + +```bash +openstack subnet list +``` + +- Neutron에 존재하는 **Subnet 목록**(ID/이름/CIDR 등)을 조회합니다. + +**예시 출력(포맷)** + +```text ++--------------------------------------+--------------+--------------------------------------+--------------+ +| ID | Name | Network | Subnet | ++--------------------------------------+--------------+--------------------------------------+--------------+ +| 22222222-2222-2222-2222-222222222222 | wifi-subnet | 11111111-1111-1111-1111-111111111111 | 192.168.0.0/24 | ++--------------------------------------+--------------+--------------------------------------+--------------+ +``` + +--- + +### Subnet 상세 + +```bash +openstack subnet show +``` + +- 특정 **Subnet 객체의 상세 속성**(CIDR, gateway, DHCP 등)을 조회합니다. +- ``: 조회할 Subnet의 **ID(UUID)** 또는 **Name** (`openstack subnet list`에서 확인) + +**예시 출력(포맷)** + +(그림의 Subnet 값 반영: `192.168.0.0/24`, `DHCP:ON`, `Gateway:192.168.0.1`) + +```text ++----------------------+--------------------------------------+ +| Field | Value | ++----------------------+--------------------------------------+ +| id | 22222222-2222-2222-2222-222222222222 | +| name | wifi-subnet | +| network_id | 11111111-1111-1111-1111-111111111111 | +| cidr | 192.168.0.0/24 | +| enable_dhcp | True | +| gateway_ip | 192.168.0.1 | +| allocation_pools | 192.168.0.2-192.168.0.254 | ++----------------------+--------------------------------------+ +``` + +--- + +### Port 목록 + +```bash +openstack port list +``` + +- Neutron에 존재하는 **Port 목록**(ID/이름/MAC/Fixed IP 등)을 조회합니다. + +**예시 출력(포맷)** + +(그림의 Port 값 반영: `MAC=AA:BB:CC:DD`, `IP=192.168.0.23`) + +```text ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +| ID | Name | MAC Address | Fixed IP Addresses | Status | ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +| 33333333-3333-3333-3333-333333333333 | wifi-port | AA:BB:CC:DD | ip_address='192.168.0.23', subnet_id='22222222-2222-2222-2222-222222222222' | ACTIVE | ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +``` + +--- + +### Port 상세 + +```bash +openstack port show +``` + +- 특정 **Port 객체의 상세 속성**(MAC, fixed_ips, security groups, device_owner/device_id 등)을 조회합니다. +- ``: 조회할 Port의 **ID(UUID)** 또는 **Name** (`openstack port list`에서 확인) + +**예시 출력(포맷)** + +(그림의 Port 값 반영: `MAC=AA:BB:CC:DD`, `IP=192.168.0.23`) + +```text ++-------------------------+----------------------------------------------------------------------------------+ +| Field | Value | ++-------------------------+----------------------------------------------------------------------------------+ +| id | 33333333-3333-3333-3333-333333333333 | +| name | wifi-port | +| network_id | 11111111-1111-1111-1111-111111111111 | +| mac_address | AA:BB:CC:DD | +| fixed_ips | ip_address='192.168.0.23', subnet_id='22222222-2222-2222-2222-222222222222' | +| status | ACTIVE | +| admin_state_up | UP | +| device_owner | compute:nova | +| device_id | 44444444-4444-4444-4444-444444444444 | ++-------------------------+----------------------------------------------------------------------------------+ +``` + +--- + +## [6-3-6-2] 시나리오 1) 특정 서브넷/네트워크에서 사용하는 포트 목록 조회 + +### 1-A) 특정 네트워크에서 사용하는 포트 목록 + +```bash +openstack port list --network +``` + +- 지정한 **Network에 연결된 Port 목록**을 조회합니다. +- `-network `: 조회 범위를 **해당 Network에 속한 Port**로 제한합니다. +- ``: 대상 Network의 **ID(UUID)** 또는 **Name** (`openstack network list`에서 확인) + +**예시 출력(포맷)** + +```text ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +| ID | Name | MAC Address | Fixed IP Addresses | Status | ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +| 33333333-3333-3333-3333-333333333333 | wifi-port | AA:BB:CC:DD | ip_address='192.168.0.23', subnet_id='22222222-2222-2222-2222-222222222222' | ACTIVE | ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +``` + +--- + +### 1-B) 특정 서브넷에서 사용하는 포트 목록 + +```bash +openstack port list --fixed-ip subnet= +``` + +- 지정한 **Subnet의 IP를 사용하는 Port 목록**(해당 서브넷의 fixed IP가 할당된 포트들)을 조회합니다. +- `-fixed-ip subnet=`: Port의 **fixed IP 정보** 기준으로 필터를 적용합니다. +- `subnet=`: fixed IP들 중 **해당 Subnet에 속한 IP를 가진 Port**를 대상으로 합니다. +- ``: 대상 Subnet의 **ID(UUID)** 또는 **Name** (`openstack subnet list`에서 확인) + +**예시 출력(포맷)** + +```text ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +| ID | Name | MAC Address | Fixed IP Addresses | Status | ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +| 33333333-3333-3333-3333-333333333333 | wifi-port | AA:BB:CC:DD | ip_address='192.168.0.23', subnet_id='22222222-2222-2222-2222-222222222222' | ACTIVE | ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +``` + +--- + +## [6-3-6-3] 시나리오 2) 인스턴스에 연결된 포트 목록 조회 + +### 2-A) 인스턴스(서버)에 연결된 포트 목록 (Port 기준) + +```bash +openstack port list --server +``` + +- 지정한 **인스턴스에 연결된 Neutron Port 목록**을 조회합니다. +- `-server `: 조회 범위를 **해당 Server(인스턴스)에 연결된 Port**로 제한합니다. +- ``: 대상 Server의 **ID(UUID)** 또는 **Name** (`openstack server list`에서 확인) + +**예시 출력(포맷)** + +(서버가 “스마트폰(=기기/VM)”에 해당한다고 보면 됨) + +```text ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +| ID | Name | MAC Address | Fixed IP Addresses | Status | ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +| 33333333-3333-3333-3333-333333333333 | wifi-port | AA:BB:CC:DD | ip_address='192.168.0.23', subnet_id='22222222-2222-2222-2222-222222222222' | ACTIVE | ++--------------------------------------+-----------+-------------------+------------------------------------------------------------------------------+--------+ +``` + +--- + +### 2-B) 인스턴스의 네트워크 인터페이스 목록 (서버 인터페이스 기준) + +```bash +openstack server interface list +``` + +- 지정한 인스턴스의 **네트워크 인터페이스(= 연결된 포트) 목록**을 조회합니다. +- (보통 Port ID, MAC, Fixed IP, Network 정보가 함께 나옵니다.) +- ``: 대상 Server의 **ID(UUID)** 또는 **Name** (`openstack server list`에서 확인) + +**예시 출력(포맷)** + +(환경/클라이언트 버전에 따라 컬럼명은 조금 다를 수 있지만 보통 이런 형태) + +```text ++--------------------------------------+--------------------------------------+-------------------+--------------+ +| Port ID | Network ID | MAC Address | Fixed IPs | ++--------------------------------------+--------------------------------------+-------------------+--------------+ +| 33333333-3333-3333-3333-333333333333 | 11111111-1111-1111-1111-111111111111 | AA:BB:CC:DD | 192.168.0.23 | ++--------------------------------------+--------------------------------------+-------------------+--------------+ +``` + +## [6-3-7] 참조 + +[OpenStack Liberty 설치 가이드의 Neutron 개념 설명 문서](https://docs.openstack.org/liberty/ko_KR/install-guide-obs/neutron-concepts.html) diff --git a/lectures/ch6_lec.qmd b/lectures/ch6_lec.qmd index 9ac3b48..ff20f4f 100644 --- a/lectures/ch6_lec.qmd +++ b/lectures/ch6_lec.qmd @@ -9,5 +9,6 @@ Neutron은 오픈스택의 네트워킹 서비스입니다. 이 장에서는 Neu ## 하위 목차 - [6-1 Neutron 에이전트 종류 정리](ch6/neutron_agents.qmd) +- [6-3 Network / Subnet / Port 개념 정리](ch6/network_subnet_port.qmd) - [6-12 SNAT/DNAT 개념](ch6/snat_dnat.qmd) - [6-15 OVS/VXLAN 가상 네트워크 만들기](ch6/ovs_vxlan_vpn.qmd) diff --git a/lectures/index.qmd b/lectures/index.qmd index e0e9993..e12d668 100644 --- a/lectures/index.qmd +++ b/lectures/index.qmd @@ -16,6 +16,7 @@ title: "오픈스택 강의 자료" - [4-1장. nova의 서비스 종류]() - [5장. Glance]() - [6장. Neutron](ch6_lec.qmd) - - [SNAT/DNAT 개념](ch6/snat_dnat.qmd) - [Neutron Agent 종류 정리](ch6/neutron_agents.qmd) - - [OVS/VXLAN 가상 네트워크 만들기](ch6/ovs_vxlan_vpn.qmd) \ No newline at end of file + - [6-3. Network / Subnet / Port 개념 정리](ch6/network_subnet_port.qmd) + - [SNAT/DNAT 개념](ch6/snat_dnat.qmd) + - [OVS/VXLAN 가상 네트워크 만들기](ch6/ovs_vxlan_vpn.qmd) diff --git a/tools/scripts/import_notion_zip.py b/tools/scripts/import_notion_zip.py index 30cd82c..fe7d986 100644 --- a/tools/scripts/import_notion_zip.py +++ b/tools/scripts/import_notion_zip.py @@ -233,7 +233,7 @@ def main(): zip_path = Path(zip_arg).resolve() if not zip_path.exists(): - imports_chapter = IMPORTS_DIR / chapter + imports_chapter = IMPORTS_DIR / chapter if '/' not in zip_arg and '\\' not in zip_arg and not imports_chapter.exists(): imports_chapter.mkdir(parents=True) print(f"tools/imports/{chapter}/ 폴더를 생성했습니다. ZIP 파일을 넣어주세요: {imports_chapter}")