글 작성자: nouu

참고

http://www.yes24.com/Product/Goods/58259041

 

킹 오브 네트워킹 KING of Networking - YES24

네트워킹 입문, 실습 한 번씩이면 족하다. 예제 720개로 입문부터 실전까지 끝낸다.프로그래밍 분야와 달리 네트워킹 분야는 연습과 반복이 중요하지 않다. 길게 풀어쓴 백 마디 이론보다 정확한

www.yes24.com

https://www.inflearn.com/course/%ED%8C%A8%ED%82%B7%ED%8A%B8%EB%A0%88%EC%9D%B4%EC%84%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

패킷트레이서를 활용한 컴퓨터네트워크 - 인프런 | 강의

컴퓨터 네트워크의 이론을 학습합니다. 시뮬레이션 프로그램을 사용하여 네트워크를 직접 구성해봄으로써 네트워크에 대해서 확실하게 공부해보세요. 설명이 잘 되어 있는 강의 자료를 제공합

www.inflearn.com

 

 

목적

네트워크 CS 이론에 대해 머릿속에 다시 상기시키고자 해당 글을 작성한다.

 

 

ARP 프로토콜

더보기
특정 PDU(Protocol Data Unit)를 전송하기 위해서는 2계층인 이더넷 프레임에 출발지 MAC 주소와 목적지 MAC 주소가 필요하다. 하지만 처음 통신을 할 때 특정 노드는 상대방의 MAC 주소를 모른다! 

 

ex) IP 주소가 10.10.10.16인 출발지가 10.10.10.15인 목적지로 ICMP Ping을 했을 때 상대방의 아이피 주소는 알지만 상대방의 물리적 주소인 MAC주소는 모른다. 이더넷에서 상대방의 MAC 주소를 알아내기 위해 사용하는 프로토콜이 ARP(Address Resolution Protocol)이다.

 

 

ARP 동작방식

 

해당 토폴로지가 있다고 생각해보자. 만약 R1이 R2로 첫 통신을 ICMP Ping 요청을 했다고 가정하자. 대략적으로 ICMP | IP | ETHERNET-2| 비트열 송신 순으로 Encapsulation 된 PDU를 만들고, 이후 스위치가 이 PDU를 받아 프레이밍하여 2계층인 ETHERNET-2 프레임을 Decapsulation 할 것이다. 그런데 목적지 MAC 주소가 적히지 않은 프레임이므로 어디로 보낼지 모른다.(사실 ARP를 만들어 브로드캐스트 MAC 통신으로 FFFF.FFFF.FFFF(이진수로 111111.....) 처리 후 스위치는 FLOODING 함. 하지만 우리는 아직 트랜스페어런트 브리징을 배우지 않았기 때문에 모른다고 하자...)

 

즉 프레이밍 된 다음과 같은 PDU의 형태가 나올 것이다. 

목적지MAC주소 출발지MAC주소 출발지IP주소 목적지IP주소 데이터(상위 계층 캡슐화)
????????? 0000.0000.0001 1.1.1.1 1.1.1.2 IP, ICMP 관련 데이터

 

그래서 본래의 통신을 하기 전 목적지의 MAC 주소를 알아야 하기 때문에 ARP를 보내야 한다. ARP의 이더넷 프레임은 다음과 같은 형태로 보내진다.

목적지MAC주소 출발지MAC주소 출발지IP주소(고정) 목적지IP주소(고정) 데이터
FFFF.FFFF.FFFF 0000.0000.0001 1.1.1.1 1.1.1.2 ARP 요청 패킷

위와 같이 목적지의 MAC 주소를 FFFF.FFFF.FFFF인 이더넷 브로드캐스트 주소 형태로 만들어서 보낸다. ARP 요청 패킷 내용은 대략적으로 IP 주소가 1.1.1.2인 장비의 MAC 주소는 무엇인가? 라는 내용이 들어있다. 스위치는 목적지 MAC 주소가 브로드캐스트로 설정된 프레임을 수신하면 수신 포트를 제외한 모든 포트로 전송한다.

 

스위치가 수신 포트를 제외한 모든 포트에 ARP를 보내는 모습이다.

결론적으로 R2, R3가 R1이 뱉은 ARP 요청 패킷을 수신한다. IP 주소가 1.1.1.2로 등록된 패킷이므로 R2는 자신의 것임을 알며, R3는 자신한테 온 패킷이 아니라는 것을 알고 버린다.(이때 브로드캐스트 된 패킷이라 CPU가 논리연산을 수행하기 때문에 컴퓨터에 무리가 간다. VLAN이 만들어진 이유중 하나가 이 때문임). 

 

이제 R2가 R1에게 다음과 같은 패킷으로 응답한다. 

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

ARP 응답을 수신한 R1은 이제 목적지 IP 주소 1.1.1.2의 MAC 주소를 알게 된다. 

 

R2가 응답한 ARP 패킷을 R1이 받는 모습

 

R2의 ARP 테이블. 확인 결과 자신의 MAC 주소인 1.1.1.2 말고 새로 배운 R1의 MAC주소 1.1.1.1이 보임.

 

R1은 명령어가 먹히지 않는다. WHY? Ping에 대한 수행이 끝나야 명령어가 먹힘. Ping 명령어를 끝내면 역시 R2와 똑같은 ARP 테이블 구조가 보일 것이다.

 

R1이 R2에게 PING 요청 5번에 대한 수행 결과. PING이 한개 빠진 이유는 ARP가 성공하기 전 핑 패킷을 할 수 없어 타임아웃 되기 때문임.

 

시스코 장비의 기본적인 ARP 타임아웃 시간은 4시간이다. 즉 라우터의 ARP 테이블에 동적으로 등록 된 주소들이 4시간동안 유지된다는 뜻이다. 그리고 MS 윈도우의 타임 아웃은 대부분 10분이다.

 

 

 

 

ARP 대상 결정 방법(같은 브로드캐스트 도메인일 때 vs 같은 브로드캐스트 도메인이 아닌 원격지일 때)

다음과 같은 토폴로지가 있다고 하자. 특정 노드가 ARP 요청 패킷을 전송하면 다음과 같은 규칙으로 전송된다. 

1. 만약 목적지의 IP 주소가 출발지의 IP 주소와 동일한 브로드캐스트 도메인이라면... 해당 목적지 IP 주소를 가진 장비에게 직접 MAC 주소 요청을 한다. 

 

2. 목적지 IP 주소가 자신과 다른 서브넷 소속이라면... 게이트웨이에게 게이트웨이의 MAC 주소를 요청한다.(쉽게 말해 출발지 IP가 속한 게이트웨이에 해당하는 라우터의 인터페이스 MAC 주소에 해당한다.)

 

1을 기반하여 만약 위에서 172.16.1.2 IP를 가진 PC0가 172.16.1.3의 주소를 가진 PC1에게 핑 요청을 했을 때 출발지와 도착지는 동일 서브넷 소속의 브로드캐스트 도메인이다. 따라서 PC0은 172.16.1.3의 MAC 주소를 요청하는 ARP 패킷을 전송한다. 

 

2를 기반하여 만약 위에서 172.16.1.2 IP를 가진 PC0가 구글 서버 8.8.8.8로 핑을 요청했을 때 172.16.1.2와 8.8.8.8은 누가봐도 다른 원격지이므로 PC1은 목적지 IP 주소 8.8.8.8이 아닌 게이트웨이 주소 172.16.1.1의 MAC 주소를 요청하는 ARP 패킷을 전송한다. 이후 PC0은 목적지 IP 주소가 8.8.8.8인 패킷들을 게이트웨이로 전송하며, 게이트웨이 라우터는 라우팅 테이블을 참조해서 해당 패킷을 목적지 방향으로 라우팅 시킨다.

 

패킷트레이서로 원격지의 ARP 통신을 확인해보자. 

 

1. 처음 PC0, 172.16.1.2가 8.8.8.8에게 핑 요청을 한다.

 

2. PC의 ICMP 관련 데이터는 버퍼에 임시로 저장되며, ARP 요청을 보낸다.

 

3. ARP 프로토콜의 TARGET IP를 보면 172.16.1.1인 라우터 게이트웨이의 주소이다. 스위치가 목적지의 MAC 주소가 브로드캐스트 형태를 띄어 수신처의 포트를 제외한 모든 곳에 FLOODING을 하며, 그것을 받은 라우터 게이트웨이가 ARP에 있는 TARGET IP 정보를 보고 자신에게 온 것임을 알고 이 정보를 해석한다. 나머지 노드는 TARGET IP를 보고 그것이 나에게 온게 아닌 것을 인식하여 해당 패킷을 버린다. 

 

 

4. 해당 ARP 요청 프로토콜을 해석한 라우터 게이트웨이가 응답으로 PC0에게 자신의 MAC 주소를 알려주는 ARP 를 보낸다.

 

5. 이걸 받은 스위치는 이더넷 프레임에 목적지 MAC 주소가 명시되어 있기 때문에 PC0에게 해당 ARP를 전송한다. 이것을 포워딩(Forwarding)이라고 한다.

 

6. 이제 PC0는 일단 브로드캐스트 도메인 게이트웨이에 본격적인 데이터인 ICMP 패킷을 보낸다. 스위치도 목적지 MAC 주소가 브로드캐스트 도메인의 게이트웨이이므로 해당 인터페이스로 포워딩할 것이다.

 

7. 그런데 브로드캐스트 도메인의 게이트웨이 해당하는 라우터가 최종 목적지인 8.8.8.8 구글 서버의 MAC 주소를 몰라 첫 ICMP 패킷은 DROP이 되며, 라우터는 최종 목적지 서버 8.8.8.8을 알기 위해 ARP를 보낸다! (이래서 핑이 한번 빠지는거다.)

 

8. 라우터0의 ARP 요청을 받은 목적지 서버는 응답 ARP를 보내 자신의 MAC 주소를 가르쳐준다.

8.8.8.8 서버에 의한 ARP 응답 패킷으로 ARP 테이블에 8.8.8.8 - 00E0.8F56.5C14가 매핑되었다!

 

9. 이제 두 구간의 ARP 통신 덕분에 ICMP 패킷이 스무스하게 잘 흘러갈 것이다. 

핑이 한번 빠지고 다음 ICMP 응답은 잘 응답받은 모습이다.

 

 

사실 동일 브로드캐스트 도메인의 ARP 통신은 쉽다. 왜? 노드의 IP주소와 MAC 주소가 일치하기 때문. 

그러나 원격지의 ARP 통신은 2구간 이상의 ARP 통신을 하며, 본격적인 데이터 통신을 할 때 목적지 IP와 목적지 MAC 주소가 다르기 때문에 헷갈릴 것이라 생각한다. 하지만 원리는 한번만 익히면 머릿속에 기억하기 때문에 실습을 합시다. 실습을 ㅋ

 

 

트랜스페어런트 브리징

더보기

이더넷 스위치는 MAC 주소 테이블을 참조해서 이더넷 프레임을 목적지 방향으로 전송한다. MAC 주소 테이블에 MAC 주소를 만들고(Learning), 유지하고(Aging), MAC 주소 테이블을 참조해서 프레임을 전송하는 것을 트랜스페어런트 브리징(Transparent bridging)이라고 한다. 이더넷 스위치 관련 표준인 IEEE802.1D에 트랜스페어런트 브리징이 정의되어 있다. 

 

위와 같은 토폴로지가 있다고 가정할 때 트랜스페어런트 브리징이 동작하는 것을 공부해보자. 

 

초기 mac-address table은 비어있다고 가정(실제로는 GARP(Gratuitous ARP)에 의해 스위치에 맥 테이블이 채워지는 것을 볼 수 있다. GARP는 나중에 따로 작성하겠음)

만약 R1이 임의의 ARP 요청 프레임을 전송한다면 스위치는 Fa0/2 인터페이스를 통해 이를 수신하며, 해당 이더넷 프레임의 출발지 MAC 주소를 읽음.

만약 위의 초기 맥 주소 테이블과 같이 비어져있을 때 Fa0/2 인터페이스에 들어온 출발지의 MAC 주소를 배우는 걸 러닝(Learning)이라고 한다. 

 

이때 ARP 프레임이 들어올 때 출발지의 MAC 주소를 배운다.

 

 

 

또한 목적지 MAC 주소가 FFFF.FFFF.FFFF 와 같이 브로드캐스트 주소거나, MAC 주소테이블에 없는 유니캐스트 주소, 멀티캐스트 주소라면 수신 포트를 제외하고 동일한 VLAN에 속하는 모든 포트로 다 전송한다. 이 과정을 플러딩(Flooding)이라고 한다. 

 

 

 

 

 

스위치에 목적지 주소가 MAC 주소 테이블에 존재 시 해당 목적지 MAC 주소를 가진 유니캐스트(unicast) 프레임을 수신하면 목적지 포트로 프레임을 전송한다. 이 과정을 포워딩(Forwarding)이라고 한다. 

 

 

스위치가 MAC 주소를 MAC 주소 테이블에 기록할 때 항상 타이머를 동작시킨다. 기본적으로 5분 동안 해당 MAC 주소가 출발지 주소로 설정된 프레임을 수신하지 못한다면 스위치는 해당 MAC 주소를 MAC 테이블에서 제거한다.(즉 5분 안에 다시 MAC 테이블에 저장된 주소를 송신하지 않는다면 맥 주소 테이블에서 사라지며 다시 FLOODING이 진행될 것임)

타이머 설정 후 동일 출발지 MAC 주소를 가진 프레임을 수신할 때마다 타이머를 초기화, 정해진 시간동안 해당 프레임의 활동이 없다면 MAC 주소 테이블에서 제거하는 과정을 에이징(Aging)이라고 한다.

 

 

 

마지막으로 스위치의 MAC 주소 테이블상에 출발지/목적지 MAC 주소가 동일한 포트에 소속되어 있다면 해당 프레임을 차단한다. 이것을 필터링(Filtering)이라고 한다.

 

만약 위와 같은 토폴로지가 있다고 할 때 PC0가 PC1에게 핑을 보냈다고 가정하자. 그러면 1계층 장비인 전기적 송수신인 허브의 특성상 플러딩을 할 것이다. 이 때 스위치는 플러딩 된 포트를 받아 위의 맥 주소 테이블과 같이 기록 될 것이다. 

 

VLAN MAC ADDRESS TYPE PORTS
1 0006.2a49.88db DYNAMIC Fa0/1
1 0090.0c62.21c9 DYNAMIC Fa0/1

 

위와 같이 스위치에 추가적으로 종단 노드를 2개 설치했다고 가정하자. PC0가 PC1에 핑을 다시 전송했을 때 허브는 플러딩을 하여 스위치1에게 프레임을 전송할 것이다. 프레임을 받은 스위치는 과연 어떻게 할까? Flooding을 할까? 

 

위에서 PC0의 맥주소와 PC1의 맥주소는 Fa0/1 인터페이스 쪽에 위치합니다! 라는 맥 주소 테이블을 등록하여 해당 프레임을 폐기(DROP)한다.

 

 

프레임 폐기

 

 

정리하자면 트랜스페어런트 브리징이란 스위치의 맥 주소 테이블을 생성, 유지, 삭제 그리고 참조하여 프레임을 전송하는 것을 말하며 learning, flooding, forwarding, aging, filtering 5가지의 기능이 있다.