Enjoy My Posts

후니의 쉽게 쓴 시스코 네트워킹 Vol.1 정리

Posted on By Geunwon Lim

이 포스트에서는 제가 후니의 쉽게 쓴 시스코 네트워킹 Vol.1을 읽고 내용 정리한 것을 쓰겠습니다.

네트워크란

네트워킹이란 장비들을 서로 연결해서 대화를 주고받는 것입니다. 덕분에 정보나 비싼 장비의 성능을 공유할 수 있게되죠. 처음엔 프린터부터 시작해서, 비싼 장비를 공유하자고 연결하다보니 점점 더 연결에 욕심을 갖게되고, 그러다보니 네트워킹이 발전하게 됩니다. 우리에게 익숙한 인터넷은 과거 작은 개념의 네트워크가 발전한 모습인데, 뜻은 네트워크 간의 연결, 즉 하나의 큰 네트워크를 말합니다.

네트워크에 사용되는 장비들

  1. 랜카드: 랜에 접속하기 위한 카드처럼 생긴 것을 말하고 pc에 장착됩니다. 이것의 역할은 유저의 데이터를 케이블에 실어서 허브, 스위치, 라우터 등으로 전달해주고 자기에게 온 데이터를 cpu에 전달해주는 것입니다.

  2. 케이블: 장비와 장비를 연결시켜주는 통로 역할을 합니다. 네트워크 장비 간 연결을 하려면 어떤 종류든 케이블이 필요하게 됩니다. pc와 스위치의 연결, 스위치와 라우터의 연결 등에 쓰입니다. 그 종류로는 광케이블, utp케이블, 동축케이블 등이 있습니다.

  3. 허브: 피시들을 연결시켜, 데이터 전달이 가능해지도록 하는 장비입니다. 즉 허브로 피시들이 연결되면 작은 네트워크가 생성되는 것입니다. 허브를 사용하면 모든 pc들이 하나의 콜리전 도메인 안에 속하게 돼 속도가 느리다는 한계를 가지고 있습니다. 이걸 해결할 수 있는, 즉 콜리전 도메인을 나눠줄 수 있는 장비가 스위치입니다.

    콜리전 도메인이란?

    이더넷이라는 네트워크 방식을 활용하면 csma/cd라는 프로토콜을 사용하게 됩니다. 이 프로토콜에서는 한 순간에 하나의 피시만이 데이터를 보낼 수 있는데, 만약 동시에 두개의 피시에서 데이터를 보내려고 하면 충돌(콜리전)이 발생하여 둘 다 데이터 보내기를 보류해야 합니다. 즉 csma/cd의 특성상 하나의 pc가 통신을 할 때 일정 영역 내 다른 pc들은 통신할 수 없게되는데, 그 영역을 뜻합니다.

  4. 스위치: 스위치는 허브와 유사하게 피시들을 연결시키는 역할을 합니다. 다만, 포트별로 콜리전 도메인이 나눠져있어 1번 포트와 2번 포트 사이 통신이 있으면 나머지 포트들이 모두 기다려야 하는 허브의 문제점을 개선하여 여러 포트가 동시에 통신이 가능합니다. 스위치에 대해서는 밑에서 더 자세히 다루겠습니다.

  5. 라우터: 라우터는 역시 허브, 스위치와 마찬가지로 피시들을 연결시키는 역할을 합니다. 다만, 브로드캐스트 도메인 간 연결을 시켜주지 못한다는 스위치의 문제점을 개선하여, 네트워크 간 연결을 가능하게 해줍니다. 스위치에 대해서는 밑에서 더 자세히 다루겠습니다.

  6. 호스트: 피시라고 생각하시면 됩니다. 호스트는 ip와 mac address를 가지고 있는데 이것들에 대해 좀 더 설명하겠습니다. ip주소는 이진수 32개로 돼있고, 8개씩 묶어 4개의 십진수로 표현합니다(예시: 192.12.100.2). mac address는 이진수 48개로 돼있고, 8개씩 묶어 6개의 16진수로 표현합니다(예시: 88-36-6C-A1-50-F8). ip와 mac address의 공통점은 모두 호스트가 가지는 고유한 주소라는 것입니다. 네트워크 상에서 각 호스트를 구분하여 인식하는 데 사용되죠. 차이점은 물리적인 주소이냐, 그렇지 않냐는 것입니다. 차이를 쉽게 이해하기 위해 비유해보자면, ip는 호스트의 주민등록증 같은 것이고 mac address는 집 주소라고 생각하면 편합니다. 왜 이렇게 비유했는 지 호스트 두 개가 통신하는 과정을 살펴보시면 아실텐데요. a가 b와 통신하려면 먼저 네트워크에 “b라는 아이피 주소 가진 사람 통신하고 싶으니까 맥 어드레스좀 줘!”라고 브로드캐스트합니다. b는 a에게 자신의 맥 어드레스를 알려주게 되고 a는 b의 맥 어드레스를 알았으니 비로소 통신 가능하게 됩니다. 그러니까 물리적인 주소는 mac이고, ip로 mac을 알 수 있는 것입니다.

    ip에 대해 더 알아보기 1: 네트워크 부분과 호스트 부분

    위에서 ip주소가 이진수 32자리로 돼있다고 말씀드렸습니다. 이러한 ip주소는 네트워크 부분과 호스트 부분으로 나뉩니다. 네트워크 부분은 브로드 캐스트 영역을 뜻하는데, 즉 라우터를 거치지 않아도 데이터를 주고받을 수 있는 영역입니다. 호스트 부분 하나의 피씨를 뜻합니다. 즉 하나의 네트워크에서 각 피시들의 ip를 살펴보면, 네트워크 부분은 모두 같아야 하고 호스트 부분은 달라야 하는 것입니다. 그렇다면 ip의 어느 부분이 네트워크 부분이고 어느 부분이 호스트 부분일까요? 그것은 클래스라는 개념으로 미리 정한 약속에 따라 정해집니다. 클래스는 대표적으로 a,b,c가 있는데 클래스를 나누는 기준은 네트워크의 크기이고, 클래스를 나눈 이유는 네트워크의 크기에 따라 구분해주기 위함입니다. 즉, 큰 네트워크는 호스트를 많이 가질 수 있는 클래스에 속하는 아이피를, 작은 네트워크는 호스트를 좀 적게 가질 수 있는 클래스의 아이피를 배분하기 위해서 클래스를 나눠줍니다. 아이피 주소의 길이는 정해져 있기 때문에 네트워크 부분이 짧아지면 호스트 부분이 길어지고, 네트워크 부분이 길어지면 호스트 부분이 짧아질 수밖에 없습니다. 예를들어, 클래스 a는 4개의 십진수 중 맨 앞 십진수가 1~126까지인 것들을 말하는데, 네트워크 부분은 맨 앞의 십진수이고, 호스트 부분은 뒤에 3개의 십진수입니다. 이건 논리적인 게 아니라 그냥 누가 그렇게 정한 것입니다. 클래스 a는 호스트 부분이 3개나 되기 때문에 이 네트워크에 속할 수 있는 호스트가 많게 됩니다. b나 c도 네트워크 부분과 호스트 부분을 정해줘서, 호스트가 많이 필요한 큰 네트워크는 a에 해당하는 ip를 배분하고, 호스트가 적어도 되는 네트워크에는 c를 배분하여, 괜히 ip가 낭비되는 걸 막습니다.

    ip에 대해 더 알아보기 2: 서브넷마스크

    서브넷 마스크란 추상적으로는 ip에 어떤 가공을 하여 메인이 아닌 네트워크를 만들기 위해 씌우는 마스크입니다. 구체적으로는 32자리 이진수이고요. 위에서 어떤 가공이라고 말한 것은 ip주소와 서브넷 마스크를 and 연산하는 것을 말합니다. 서브넷 마스크가 있는 이유는 커다란 네트워크를 잘게 나누기 위함입니다. 클래스 a나 클래스 b는 한 네트워크에 호스트 수가 브로드캐스트의 영향이 너무 커서 네트워크가 제대로 돌아가지 않을 것입니다. 따라서 네트워크를 나눠줘 브로드캐스트의 영향력을 작게 만들어주는 것입니다.

    서브넷 마스크 32자리 이진수 중 1인 부분은 네트워크 부분이고 0인 부분은 호스트 부분인데, ip주소와 서브넷마스크를 and연산하면 호스트부분은 다 0이 될테니 결과값으로 해당 ip의 네트워크 부분이 나오게 됩니다.

    모든 ip주소는 네트워크를 나누던 나누지 않던 서브넷 마스크를 사용합니다. 그래야 그 주소를 나눈건지 아닌지 알 수 있기 때문입니다. 나누지 않았을 경우엔 디폴트서브넷마스크를 씌우는데, 각 클래스에 따라 약속으로 정해둔 네트워크 부분과 똑같습니다. 예를 들어 C 클래스의 디폴트 서브넷마스크는 255.255.255.0입니다. 이러면 C클래스의 ip와 서브넷마스크를 and연산하더라도 네트워크 부분은 그대로일 것입니다. 네트워크를 나눌 경우엔 디폴트 서브넷 마스크를 조금 수정하여 ip와 and연산하게 됩니다. 그러면 새로운 네토워크 부분이 나오겠죠? 예를 들어 B클래스를 255.255.255.0(C클래스의 디폴트 서브넷마스크)로 and 연산하면 네트워크 부분이 길어질 것입니다. 원래 호스트 부분이었던 부분까지 네트워크 부분이 될 테니까요. 즉 서브넷 마스크를 씌워서 호스트부분의 일부분을 네트워크부분으로 변환하여, 큰 네트워크를 작게 나눠준 것입니다. 서브넷 마스크를 통해 나눠진 서브넷들은 하나의 네트워크이기 때문에 라우터를 통해서만 통신이 가능합니다.

관점에 따른 네트워크 개념


네트워크에는 다양한 개념이 있습니다. 개념을 두서없이 하나씩 열거하면 정리가 안되기 때문에 아래부터는 관점에 따라서 네트워크를 이해하려고 합니다. 현실 사회를 보더라도 너무 다양한 개념이 있기 때문에 정치 관점에서 본 사회는 이러이러한 내용이 있는거고, 경제 관점에서 보면 저러저러한 내용이 있는 것이잖아요. 그런 것처럼 네트워크를 여러 관점에 따라 이해해보겠습니다.


1. 네트워크의 범위가 얼마냐를 기준으로 본 개념

  1. lan: lan은 Local Area Network의 약자로 한정된 공간에서 네트워크를 구성하는 것을 말합니다. 예를 들어 한 사무실에 컴퓨터가 30대가 있는데 이것들을 연결하면 lan을 구축한 것입니다.

  2. wan: wan은 멀리 떨어진 곳을 네트워크로 연결하는 것을 말하고, 대표적인 예시로 인터넷이 있습니다.

요즘엔 네트워킹을 할 때 lan과 wan이 공존하기 때문에 두 개를 구분하기보다는 ‘네트워킹을 한다’라고 말합니다.

2. 네트워크에서 데이터를 주고 받는데 사용되는 방식일 기준으로 본 개념

네트워크에서 데이터를 주고 받는 방식에는 이더넷, 토큰링, FDDI, ATM 등 여러가지 있습니다. 어떤 방식을 사용하냐에 따라 다른 랜카드를 사용해야합니다. 우리가 사용하는 네트워킹의 방식 대부분이 이더넷이기 때문에 이더넷만 살펴보겠습니다.

이더넷은 csma/cd라는 프로토콜을 사용합니다. csma/cd의 통신 방식을 쉽게 생각하면 ‘대충 알아서 눈치로 통신하자’는 것입니다. 이더넷 환경에서 통신하고 싶은 피시는 지금 네트워크 상 통신이 진행중인 지 확인합니다. 누군가 통신을 하고 있으면 기다립니다. 통신이 없어지면 자기 데이터를 네트워크에 실어보냅니다. 이 때 동시에 여러 피시가 데이터를 보내는 상황이 있을 수 있습니다. 이것을 콜리전(충돌)이 발생했다고 하고, 콜리전이 발생하면 각 피시는 랜덤한 시간을 기다렸다가 다시 데이터를 보내게 됩니다.

여기에서 콜리전 도메인이라는 개념이 나오게 됩니다. 그 의미는 csma/cd의 특성상 하나의 pc가 통신을 할 때 일정 영역 내 다른 pc들은 통신할 수 없게되는데, 그 영역을 뜻합니다. 예를 들어 허브로 통신하는 피시들은 하나의 콜리전 도메인 내 있기 때문에 한 순간에 한 pc만이 데이터를 보낼 수 있습니다. 이를 개선하기 위해 콜리전 도메인 사이를 반으로 나누고 중간에 다리를 놓아야 합니다. 그렇게 되면 a구역은 a구역끼리, b구역은 b구역끼리 통신 가능해집니다. 즉 a구역에 있는 pc들이 통신하는 동안 동시에 b구역 pc들도 통신이 가능해지는 것입니다. 만약 a구역에 있는 pc와 b구역에 있는 pc가 통신할 때는 다리를 건너 통신을 하게 됩니다.

3. 네트워크 통신 대상 수를 기준으로 본 개념

  1. 유니캐스트: 1:1로 하는 통신을 말하고, 네트워크 통신에서 주를 이룹니다. 그 방식은 데이터를 받는 피씨의 주소를 데이터 안에 정확하게 써 넣어 보내는 것입니다. 봉투에 받는 사람 주소 적고, 보내는 사람 주소 적어 우체통에 넣는 방식과 유사합니다. 로컬 네트워크 상의 모든 피시들은 일단 그 봉투를 받아서 자신한테 온 건지 확인하고 다르면 봉투 버립니다. 이러면 cpu한테는 영향을 미치지 않게 됩니다. 자신한테 온거라면 시피유에게 전달합니다.

  2. 브로드캐스트: 전부를 대상으로 하는 통신을 말합니다. 즉 로컬 랜에 붙은 모든 네트워크 장비에게 보내는 통신입니다. 로컬 랜이란 라우터에 의해서 구분되는 공간을 의미하고, 브로드캐스트 도메인은 방송(브로드캐스트)를 하면 들리는 영역을 의미합니다. 브로드캐스트를 할 경우 받는 쪽에서 모든 통신을 시피유에 전달하기 때문에 성능이 저하됩니다.

  3. 멀티캐스트: 그룹을 대상으로 하는 통신을 말합니다. 전체 중 일부에게 보내는 개념입니다.

4. 네트워킹이 이뤄지는 흐름을 기준으로 본 개념

osi 7 layer는 통신이 일어나는 과정을 7단계로 나눈 것입니다. 7계층은 어플리케이션계층, 프레젠테이션계층, 세션계층, 트랜스포트계층, 네트워크계층, 데이터링크계층, 피지컬계층 으로 구성됩니다. 이렇게 나눈 이유는

(1) 데이터의 흐름(통신의 흐름)이 한 눈에 볼 수 있기 때문입니다. 예를 들어 요리할 때 재료 사기, 재료 처리, 조리, 정리와 같은 단계가 있다고 하면, 재료 사기를 하고 있는 사람은 “아 좀 많이 남았구나” 할 수 있을 것입니다. 통신에서도 마찬가지입니다.

(2) 문제를 해결하기 편합니다. 예를 들어, 전자메일이 안되면 일단 핑을 쏴보고 핑이 되면 인터넷 연결은 된 것입니다. 따라서 네트워크 계층까지는 문제 없고, 내 메일 프로그램이 문제라는 걸 유추할 수 있습니다.

(3) 층 별로 독립적인 장비를 쓸 수 있습니다. 케이블은 국산, 랜카드는 외제 이런식으로 말입니다.

각 계층에서 하는 일을 조금 더 살펴보자면 (피지컬계층~트랜스포트계층),

  1. 피지컬 레이어에서는 케이블로 데이터를 전송합니다. 통신 단위는 비트입니다. 이 계층에 속하는 장비는 대표적으로 케이블, 리피터, 허브 등입니다.

  2. 데이터링크에서는 정보의 오류와 흐름을 관리하여 안전한 정보 전달을 수행할 수 있도록 도와줍니다. 즉 통신에서의 오류도 찾아주고, 재전송해주고, 맥 어드레스를 가지고 통신할 수 있게 해줍니다. 이 계층에서 전송되는 데이터의 단위를 프레임이라고 부릅니다. 이 계층에 속하는 장비는 대표적으로 스위치가 있습니다.

  3. 네트워크계층에서는 데이터를 목적지까지 안전하고 빠르게 전달(라우팅이라고 함)해 줍니다. 즉 경로를 선택하고, 주소를 정하고, 경로에 따라 패킷을 전달해줍니다. 이 계층에 속하는 장비는 대표적으로 라우터가 있습니다.

  4. 트랜스포트계층은 흐름 제어(플로 컨트롤), 에러 복구등을 합니다. 즉 에러 복구를 위해 패킷을 재전송하거나 플로를 조절해서 데이터가 정상적으로 전송될 수 있도록 도와줍니다. TCP, UDP 등이 이 계층에 해당됩니다.

데이터가 각 계층을 거치면서 포장된다고 생각 하면 됩니다. 포장에는 헤더라는 정보가 붙는데, 헤더에는 각 계층별로 해당 계층을 잘 지나갈 수 있도록 관리하는 사항들이 붙습니다. 예를 들어 네트워크 계층의 헤더에는 ip주소가 붙을 것입니다. 이러한 헤더들로 인해 처음 만들어는 데이터보다 실제 전달되는 데이터의 크기가 커집니다.

네트워킹을 가능하게 하는 약속

위에서 네트워킹은 대화를 주고받는 것, 즉 통신이라고 했습니다. 대화를 하기 위해서는 언어가 필요할 것입니다. 네트워킹에서 이 언어 역할을 하는 것이 프로토콜입니다. 프로토콜을 번역하면 규약, 협약이라는 뜻인데 즉 통신을 위한 약속(언어)이라고 생각할 수 있습니다.

예를 들어, 제가 다른 사람에게 a라는 데이터를 주면서 “a 먹어” 라고 말했습니다. 우리 집단에서는 a를 apple이라고 약속했다고 하면, “a 먹어”가 말이 되겠죠. 한편, 군사집단에서는 a를 최고 위험상황이라고 약속했다고 칩시다. 내가 걔네한테 “a 먹어”라고 하면 이해를 못할거예요. 그러니까 a를 apple이라고 약속하는 게 프로토콜입니다.

또 tcp/ip를 예로 들면, 모든 pc는 고유의 주소를 가져야한다! 고 약속을 하죠. 덕분에 자기가 속한 브로드캐스트 도메인 뿐 아니라 다른 네트워크 내 호스트와도 데이터를 주고 받을 수 있습니다. http같은 경우는 데이터를 보낼 때 형식을 약속하죠. “header가 있고, body가 있고…” 등 말입니다.

결국 프로토콜은 통신을 위한 약속이라고 이해하면 됩니다.

중요장비 1: 스위치

위에서 스위치는 허브와 유사하게 피시들을 연결시키는 역할을 한다고 이야기했습니다. 또 허브의 문제점을 개선하여 포트별로 콜리전 도메인을 나눠, 여러 포트가 동시에 통신 가능하다는 특징을 갖는다고 말씀드렸습니다. 여기에서는 스위치의 기능을 좀 더 자세히 살펴보고, 스위치에 있어서 필수적인 스패닝 트리를 알아보겠습니다.

1. 스위치의 기능

스위치는 크게 러닝(Learning), 플러딩(Flooding), 포워딩(Forwarding), 필터링(Filtering), 에이징(Aging)의 기능을 합니다. 이 개념들을 간단하게 말씀드리면 다음과 같습니다.

  1. 러닝: 출발지의 맥 어드레스를 배웁니다.

  2. 플러딩: 데이터가 들어온 포트를 제외한 나머지 모든 포트에 데이터를 뿌립니다.

  3. 포워딩: 특정 포트에만 데이터를 건네줍니다.

  4. 필터링: 데이터가 다른 포트로 넘어가지 못하게 막습니다.

  5. 에이징: 배웠던 맥 어드레스를 기억에서 지웁니다.

조금 더 자세히 말씀드리면,

A라는 피시가 통신을 위해 스위치에 데이터를 보내면 스위치는 A의 맥 어드레스와 구역을 저장해 놓습니다(러닝). 이렇게 저장해 놓은 것은 나중에 다른 피시가 A와 통신하려고 할 때 쓰입니다. 무한정 저장해놀 순 없기 때문에 어느 정도 시간이 지나면 기억에서 지웁니다(에이징). 만약 도착지가 어떤 구역에 있는 지 모르면 일단 모든 포트에 데이터를 뿌려줍니다(플러딩). 목적지를 알고는 있지만 출발지와 목적지의 구역이 다를 경우 구역 이동을 시켜줍니다(포워딩). 목적지를 알고 출발지와 목적지가 같은 구역에 있으면 다른 포트로 못 건너가게 막습니다(필터링). 이 필터링 덕분에 콜리전 도메인을 나눌 수 있는 것입니다.

다시 흐름을 정리해보면, 먼저 데이터가 스위치에 들어옵니다. 그러면 출발지 주소를 새로 저장하거나 저장 기간을 늘려줍니다. 해당 통신이 브로드캐스트거나 목적지를 알 수 없으면 데이터를 모든 포트에 다 뿌려주고, 그렇지 않다면 출발지와 목적지가 같은 구역인지 확인합니다. 같은 곳이면 다른 포트에 넘어가지 못하게 막아주고, 다른 구역이면 구역이동을 시켜줍니다.

2. 스패닝 트리

위와 같은 기능을 하는 스위치를 쓸 때 조심해야할 것이 루핑입니다. 두 개의 호스트 사이에 두 개 이상의 스위치를 두는 경우가 있습니다. 하나의 스위치가 죽어도 다른 스위치를 통해 데이터를 보내기 위함이죠. 그런데 만약 어떤 조치 없이 이 상태에서 브로드캐스트를 하게 되면, A가 보낸 데이터가 여러 스위치에 동시에 보내지고, 각 스위치는 브로드캐스트니까 또 다시 브로드캐스트하고, 다시 브로드캐스트하고… 반복하게 됩니다. 즉 데이터가 스위치끼리 뺑뺑 도는 현상이 발생하게 됩니다. 이렇게 되면 다른 정상적인 통신이 불가능해질 것입니다. 이러한 루핑을 해결하는 것이 스패닝트리 프로토콜입니다. 스패닝 트리는 출발지부터 목적지까지 두 개 이상의 경로가 존재할 때, 즉 여러 스위치를 뒀을 때 1개의 경로 빼고는 다 끊어뒀다가, 사용하던 경로에 문제가 발생하면 끊어뒀던 경로를 살리는 방식입니다.

사전 개념

스패닝 트리를 이해하기 위해 두 가지 개념을 알아야 하는데,

  1. 스위치ID: 스위치들이 통신할 때 서로를 확인하기 위해 하나씩 가지고 있는 번호를 말합니다. 이 것은 브리지(스위치)우선순위 + 맥어드레스로 만들어집니다.

  2. Path Cost: 길(장비와 장비가 연결돼있는 링크)을 가는 데 드는 비용을 말합니다. 즉 스위치가 얼마나 가까이, 빠른 링크로 연결돼있는 지 알아내기 위한 값입니다.

세 가지의 규칙

스패닝 트리에 있어서 세 가지의 공식과 같은 규칙이 있습니다.

  1. 네트워크당 하나의 루트 브리지(스위치)를 갖는다.
  2. 루트 브리지(스위치)가 아닌 나머지 모든 스위치는 무조건 하나씩의 루트 포트를 갖는다.
  3. 세그먼트당 하나의 데지그네이티드 포트를 갖는다.

루트 브리지(스위치)는 대장 스위치를 말합니다. 이것은 스패닝 트리 프로토콜을 수행할 때 기준이 되는 스위치입니다. 루트 포트는 루트 브리지(스위치)에 가장 빨리 갈 수 있는 포트를 말합니다. 세그먼트는 스위치 간 서로 연결된 링크를 말합니다. 세그먼트당 하나의 데지그네이티드 포트를 갖는다는 말은 스위치가 서로 연결되어 있을 때 두 연결점 중 하나를 대표로 선정해야 한다는 말입니다.

이렇게 루트 브리지, 루트 포트, 데지그네이티드 포트를 정한 후, 스패닝 트리 프로토콜에서는 루트 포트나 데지그네이티드 포트가 아닌 나머지 모든 포트는 다 막아버립니다. 즉 루트 포트와 데지그네이티드 포트를 뽑는 목적은 어떤 포트를 살릴 지 결정하기 위한 것입니다.

루트 브리지, 루트 포트, 데지그네이티드 포트 정하기

스위치들은 서로 BPDU라는 데이터를 주고받으며 서로의 스패닝 트리 정보를 주고받습니다. 그러면서 누가 루트 브리지인지, 어던 포트가 루트 포트인지, 어떤 포트가 데지그네이티드 포트인지 정하게 됩니다.

루트 브리지 정하기

위의 1.에 대해 설명드리자면, 대장 브리지를 뽑는 과정인데 그 조건이 더 낮은 스위치ID를 갖는 것입니다. 과정을 보여드리면, 스위치 B와 스위치 C가 부팅을 하면 일단 서로 BPDU를 주고받습니다. 부팅 후 처음 보내는 BPDU에는 Sender의 스위치ID, 즉 자신의 스위치ID를 넣습니다. 각자 처음 부팅했으니, 자기가 리더라고 주장하는데요. 서로 비교 후 낮은 스위치ID를 갖는 스위치를 루트로 재지정합니다. 이 후 스위치 A가 부팅을 하면, 처음에 자기가 루트라고 주장하며 스위치ID를 스위치 B와 스위치 C에 보냅니다. 스위치ID 비교 후 더 낮은 스위치ID를 갖는 스위치를 루트로 재지정합니다.

졸병 브리지의 루트 포트 정하기

위의 2.에 대해 설명드리자면, 루트 브리지 선출 후 루트가 아닌 스위치들은 그것과 가장 가까운(Path Cost가 가장 적게 드는) 포트를 선출합니다.

데지그네이티드 포트 정하기

위의 3.에 대해 설명드리자면, 세그먼트(연결 링크)의 두 포트 중 root path cost가 낮은 쪽이 데지그네이티드 포트가 됩니다. root path cost가 같다면 ‘(1) 누가 더 작은 루트 스위치ID를 갖는 지 (2) 루트 브리지까지의 path cost는 누가 더 작은 지 (3) 누구의 스위치ID가 작은 지 (4) 누구의 포트ID가 작은 지’의 기준으로 데지그네이티드 포트를 정하게 됩니다. 데지그네이티드까지 뽑게 되면 어떤 포트를 풀어주고, 어떤 포트를 막을 지 정해지게 됩니다.

스위치의 상태 변화

스패닝 트리를 만드는 과정(루트 브리지를 뽑고, 루트 포트를 뽑고…하는 것)에서 모든 스위치는 5가지의 상태 중 하나의 상태가 됩니다.

  1. Disabled: 포트가 고장나서 사용할 수 없거나 네트워크 관리자가 일부러 shutdown 시켜놓은 상태를 말합니다. 데이터전송 불가하고, 맥어드레스 배울 수 없고, BPDU를 주고받지 못합니다.

  2. Blocking: 스위치를 맨 처음 켰을 때의 상태입니다. 데이터 전송 불가하고, 맥어드레스 배울 수 없고, BPDU를 주고받을 수 있습니다.

  3. Listening: 블로킹 상태의 포트가 루트포트나 데지그네이티드 포트로 선정되면 포트는 바로 리스닝 상태로 넘어갑니다. 데이터전송 불가하고, 맥어드레스 배울 수 없고, BPDU를 주고받을 수 있습니다.

  4. Learning: 포트가 리스닝 상태로 15초를 버티면 러닝상태로 넘어갑니다. 이 때 비로소 맥어드레스를 배워 맥어드레스 테이블을 만듭니다. 데이터전송 불가하고, 맥어드레스 배울 수 있고, BPDU 주고 받을 수 있습니다.

  5. Forwarding: 러닝 상태에서 15초를 더 버티면 포워딩 상태로 넘어갑니다. 포워딩 상태가 돼야 스위치 포트는 드디어 데이터 프레임을 주고받을 수 있습니다. 데이터 전송 가능하고, 맥어드레스를 배울 수 있고, BPDU 주고 받을 수 있습니다.

루트 브리지, 루트 포트, 데지그네이티 포트를 뽑고 난 후, 루트 포트와 데지그네이티드 포트는 리스닝과 러닝을 거쳐 포워딩 상태로 만들어주고 논 데지그네이티드 포트는 블로킹 상태로 만들어줍니다. 이렇게 되면 여러 포트가 함께 있어도 데이터가 흐를 수 있는 경로는 하나가 되게 됩니다. 즉 잘 통신하게 되는 것이죠. 논 루트 브리지들은 루트 브리지와 계속 안부를 물으며 루트 브리지까지 가는 길이 살아있다는 걸 알고, 평화는 계속됩니다. 하지만 통신에 어떤 문제가 발생하면 변화가 필요합니다. 논 루트 브리지들이 지정된 시간동안 헬로 패킷을 못받으면 중간 경로에 문제가 생겼다고 보고, 스패닝 트리를 재편성하는 모드로 들어가게 됩니다. 사례로 살펴보자면 다음과 같습니다. 연결이 끊어진 스위치 C는 헬로 패킷을 받지 못하고, 당장은 아무 일도 일어나지 않습니다. 이후 일정 시간이 지나면 스패닝 트리를 변경하기 시작합니다. 스위치 C는 원래 경로로 오던 헬로 패킷 받기를 포기하고 다른 포트로 헬로 패킷을 받습니다. 그러면 스위치 C는 기존 루트 브리지 A와 연결된 포트 대신 스위치 B와 연결된 포트를 루트 포트로 선정합니다. 이렇게 되면 B와 연결됐던 포트가 포워딩 상태가 되고, 기존 포워딩 상태였던 포트가 블로킹 상태가 되죠. 정리를 하자면, 연결에 문제가 생겼을 때 다음과 같은 상태 변화가 일어납니다.

  1. 스위치 C가 루트 브리지 A와 연결이 끊긴다.

  2. C는 일정 시간동안 참는다.

  3. C는 B가 전달해주는 헬로 패킷을 받아들여 루트 포트를 B와 가까운 것으로 변경한다.

  4. 루트 포트로 선정 후 리스닝, 러닝 상태를 거쳐 포워딩 상태로 변한다.

중요장비 2: 라우터

1. 라우터가 필요한 이유

스위치를 써도 네트워크를 구성할 수 있는데, 그것만으로 부족하고 라우터를 쓸 수밖에 없는 이유는 브로드캐스트 때문이라고 볼 수 있습니다. 만약 인터넷 전체가 하나의 브로드캐스트 영역이면 독일에서 피시 하나가 꺼졌다 켜져도 우리나라 피씨까지 전달될 것입니다. 즉 브로드캐스트 도메인이 너무 커져서 네트워크 사용이 불가능해지겠죠. 따라서 브로드캐스트 도메인을 나누는 것이 중요한데, 이 역할을 라우터가 해줍니다(여러 브로드캐스트 도메인을 연결해줌으로써 말입니다). 또 라우터 덕분에 패킷필터링이라는 보안기능도 가지게 됩니다.

2. 라우터란

라우터는 한마디로 ‘지능을 가진 경로 배정기’라고 할 수 있습니다. 자신이 가야할 길을 자동으로 찾아갈 수 있는 능력을 거진 것이죠. 위에서 하나의 브로드캐스트 도메인이 너무 커지면 안된다고 했고, 그래서 브로드캐스트 도메인을 나눈다고 했습니다. 즉, 브로드캐스트만으로 모두가 통신할 수 없다는 것을 의미하고, 따라서 외부 네트워크를 찾아가야 하는 과제가 생기죠. 라우터가 이 과제를 해결합니다. 예를 들어 내부 네트워크에서 어떤 인터넷 사이트를 찾아가는 데이터가 있다면 라우터가 이 데이터를 목적지까지 빠르게 안내해줍니다.

3. 라우터가 하는 일

라우터가 하는 일은 크게 두가지인데, 첫번째는 경로 결정이고 두번째는 스위칭입니다. 경로결정은 데이터 패킷이 목적지까지 갈 수 있는 길을 검사하고 어떤 길로 가는 것이 가장 적절한 지 결정하는 것을 말합니다. 스위칭은 길이 결정됐을 때 데이터 패킷을 넘겨주는 것을 말하고요.

4. 라우팅 프로토콜

수많은 길 중 가장 좋은 길을 찾는다는 것이 막연히 생각해봐도 굉장히 어려운 일일 것 같은데요. 라우터가 가장 좋은 길을 찾는 데 사용하는 알고리즘을 라우팅 알고리즘, 혹은 라우팅 프로토콜이라고 합니다. 라우팅 프로토콜로 목적지까지 가장 좋은 길을 찾는 것이니, 어떤 라우팅 프로토콜을 사용하느냐에 따라 라우터의 성능이 결정된다고 해도 무방합니다. 라우팅 프로토콜의 종류로는 대표적으로 RIP, IGRP, OSPF, EIGRP 등이 있다고 하네요.

라우팅 프로토콜은 자신의 라우팅 테이블을 가지고, 찾아갈 경로에 대한 정보를 이곳에 기억해둡니다. 즉 라우팅 테이블은 어떤 길이 좋은 길인지 메모해두는 지도나 이정표 같은 것이죠. 라우팅 테이블에 들어가는 내용은 주로 목적지, 목적지까지의 거리, 어떻게 가야 하는가 등 입니다. 이러한 라우팅 테이블은 시간이 지나며 계속 업데이트 되는데, 그 이유는 새로운 길이 생길 수도 있고 새로운 목적지가 추가될 수도 있기 때문입니다.


라우팅 프로토콜에는 다양한 개념이 있기 때문에, 네트워크를 여러 관점에서 살펴본 것처럼 여러 기준에 따라 분류해보겠습니다.


라우터에 경로가 생성되는 방식에 따른 분류

라우터에 경로가 생성되는 방식에는 수동적으로 엔지니어가 경로를 넣어주는 방식과, 능동적으로 라우터가 직접 경로를 생성하는 방식이 있습니다.

  1. 스태틱 라우팅 프로토콜

    엔지니어가 넣어주는 방식을 스태틱 라우팅 프로토콜이라고 하고, 이름이 뜻하듯 한 번 정해놓으면 다시 수동적으로 넣어주기 전까지 정해진대로 경로를 안내하는 프로토콜입니다. 사람이 경로를 다 넣어주니 라우터는 할 게 별로 없어지고, 따라서 라우팅하는 속도가 빠릅니다. 자신의 정보를 외부에 알리지 않아도 되기에 보안에도 강하고요. 다만, 단점은 번거롭다는 것입니다. 사람이 수동으로 해줘야 하니 그럴 수밖에 없죠. 그리고 만약 입력해준 경로에 문제가 생기면 큰일납니다. 사람이 다시 정해줄 때까지 문제가 지속되니까요. 수동이니까 생기는 당연한 문제들입니다.

  2. 다이내믹 라우팅 프로토콜

    한편 라우터가 직접 경로를 생성하는 방식을 다이내믹 라우팅 프로토콜이라고 하고, 말 뜻대로 상황에 따라 그 때 그 때 변화가 가능한 프로토콜입니다. 사람이 일일이 경로를 입력해 줄 필요 없이, 라우터가 가장 좋은 길을 찾아가는 것이죠. 스태틱과 반대로 자동이기에 사람이 일일이 경로를 입력할 필요가 없다는 장점을 갖습니다. 다만 라우터가 할 일이 많아지기에 라우터에 부담을 줍니다. 빠른 길을 계산해야 하는것, 이정표를 업데이트 해야하는 것 등을 해야하죠. 일반적으로 라우팅 프로토콜이라고 하면 이 다이내믹 라우팅 프로토콜을 말합니다.

이렇게 스태틱 라우팅 프로토콜과 다이내믹 라우팅 프로토콜이 장단점을 가지기에 뭐가 더 좋다기보다는 상황에 따라 더 적합한 게 쓰입니다.

사용되는 범위에 따른 분류

  1. AS

    AS라는 개념이 있는데, 이것은 autonomous system의 약자로 하나의 네트워크 관리자에 의해 관리되는 라우터의 집단을 의미합니다. 하나의 관리 규정 아래서 운용되는 라우터의 집단, 한 회사에 의해 관리되는 라우터의 집단으로 이해해도 무방합니다. 라우터들을 AS라는 그룹으로 묶어주는 이유는 라우터가 가지는 정보를 효율적으로 관리하고 인터넷 서비스를 좀 더 간편하게 제공하기 위함입니다. 즉, AS안에 있는 라우터들은 자신이 속한 AS에 있는 라우터들에 대한 정보만 알고 있으면 통신에 문제가 없게 됩니다. AS 밖과 통신할 때는 AS 안의 문지기 라우터(asbr)에게 정보를 물어봐서 밖으로 나가면 되고요. 문지기 라우터는 자신의 AS와 인접해 있는 다른 AS에 대한 정보를 가지고 있으면서 자기 AS 밖으로 나가는 라우터나 외부 AS에서 자기 AS 쪽으로 들어오는 라우터에게 정보를 제공하는 역할을 합니다. 덕분에 다른 라우터들은 인터넷에 접속하더라도 전 세계 모든 네트워크에 대한 정보를 다 가질 필요 없이, 자신이 속한 AS에 대한 정보만 가지면 됩니다.

  2. Interior Routing Protocol

    라우터가 AS 내부에서 사용하는 라우팅 프로토콜을 Interior Routing Protocol이라고 분류합니다.

  3. Exterior Routing Protocol

    AS 외부에서 서로 라우팅 정보를 주고받기 위해 라우터가 사용하는 프로토콜을 Exterior Routing Protocol 이라고 분류합니다.

라우팅 테이블을 어떤 식으로 관리하는가에 따른 분류

  1. 디스턴스 벡터 알고리즘

    디스턴스 벡터 알고리즘은 라우팅 테이블에 목적지까지의 ‘거리’와 목적지까지 가려면 어떤 인접 라우터를 거쳐서 가야 하는지에 대한 ‘방향’을 저장하는 알고리즘입니다. 목적지까지의 모든 경로를 라우팅 테이블 안에 저장하는 것이 아니라는 말이죠. 거리와 방향만 저장하기 때문에 인접 라우터들과 주기적으로 라우팅 테이블을 교환해 자신의 정보에 변화가 생기지 않았는 지 확인하고 관리합니다. 이러한 디스턴스 벡터 알고리즘은 한 라우터가 모든 라우팅 정보를 가지고 있을 필요가 없기 때문에 라우팅 테이블을 줄일 수 있어서 메모리를 절약하고, 라우팅 구성 자체가 간단하며 여러 곳에서 표준으로 사용되고 있다는 장점을 가집니다. 반면 라우팅 테이블에 아무런 변화가 없더라도 정해진 시간마다 한번씩 라우팅 테이블의 업데이트가 일어나기 때문에 트래픽을 쓸데없이 낭비합니다. 또 라우팅 테이블에 변화가 생길 경우 이 변화를 모든 라우터가 알 때까지 걸리는 시간이 너무 느립니다. 한 라우팅 테이블에 변화가 생기면 이웃 라우터에게 전달하고, 그 라우터가 또 이웃 라우터에게 전달하는 식이기에 전체적으로 보면 라우팅 테이블의 변화를 알아채는 데 오래 걸리는거죠. 이런 단점 때문에 디스턴스 벡터 프로토콜은 커다란 네트워크에는 거의 쓰지 않습니다. 작은 규모의 네트워크에 적용할 때 구성의 편리와 메모리 절약 등의 장점을 살릴 수 있죠.

  2. 링크 스테이트 알고리즘

    링크 스테이트 알고리즘은 라우팅 테이블에 목적지까지의 모든 경로를 다 저장하는 알고리즘입니다. 링크 스테이트 알고리즘은 먼저 링크에 대한 정보(어디에 어떤 네트워크가 있고, 거기까지 가려면 어떤 라우터를 통해야 한다는 정보)를 데이터베이스로 만듭니다. 이렇게 만든 데이터베이스를 가지고 spf(shortest path first)라는 알고리즘을 계산하게 됩니다. spf는 어디로 가야 가장 빨리 갈 수 있는가를 계산하는 알고리즘입니다. 이 계산 결과를 가지고 라우터는 spf 트리를 만듭니다. spf 트리란 출발지에서 목적지까지를 마치 나뭇가지처럼 펼쳐놓은 후 가장 빠른 경로를 찾아가는 방식입니다. 이렇게 트리가 만들어지면 라우터는 그 트리 정보를 이용해 라우팅 테이블을 만들게 됩니다. 링크 스테이트 알고리즘은 한 라우터에서 목적지까지의 모든 경로를 알고 있기 때문에 중간에 링크의 변화가 생겨도 이를 알아내는 데 걸리는 시간이 짧습니다. 또 이웃 라우터들과 라우팅 테이블을 교환하는 과정에서도 모든 라우팅 테이블을 교환하는 디스턴스 벡터 방식과 달리 라우팅 테이블의 교환이 자주 발생하지 않고, 일어나더라도 테이블에 변화가 있는 것만 교환하기 때문에 트래픽 발생을 줄여줍니다. 하지만 라우터가 모든 라우팅 정보를 관리해야 하기 때문에 메모리를 많이 소모하고, spf 계산 등 여러 계산을 해야 하기 때문에 라우터 cpu가 일을 많이 해야 합니다. 따라서 커다란 네트워크에 설치되는 고용량 라우터에 적용하는 것이 바람직합니다.

이 포스트에서는 제가 “후니의 쉽게 쓴 시스코 네트워킹”이라는 책을 읽고 중요하다고 생각되는 내용을 정리해봤습니다. 내용을 간추리다보니 빠진 내용이 좀 있는데, 위 내용을 보고 “대강 이런 내용이 있구나” 정도로 생각해주시면 감사하겠습니다.