스위치의 패킷 플로우 & 핸드오버

해담·2024년 12월 5일

mininet-wifi 스위치의 패킷 플로우

  • open virtual switch

    • OVS: Open VSwitch
    • p91
  • open virtual switch는 sudo apt-get install openvswitch-common 명령어를 통해 설치할 수 있음

  • sudo ovs-vsctl show 명령어로 설치 확인

  • sudo mn --topo single,4 으로 유선 네트워크 구성

    • 4개 호스트 : h1, h2, h3, h4
    • 1개 스위치 : s1
    • 1개 컨트롤러 : c0
      • ap1 (s1) s1-eth1 → h1 (sta1)과 연결
      • ap1 (s1) s1-eth2 → h2 (sta1)와 연결
      • ap1 (s1) s1-eth3 → h3 (sta1)과 연결
      • ap1 (s1) s1-eth4 → h4 (sta1)와 연결
    • 그림은 무선 네트워크임 : 유선 네트워크와 토폴로지와 동일함
  • 네트워크 구성 후 패킷을 생성하고, s1 스위치가 하는 일에 대해 학습함

    • 현재는 ping request 가 발생하지 않았으므로, s1이 아직 어떤 패킷도 전송하지 않은 상태임
      -sh ovs-ofctl dump-flows s1 명령어로 s1 스위치에 발생한 패킷 흐름을 조사
  • 아직 어떤 패킷도 생성되지 않았음으로, sh ovs-ofctl dump-flows s1 명령어는 어떤 플로우도 나타내지 않음

  • s1 스위치에서 패킷 흐름에 대한 규칙 작성 가능

    • 기존에 스위치에서 플로우가 설정이 되어 있더라도 변경할 수 있음을 의미함
    • s1의 1번 port로 들어오는 패킷은 2번 port로 출력되도록 하는 규칙 작성 가
      • in_port=1,actions=output:2
    • s1의 2번 port로 들어오는 패킷은 1번 port로 출력되도록 하는 규칙 작성 가능
      • in_port=2,actions=output:1
        • ap1 (s1) in_port(1) s1-eth1 → h1과 연결 (output:1)
        • ap1 (s1) in_port(2) s1-eth2 → h2와 연결 (output:2)
        • ap1 (s1) in_port(3) s1-eth3 → h3과 연결 (output:3)
        • ap1 (s1) in_port(4) s1-eth4 → h4와 연결 (output:4)
  • sh ovs-ofctl dump-flows s1 명령어는 s1 패킷 스위치 테이블에 적용된 규칙을확인하는 명령어

    • in_port=1은 in_port="s1-eth1" 로 패킷 플로우가 구성되고
      • ap1 (s1) in_port(1) s1-eth1 → h1과 연결 (output:1)
    • output:2는 output:"s1-eth2" 로 패킷 플로우가 구성이 됨
      • ap1 (s1) in_port(2) s1-eth2 → h2와 연결 (output:2)
  • h1 ping -c1 h2 명령어로 s1이 h1에서 온 패킷을 h2로 전달해 주는 것을 확인

  • sh ovs-ofctl add-flow s1 in_port=3,actions=drop

    • s1의 입력 포트 3번에 연결된 h3에서 오는 패킷은 drop하는 명령어임
    • actions=drop, 패킷 플로우에 대한 제어를 발생함
    • h4에서 오는 ping request 명령어가 h3에 도달하지 못함
  • sh ovs-ofctl add-flow s1 in_port=3,actions=drop 으로 h3 ping -c1 h4 100% packet loss 가 일어남

  • in_ports=”s1-eth3” 포트는 actions=drop으로 인해 h3 ping -c1 h4가 동작하지 않음 확인

  • sh ovs-ofctl add-flow s1 in_port=3,actions=drop → actions=”s1-eth3”라고 수정해도 h3 ping -c1 h4가 동작하지 않음 확인

  • actions=”s1-eth4”로 해야 동작함

    • actions은 output flow를 설정하는 것임



mininet-wifi 스위치의 핸드오버

  • sudo python mn-wifi-book-en/codes/cap3/handover.py 파일을 사용함

  • 네트워크 구성도에는 s3와 h1이 나타나지 않음

    • ap1 과 ap2는 같은 s3에 연결되어 있고, s3에 h1이 연결된 구조
    • sta1은 이동 전 ap1에 연결됨
    • sta1은 이동 후 ap2에 연결됨
    • nodes : ap1, ap2, c1, h1, s3, sta1 으로 구성
  • sta1 이동 전 접속 상태

    • 스위치 플로우 명령어를 사용하여 확인함

    • sta1 ping -c1 h1 명령어 실행 후

    • sh ovs-ofctl dump-flows s3 명령어를 실행해 보면,

    • 현재 sta1이 ap1에 접속해서 s3로 접속하고 있음을 확인할 수 있다.

      • s3의 in_port="s3-eth3" 는 h1과 연결됨
      • s3의 actions=output:"s3-eth1" 는 ap1을 통해 sta1과 연결됨
      • 즉 h1이 s3 스위치를 통과해서 ap1를 통해 sta1과 연결됨
      • priority=65535,arp,in_port="s3-eth3",vlan_tci=0x0000,dl_src=b6:ec:a0:f1:c0:c7,dl_dst=02:00:00:00:00:00,arp_spa=10.0.0.2,arp_tpa=10.0.0.1,arp_op=2 actions=output:"s3-eth1"

현재까지 코드 내용

  • 핸드오버 진행

    • sta1 이동 후 ap2에 접속
  • sta1 이동 후 접속 상태

    • 스위치 플로우 명령어 사용
    • sta1 ping -c5 h1 명령어 실행 후
    • sh ovs-ofctl dump-flows s3 명령어를 실행해 보면,
    • 현재 sta1이 ap2에 접속해서 s3로 접속하고 있음을 확인할 수 있다.
      • s3의 in_port="s3-eth3" 는 h1과 연결됨
      • s3의 actions=output:"s3-eth2” 는 ap2를 통해 sta1과 연결됨
      • 즉 h1이 s3 스위치를 통과해서 ap2를 통해 sta1과 연결됨

profile
해담이를먹여살리기위한..

0개의 댓글