ARP 를 통한 브로드캐스트 트래픽 생성 및 브로드캐스트 MAC 주소 식별
이 단계에서는 유니캐스트 트래픽과 브로드캐스트 트래픽을 대조합니다. 유니캐스트는 일대일 메시지인 반면, 브로드캐스트는 로컬 네트워크 세그먼트의 모든 장치로 전송되는 일대다 메시지입니다. 이의 주요 예는 특정 IP 주소와 관련된 MAC 주소를 찾기 위해 사용되는 **주소 결정 프로토콜 (ARP)**입니다. 이를 위해 장치는 "이 IP 주소를 가진 사람은 누구인가?"라고 묻는 브로드캐스트 프레임을 보냅니다.
먼저 새 tcpdump 캡처를 시작합니다. 이번에는 ARP 패킷만 표시하도록 필터를 추가합니다. 또한 tcpdump가 IP 주소를 호스트 이름으로 확인하는 것을 방지하기 위해 -n 플래그를 사용하고 출력을 더 깔끔하게 만들기 위해 -q를 사용합니다.
터미널에서 다음 명령을 실행하고, 1 단계에서 사용한 인터페이스 이름으로 eth0을 바꾸는 것을 잊지 마십시오.
## 실제 인터페이스 이름으로 eth0을 바꾸세요.
sudo tcpdump -i eth0 -e -n -q 'arp'
tcpdump가 이제 수신 대기하지만 ARP 트래픽만 대상으로 합니다.
다음으로 ARP 요청을 트리거해야 합니다. 이를 수행하는 확실한 방법은 시스템의 ARP 캐시를 지운 다음 로컬 네트워크의 다른 장치 (예: 게이트웨이 라우터) 에 연결을 시도하는 것입니다. 캐시를 지우면 시스템이 ARP 를 사용하여 게이트웨이의 MAC 주소를 다시 찾아야 합니다.
새 터미널을 엽니다. 먼저 ip route 명령으로 게이트웨이의 IP 주소를 찾습니다.
ip route | grep default
출력에는 기본 경로가 표시되며, "via" 뒤에 나열된 IP 주소가 게이트웨이입니다.
default via 172.16.50.1 dev eth0
참고: 게이트웨이 IP 주소는 다를 가능성이 높습니다. 아래 단계에서는 이 명령의 IP 주소를 사용하는 것이 중요합니다. 일반적인 실수는 종종 로컬 Docker 네트워크의 게이트웨이인 172.17.0.1과 같은 다른 IP 를 사용하는 것인데, 이는 이 연습에서 올바른 결과를 생성하지 않습니다.
이 예에서 게이트웨이는 172.16.50.1입니다. 이제 ip neigh flush 명령을 사용하여 ARP 캐시를 지웁니다. 이렇게 하면 알려진 MAC 주소 매핑이 제거되어 시스템이 다시 찾기 위해 ARP 를 사용하도록 강제합니다.
sudo ip -s -s neigh flush dev eth0
삭제된 항목을 확인하는 출력이 표시될 수 있습니다. 마지막으로 게이트웨이를 한 번만 ping하여 ARP 조회를 트리거합니다.
## 실제 게이트웨이 IP로 172.16.50.1을 바꾸세요.
ping -c 1 172.16.50.1
이제 tcpdump가 실행 중인 첫 번째 터미널로 돌아갑니다. 생성된 ARP 트래픽을 볼 수 있습니다. "Request" 줄을 찾으십시오.
10:30:01.123456 00:16:3e:01:be:b3 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: ARP, Request who-has 172.16.50.1 tell 172.16.50.8, length 28
이 브로드캐스트 프레임을 분석해 보겠습니다.
00:16:3e:01:be:b3: 소스 MAC 주소 (VM) 입니다.
ff:ff:ff:ff:ff:ff: 이것은 특수한 브로드캐스트 MAC 주소입니다. 스위치가 이 대상 주소가 있는 프레임을 보면 모든 포트에서 모든 연결된 장치로 전달합니다.
ethertype ARP: 프레임의 페이로드가 ARP 패킷임을 나타냅니다.
ARP, Request who-has 172.16.50.1 tell 172.16.50.8: 이것은 ARP 메시지 자체로, 전체 네트워크에 172.16.50.1의 MAC 주소를 묻는 브로드캐스트 질문입니다.
게이트웨이에서 VM 의 MAC 주소로 직접 전송되는 유니캐스트 프레임인 "Reply" 패킷도 볼 수 있습니다.
이제 해당 터미널에서 Ctrl+C를 눌러 tcpdump 캡처를 중지할 수 있습니다.