2023.01.13 - [네트워크 Network/가상 머신 Ubuntu] - Ubuntu에서 Mininet(미니넷) 구축하기 | 환경 구축 - 1
Ubuntu에서 Mininet(미니넷) 구축하기 | 환경 구축 - 1
*2023 - 03- 24 내용 보충 및 수정하였습니다. 그리고 포스팅 길이가 길고 삽입된 이미지가 많아서 포스팅 로딩시간이 다소 길 수 있어서, 환경구축과 파이썬코드 및 결과 두개의 글로 나눠서 다시
jelong.tistory.com
파이썬 코드
코드는 위에서부터 순차적으로 설명하겠습니다
Fig. 8 미니넷 파이썬 라이브러리 설치합니다.
1. Mininet()
위의 내용에서는 Mininet에서 사용될 Topology를 정의하는 myTopo() 함수를 만들고, 이 함수가 리턴하는 값은 없음을 설명합니다.
Mininet은 가상의 네트워크를 만들어 테스트할 수 있는 오픈소스 소프트웨어로,
topo 파라미터를 사용하여 Topology 객체를 전달하고,
autoSetMacs 파라미터를 사용하여 MAC 주소를 IP 주소와 같이 자동으로 설정할 수 있습니다.
build 파라미터는 Topology 객체를 빌드할지 여부를 지정하는 데 사용되며,
ipBase 파라미터는 호스트들의 기본 IP 주소를 설정하는 데 사용됩니다.
net.addHost() || addSwitch()
위의 내용에서는 Mininet에서 호스트와 스위치를 설정하는 방법을 설명합니다
호스트는 addHost() 함수를 사용하여 설정할 수 있으며,
해당 함수는 호스트의 이름, 클래스 및 생성자 등의 파라미터를 받아 호스트를 생성합니다.
스위치는 addSwitch() 함수를 사용하여 설정할 수 있으며,
해당 함수는 스위치의 이름, 클래스, 실패 모드 등의 파라미터를 받아 스위치를 생성합니다.
따라서,
addHost(name=이름, cls=클래스 혹은 constructor을 제작한다(custom), defaultRoute=None)
addSwitch(name=이름, cls=클래스 혹은 constructor을 제작한다(custom), failMode='standalone' or 'secure')의 형식으로 호스트와 스위치를 설정할 수 있습니다.
net.addLink()
위의 내용에서는 Mininet에서 호스트와 스위치를 설정하고 addLink() 함수를 사용하여 전부 연결시키는 방법을 설명합니다.
addLink() 함수는 두 개의 매개변수(호스트/스위치 객체)를 받아서 연결(link)을 만들어줍니다.
예를 들어, 호스트 1, 2, 3과 스위치 1을 연결시키려면 위와 같이 addLink() 함수를 총 3번 사용하여 연결을 설정하면 됩니다.
setIP(intf = , ip =)
위의 내용에서는 Mininet에서 addHost() 함수를 사용하여 호스트를 설정하고, 호스트의 인터페이스(eth0)와 IP 주소를 설정하는 방법을 설명합니다.
호스트를 생성한 후,
intf() 함수를 사용하여 호스트의 인터페이스(eth0)를 가져온 후,
ip() 함수를 사용하여 해당 인터페이스에 IP 주소를 설정합니다.
net.build() & net.start()
위의 내용에서는 Mininet에서 net.build()와 net.start() 함수를 사용하여 가상 네트워크를 구축하고 시작하는 방법을 설명합니다.
net.build() 함수를 사용하여 네트워크를 구축합니다. 이 함수를 호출하면 Mininet은 구성한 모든 노드와 링크를 사용하여 가상 네트워크를 만듭니다.
CLI() 함수는 Mininet에서 가상 네트워크를 제어하고 관리하기 위한 인터페이스를 제공합니다. 이 함수를 호출하면 Mininet CLI(Command Line Interface)를 실행할 수 있습니다. 이 CLI를 통해 가상 네트워크를 관리하고, 각 노드 간의 통신을 테스트할 수 있습니다.
예를 들어, h2에서 h3로 ping 명령을 보내고자 할 경우, CLI 명령어 창에서 다음과 같이 입력합니다:
mininet> h2 ping h3
if __name__ == '__main__':
마지막으로 main() 함수에서 myTopo() 함수를 호출합니다. 이 함수는 앞서 정의한 가상 네트워크 구성 정보를 포함하고 있는 Topology 객체를 반환합니다. 이 객체를 Mininet 클래스의 인스턴스를 생성할 때 인자로 전달하여 가상 네트워크를 생성하고 실행합니다.
위 코드에서 setLogLevel('info') 함수는 Mininet의 로그 레벨을 설정합니다. 'info' 레벨은 로그를 상세히 출력하는 레벨 중 하나입니다.로깅 레벨은 setLogLevel() 함수를 사용하여 설정할 수 있으며, 다음과 같은 레벨을 지원합니다.
- debug: 가장 상세한 로그 레벨입니다. 디버깅용으로 사용됩니다.
- info: 일반적인 정보를 제공하는 로그 레벨입니다.
- output: 출력 결과를 로그로 기록합니다.
- warning: 경고 메시지를 로그로 기록합니다.
- error: 오류 메시지를 로그로 기록합니다.
Github
아래의 주소로 가면 전체 코드를 다운받으실 수 있습니다
https://github.com/qkrwoghd04/Mininet-topology
GitHub - qkrwoghd04/Mininet-topology
Contribute to qkrwoghd04/Mininet-topology development by creating an account on GitHub.
결과
콘솔에 파이썬 파일을 실행하고,
Fig. 16 보면 h1, h2, h3와 s1 스위치가 정상적으로 노출되는 것을 확인할 수 있습니다
위의 코드와 같이 pingall 커맨드를 입력하면, Mininet은 모든 호스트 간에 상호 통신이 가능한지 확인합니다. pingall은 모든 호스트들이 서로를 핑(ping)으로 호출하여 서로에게 도달할 수 있는지 여부를 확인합니다.
이 경우, dropped 없이 모든 호스트들이 정상적으로 연결되어 있는 것을 확인할 수 있었습니다. 또한, h1에서 h3로 핑을 정상적으로 보낼 수 있는 것을 확인할 수 있었습니다. 이를 통해, 이전에 작성한 networkTopo.py 파일이 제대로 작성되었고, Mininet을 통해 구축된 가상 네트워크가 정상적으로 작동하는 것을 확인할 수 있습니다.