본문 바로가기

네트워크

[네트워크] 28. ARP, 트랜스패런트 브리징

이 게시물은 <킹 오브 네트워킹 (피터전)>을 공부한 내용을 바탕으로 작성됨.

 


 

ARP (Address Resolution Protocol)

 

이더넷 프레임을 만들기 위해서는 출발지 MAC address와 목적지 MAC address가 필요하다. 출발지와 목적지가 통신을 한 번 수행했던 전적이 있으면 출발지는 목적지 MAC address를 알기 때문에 이더넷 프레임을 만들 수 있다. 하지만 둘이 초면이라면 출발지는 목적지 MAC address를 알 수 없다. 이 경우 이더넷에서 상대방 MAC address를 알아내기 위해 사용하는 프로토콜이 바로 ARP(Address Resolution Protocol)이다.

 

 

 

ARP 동작을 실습하기 위해 위 같은 네트워크를 구성해보자.

 

 

<기본 설정>
Router(config)#host R1
R1(config)#no ip domain-lookup
R1(config)#enable secret cisco
R1(config)#line console 0
R1(config-line)#logg sync
R1(config-line)#exec-t 0
R1(config-line)#exit
R1(config)#line vty 0 4
R1(config-line)#password cisco
R1(config-line)#exit


<IP, MAC address 설정>
R1(config)#interface GigabitEthernet 0/0
R1(config-if)#ip address 1.1.1.1 255.255.255.0
R1(config-if)#mac-address 0000.0000.0001
R1(config-if)#no shut

 

 

R2, R3도 각 주소에 맞게 잘 설정해준다.

 

 

 

SW1#show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
                  S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone
Device ID    Local Intrfce   Holdtme    Capability   Platform    Port ID
R1           Fas 0/1          148            R       C2900       Gig 0/0
R2           Fas 0/2          135            R       C2900       Gig 0/0
R3           Fas 0/3          141            R       C2900       Gig 0/0

 

 

위 설정을 마쳤으면 SW1에 R1, R2, R3가 연결되며, SW1에서 cdp를 찍었을 때 셋 다 출력된다.

 

 


 

 

이제 ARP 동작 방식에 대하여 알아보도록 하자.

 

 

 

Step 1. 나는 상대 MAC address를 모른다.

R1이 SW1을 거쳐 R2로 핑을 때리는 상황을 가정해보자. R1이 R2에 핑을 때리기 위해서는 IP 패킷을 이더넷 프레임에 실어서 전송해야 하는데, 이때 출발지와 목적지의 IP, MAC address를 전부 알아야 한다.

 

목적지 MAC 주소 출발지 MAC 주소 출발지 IP 주소  목적지 IP 주소 데이터
? 0000.0000.0001 1.1.1.1 1.1.1.2 1010...

 

근데 R1과 R2는 아직 통신해 본 적이 없는 초면이므로 R1은 목적지 R2의 MAC address를 모른다. (목적지 IP 주소는 사용자가 직접 입력해서 핑을 때리는 것이므로 알고 있다.)

 

 

 

Step2. ARP request (R1➜R2)

이때 목적지 MAC address를 알아내기 위해 사용하는 포로토콜이 바로 ARP이다. R1은 목적지 MAC address에 Broadcast 주소를 넣고 ARP request 프레임을 전송한다. ARP request에는 'IP 주소가 1.1.1.2인 장비의 MAC address가 뭐냐?'라는 내용이 담긴다. ARP request를 수신한 SW1은 그 프레임이 날아온 포트를 제외한 모든 포트에게 이 프레임을 전송한다.

 

목적지 MAC 주소 출발지 MAC 주소 출발지 IP 주소  목적지 IP 주소 데이터
FFFF.FFFF.FFFF.FFFF 0000.0000.0001 1.1.1.1 1.1.1.2 ARP 요청

 

 

 

 

Step3. ARP response (R2➜R1)

그리하여 R2, R3가 ARP request를 수신하게 되는데, 목적지 IP 주소에 R2의 IP가 적혀있으므로 R2는 자신에게 날아온 응답임을 확인한다. 그러면 R2는 출발지 IP 주소에 해당하는 R1에게 자신의 MAC address가 0000.0000.0002이라는 ARP response 패킷을 전송한다. (출발지 MAC address에 자신의 MAC 주소 써버려서 보낸다.) R3은 이 ARP request가 자신과 무관하므로 그냥 버린다.

 

목적지 MAC 주소 출발지 MAC 주소 출발지 IP 주소  목적지 IP 주소 데이터
0000.0000.0001 0000.0000.0002 1.1.1.1 1.1.1.2 ARP 응답

 

 

 

Step4. 테이블 저장

이제 R1은 R2의 MAC address를 알게 되었고, 그리하여 완전한 이더넷 프레임을 만들 수 있게 되었다. ARP를 통해 MAC address를 알아낸 후 서로 통신이 가능해지게 된 것이다.

 

 

 

 

 

 

 

ARP 실습

 

나도 debug arp 명령어를 쓰고싶은데..... 패킷트레이서 2901 라우터는 해당 명령어 지원이 안되는 것 같다. 귀찮으니까 패스하고 나중에 복습할 때 다른 라우터로 시도해보자 ㅎㅎ

 

 

R1#ping 1.1.1.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/0 ms

R1#show arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  1.1.1.1                 -   0000.0000.0001  ARPA   GigabitEthernet0/0
Internet  1.1.1.2                 1   0000.0000.0002  ARPA   GigabitEthernet0/0

 

 

R1➜R2(1.1.1.2) 방향으로 핑을 때린 후 show arp 명령어를 입력하면 ARP table을 출력한다. 이때 R2의 IP, MAC address가 담겨있는 것을 확인할 수 있다. 아직 R3는 R1과 데이터 교환이 발생하지 않았기 때문에 R1은 R3의 MAC address를 모르는 상황이다. R1➜R3으로 핑을 때리면 R1의 ARP table에 R3의 MAC address도 저장된다!

 

 

 

R1#ping 1.1.1.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.3, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 0/0/1 ms

R1#show arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  1.1.1.1                 -   0000.0000.0001  ARPA   GigabitEthernet0/0
Internet  1.1.1.2                 2   0000.0000.0002  ARPA   GigabitEthernet0/0
Internet  1.1.1.3                 0   0000.0000.0003  ARPA   GigabitEthernet0/0

 

 

즉 라우터에서 데이터를 전송할 때, 목적지의 MAC address를 모르는 경우 ARP가 자동으로 수행되며, ARP를 통해 얻어진 상대측의 MAC address는 ARP table에 담겨 저장된다. 핑을 할 때도 목적지 IP address, MAC address를 알아야만 핑 때리기가 가능하므로 목적지 MAC을 모른다면 ARP가 자동으로 작동한다.

 

 

 

 

 

 

 

 

ARP 대상 결정 방법

 

 

 

ARP request 패킷 전송에는 다음 규칙을 따른다.

 

  • 목적지 IP address가 자신과 동일한 subnet에 존재하면 해당 목적지에게 직접 MAC address를 요청(ARP request 전송)한다. (Switch나 Router 건너갈 필요 없음)
  • 목적지 IP address가 자신과 다른 subnet에 존재하면 Gateway(Network 간 문지기를 담당하는 Router)에게 Gateway의 MAC address를 요청한다.

 

 

위 네트워크에서 PC1➜PC2로 핑을 때리는 경우 그 둘은 동일한 subnet에 존재하므로 PC1이 PC2에게 직접 MAC address를 요청하는 ARP request를 전송한다.

 

PC1➜8.8.8.8으로 핑을 때리는 경우에는 그 둘이 서로 다른 네트워크에 존재하므로 PC1은 목적지 IP가 아닌 Gateway의 1.1.1.254에 MAC address를 요청하는 ARP request를 전송한다. 그 후 8.8.8.8에 전송해야 할 패킷을 Gateway에 전송하면 Gateway는 자신의 라우팅 테이블을 참조하여 해당 패킷을 8.8.8.8 장비 방향으로 라우팅한다.

 

 

 

 

 


 

 

Transparent Bridging

 

Transparent Bridging은 ARP가 동작하는 과정 자체를 의미한다. 그냥 ARP 동작을 상세하게 풀어서 설명하면 그게 Transparent Bridging이 된다. 사용자가 인식하지 못하게 자동으로 동작하기 때문에 Transparent (투명한)이라는 이름이 사용되었다. 또한 transparent bridging은 이더넷 스위치 관련 표준인 IEEE 802.1D에 정의되어 있다.

 

 

 

 

 

 

Transparent Bridging 절차를 하나씩 살펴보도록 하자.

 

 

Learning

  • R1 ➜ R2 방향으로 패킷을 전달하고 싶다. 하지만 아직 통신이 이루어진 적이 없어 R1은 R2의 MAC address를 모른다.
  • R1은 SW1에 interface F 0/1을 통하여 ARP request를 보낸다. 이때 목적지 MAC address를 Broadcast로 설정한다.
  • SW도 자신만의 MAC address table을 가지고 있는데, SW1의 MAC 테이블에 R1의 MAC address가 아직 없다면 그것과 수신 포트번호 (F 0/1)을 기록한다. Switch가 출발지의 MAC address를 배우는 과정이므로 Learning이다.

 

MAC address Port number
0000.0000.0001 F 0/1

현재 SW1의 MAC address table

 

 

 

목적지 MAC 주소 출발지 MAC 주소 출발지 IP 주소  목적지 IP 주소 데이터
FFFF.FFFF.FFFF.FFFF 0000.0000.0001 1.1.1.1 1.1.1.2 ARP 요청

R1 ➜ SW1로 보낸 ARP request

 

 

 

 

 

Flooding

  • ARP request에 담긴 목적지 MAC address가 Switch의 MAC table에 존재하는 Unicast가 아닌 모든 경우에 대하여 Switch는 ARP request를 전송한 port를 제외하고 동일한 VLAN에 속하는 모든 port로 전부 전송한다.
  • 여기서는 ARP request를 수신한 port인 F 0/1을 제외한 나머지 F 0/2, F 0/3에 ARP request가 전달되는 것이다.

 

 

 

 

Forwarding

  • R2 ➜ R1 방향으로 ARP response가 전송되는데, ARP response는 다음과 같이 구성된다.
목적지 MAC 주소 출발지 MAC 주소 출발지 IP 주소  목적지 IP 주소 데이터
0000.0000.0001 0000.0000.0002 1.1.1.1 1.1.1.2 ARP 응답

 

MAC address Port number
0000.0000.0001 F 0/1
0000.0000.0002 F 0/2

현재 SW1의 MAC address table

 

  • 즉 목적지 MAC address가 이미 Switch의 MAC address table에 있다!  따라서 SW1는 R2에서 출발한 ARP response를 R1에 전송해준다. 데이터 프레임에 담긴 MAC address가 Switch의 MAC tabel에 존재하는 경우 데이터를 전송할 수 있는데, 이것을 forwarding이라고 한다.
  • 또한 SW1은 ARP response를 보낸 R2의 MAC address와 port number를 Learning한다.

 

 

 

 

Aging

  • 스위치의 MAC address table은 타이머가 작동한다. 어떤 MAC 주소가 table에 담겨있을 때 default 5분동안 해당 MAC address가 출발지 주소로 설정된 프레임을 수신하지 못하면 스위치는 해당 MAC 주소를 테이블에서 제거한다.
  • 동일 출발지 MAC address에서 프레임이 발생하면 타이머를 다시 5분으로 초기화시킨다.

 

 

 

 

Filtering

  • MAC table에 출발지/목적지 MAC address가 동일한 port에 소속되어 있으면 해당 프레임이 Switch를 건너가지 못하게 차단한다.