최근의 컴퓨터 케이스 후면을 보면 거의 필수적으로 이더넷 포트(혹은 랜포트)가 존재합니다. 만약 이 이더넷 포트가 없다면 이 글을 볼 수 있는 기회가 없을테지요(^^;) 우리가 인터넷 익스플로러나 FTP 와 같은 클라이언트를 통해 자료를 검색, 전송, 확인하는 등의 다양한 행위들의 결과는, 바로 이 조그마한 구멍(?)을 통해서 이루어짐을 의미합니다. 전 세계 어딘가로 여행을 떠나기 위한 첫 관문이 바로 이더넷 포트인데, 과연 우리는 이에 대해 얼마나 알고 있는지 미약하나마 한번 알아보기로 하겠습니다.
과연 이더넷(Ethernet)이란?
회선상에서 데이터를 전송하는 여러 가지 방식들중 현재 전세계적으로 90% 이상 사용되는 대표적인 네트워크 형태로, 제록스(Xerox)의 연구원이었던 밥 메칼프(Bob Metcalfe)와 데이빗 벅스(David Boggs)에 의해 소개되었습니다. 데이터를 전송하기 위해 CSMA/CD라는 약속을 사용하며, 전송속도는 현재 10~1000Mbps 까지 다양하게 존재합니다.
이더넷(Ethernet) 이란 약속을 통해 네트워크를 구성하기 위해선, 네트워크 인터페이스 카드(NIC) 혹은 쉽게 랜카드, 이더넷 카드로 부르는 장비를 설치해야 합니다. 이 랜카드의 역할은 우리가 원하는 많은 작업결과가 여러단계를 거치게 되며, 결국 전압의 높낮이로 구별시킨후 네트워크 상에 전파시키는 역할을 하게 됩니다.
간단히 한줄로 설명이 끝나긴 했지만 이 과정은 매우 세분화되어 있으며, 이에 대한 국제적인 규칙이 존재합니다. 즉 총 7단계로 이루어진 이 과정은 "OSI(Open System Interconnection) 7 계층"으로 불리우며, 인터넷을 유지하고 있는 TCP/IP 역시 이 약속과 매우 비슷한 형태를 유지하고 있습니다. (7공주 시리즈 같기도 ...)
이명동인(異名同人)의 "이더넷 카드", "랜카드", "네트웍 인터페이스 카드"
- MAC(Media Access Control)
위 그림과 같이 네트워크가 연결되어 있고 A,B,C 컴퓨터들은 각자의 랜카드가 설치되어 있다고 가정해 보면... A, B, C 가 데이터를 전송하거나 받기 위해서 혹은 자신의 존재유무를 알리기 위해서는 네트워크 상에서 구별할 수 있고 변치않는 이름이 필요하게 됩니다. 마치 우리네의 주민등록번호 처럼...
이를 위해 랜카드들은 저마다 고유한 이름이 붙어있으며, 이 이름을 MAC(Media Access Control) 주소 혹은 물리적 주소라고 부릅니다. - 주변에서 흔히 볼수있는 잡초일지라도 저마다 이름을 붙여주면 구별이 가능하지 않을까요?
윈도우즈 2000/XP에서 명령 프로프트창을 열고 "ipconfig /all" 입력
위의 이미지를 보면 알수있듯이 MAC Address(통상 "맥 주소")는 12개의 16진수로 이루어져 있습니다. - 무슨 주소가 이렇게 긴지 -_-; 컴퓨터는 알다시피 "높고", "낮음"의 전압차 즉, 2진수만을 인식하기 때문에 이를 사람들이 쉽게 구분하기 위해서, 위의 MAC 주소역시 16진수로 변환해 표현하고 있으며, 이를 2진수로 풀어본다면 총 48개로 , 48 비트임을 알 수 있습니다. - 48비트면 현재 우리가 사용하는 IP주소(IPv4는 32비트크기)보다도 엄청나게 큰 수치입니다.
MAC 주소는?
위에서 본 것처럼 총 48비트 크기를 가지며 랜카드마다 고유한 값을 가집니다. 48비트를 28비트 + 28비트로 나누어 볼 때, 앞의 28비트는 이더넷 카드를 제조한 업체의 고유한 값을 나타냅니다. 위의 예에서 앞의 24비트 만큼을 보면 44-45-53으로 나타내는 값은 특정업체의 제품임을 의미하는 것입니다.
그리고 나머지 28 비트는 생산할 수 있는 총 개수로 생각해 볼 수 있는데, 즉 2의 28승인 268,435,456 개 만큼의 고유한 제품 번호를 붙일 수 있습니다. - 만약 이더넷 카드를 2억 6천만개 보다 많이 팔게되면... ? !
자 그럼 MAC주소에 대해 요약해 보면... 이 값은 변경이 불가능한 유일한 값으로 제품의 생산시 정해지게 됩니다. 즉 지구에서 단 하나뿐인 값을 사용하고 있는 셈인데, 그렇다면 이런 의문이 생길 수도... "IP주소가 있어야 인터넷이 되지 않습니까? 어디선가 들었는데 IP주소도 유일한 값이라고 하던데... 무슨 유일한 주소가 두 개씩이나 필요한가요 ?"
- 이더넷의 약속은 CSMA/CD를 지키는 것부터....
앞선 의혹들을 풀어보려면, 일단 이더넷의 몇가시 특징을 짚고 넘어가야 합니다. 이전 페이지에서 언급된 것처럼 이더넷(Ethernet)에서는 CSMA/CD란 약속을 사용합니다. 이 CSMA/CD란 네트워크에 연결된 컴퓨터들간의 효율적인 신호전송의 한 방법으로, 이더넷이 바로 이 CSMA/CD를 사용하는 대표적인 예 입니다. 보기에는 길어도 막상 속내를 들여다 보면 아래와 같이 간단한(?) 방법으로 이루어집니다.
CSMA/CD 이렇게 동작한다 (Carrier Sense Multiple Access/Collision Detect)
1. 회선상에 이미 다른 신호(Carrier)가 있는지 감지(Sense)를 한다. 2. 이미 회선이 사용중이면 잠시 기다린 후 1번을 반복한다 3. 회선을 사용할 수 있게 되면 즉시 데이터를 전송한다 4. 만약 수신 컴퓨터가 응답이 없거나 다른 신호와 충돌이 발생하면 일정시간동안 대기후 다시 1번부터 실시한다.
이처럼 CSMA/CD 방식은 여러 컴퓨터들이 단일 회선을 통해 효율적인 통신을 하기 위한 규칙으로 볼 수 있습니다. 좀더 구체적인 예를 통해 알아보도록 하면, 아래와 같은 네트웍이 구성된 환경에서 C컴퓨터는 F컴퓨터에게 데이터를 전송할 예정이며, F 컴퓨터의 IP주소를 알고 있고 가정하겠습니다.
C에서 출발한 패킷의 목적지는 F
일단 C는 전송할 데이터를 위해 몇가지 단계를 거치게 되고, F 컴퓨터의 IP주소를 전송이 준비된 데이터와 함께 준비하게 됩니다. 편지봉투에 편지지(데이타)를 넣고 겉면에 받는사람 주소(IP주소)를 적는 것과 매우 흡사합니다. (참고) 회선상에 흘러다니는 데이터를 환경에 따라 통상 프레임 혹은 패킷이란 용어를 사용합니다.
C컴퓨터는 IP주소를 편지봉투의 받는사람 주소란에 적고 다음 단계로 가게 됩니다. 다음단계에서 받는 사람의 IP주소를 보게되면, 이 IP주소를 갖는 컴퓨터가 어디에 사는지, 즉 패킷을 받을 F 컴퓨터의 물리적 위치(MAC주소)가 어디인지를 알아야 하는 상황에 부딪히게 됩니다. - 드디어 MAC주소가 빛을 볼날이...
이때 적절한 방법을 사용해 IP주소를 MAC 주소로 변경하는 과정을 거친후, 받는사람의 주소에는 IP주소가 아닌 MAC주소가 적히게 됩니다. 즉 IP 주소를 랜카드가 이해할 수 있는 물리적 주소(MAC주소)로 변환하는 과정을 거치게 됩니다.
그후 마침내 C컴퓨터의 이더넷카드(랜카드)로 전송할 패킷이 내려오게 되고, 랜카드는 이를 네트웍 회선에 흘러보내게 됩니다. 이를 통상 뿌린다고도 하는데, 네트웍에 뿌려진 데이터는 회선이 연결된 구석구석으로 펴지게 됩니다. 마치 길다란 파이프와 같아서 한쪽에서 고함을 치면 귀를 대고 있는 사람들이 모두 들을 수 있는 것에 비유할 수 있습니다.
ARP (Address Resolution Protocol)
IP주소를 MAC주소로 변환시키는 약속으로 ARP 이란것이 사용됩니다. 그 반대의 경우 즉 MAC주소를 IP로 변환하는 약속도 있으며 이를 RARP라고 합니다. 중요한 것은 송수신을 하기위해 모든 처리가 끝마쳐지고, 마침내 물리적인 랜카드까지 전달된 데이터의 송수신에는 IP주소가 아닌 물리적주소, 즉 MAC주소가 사용된다는 것입니다. 즉 논리적인 주소(IP)를 물리적인 주소(MAC)로 변환시키게 됩니다.
- 이더넷에서 충돌이 발생하면...
앞서 CSMA/CD를 설명했는데 이를 현재 상황에 적용해 보면, 랜카드가 네트웍에 패킷을 뿌리기전 다른 신호(Carrier)가 있는지 검사하게 되며, 이 뿌려진 신호는 출발지 컴퓨터 C를 제외한 A,B,D,E,F 의 모든 컴퓨터들에게 전달되게 됩니다.
충돌(Collision)
만약 C에서 데이타 전송이 네트웍으로 막 일어나려고 하는 찰라에, B에서 회선상태를 점검해본 결과 아무런 신호를 듣지 못하게 되었다고 가정해 보면...
그럼 B는 아무런 죄책감(?)없이 데이터를 회선에 뿌리게 되고, D 역시 이런 B의 만행을 알지 못한채 회선에 데이터를 전송시키게 되는 사태가 일어납니다. 이러한 상황을 충돌(Collision)이 발생했다고 하는데, 충돌이 발생하게 되면 B,D는 랜덤한 시간(느낄 수 없을만큼 짧다)을 기다린후 다시 회선상태를 감지(Carrier sense)하는 것부터 시작하는 반복적인 일상에 들어가게 됩니다.
CSMA/CD를 사용하는 이더넷에서는 충돌발생시 위와같은 방법을 사용하게 됩니다.
- 유니,멀티,브로드캐스트
C의 이더넷카드에 의해 네트워크로 뿌려진 데이터는 연결된 모든 컴퓨터들의 이더넷 카드에 전달됩니다. 이를 수신한 이더넷 카드는 전달받은 편지봉투(데이타)위에 적힌 주소(MAC 주소)를 확인하게 되는데, 자신의 MAC주소와 비교해 받을껀지 무시할 것인지 판단하게 됩니다.
위에 예를 든 것과 같이 C컴퓨터가 F로 데이터를 전달할 때 F의 MAC주소를 목적지로 하여 전달한 이런 방식을 통상 유니캐스트(혹은 싱글캐스트)라고 합니다. 즉 한 컴퓨터를 타켓으로 한다는 뜻이겠지요^^. 그밖에 브로드 캐스트, 멀티캐스트등이 존재합니다.
유니캐스트(Unicast) 네트웍에서 발생하는 신호들은 모두 목적을 가지고 있습니다. 즉 데이타를 받을 컴퓨터가 존재한다는 의미인데요, 수신할 컴퓨터들이 하나일 수도 있고 다수일 수도 있고 모두가 될 수도 있습니다. 그중 특정한 하나의 컴퓨터에게 신호를 보내는 경우를 유니캐스트(싱글캐스트)라 합니다.
브로드캐스트(Broadcast) 반면 위에서 은글슬쩍 넘어간 IP주소를 MAC주소로 바꾸는 경우를 다시 한번 생각해 보면... C 컴퓨터는 데이터를 받을 컴퓨터의 IP주소만 알고 있는 상황인데, 데이터 전달을 위해 MAC주소가 필요하게 되고, 이를 알기위해 " IP를 가지고 있으면 대답을 해주세요 !" 라는 신호를 보내면서 모두 들을 수 있도록 독특한 신호를 사용하게 됩니다.
즉 네트웍에 연결된 모든 컴퓨터에게 신호를 받아보도록 하는데, 이를 브로드캐스트(Broadcast)라 합니다. 통상 목적지 MAC 주소에 "FF-FF-FF-FF-FF-FF"를 사용하면 이를 브로드 캐스트 신호로 여기게 되며, 이 브로드 캐스트 신호를 수신한 모든 컴퓨터들은 다른 일을 멈추고(?) 응답해 주어야 하는 상황에 놓이게 됩니다. (참고) ARP라는 약속 자체가 이 브로드캐스트 신호를 사용합니다. 즉 "IP주소가 x.x.x.x 인 컴퓨터는 손들고 빨랑 응답해라.. 라는 식으로" ^^
멀티캐스트(MUlticast) 멀티캐스트의 경우 전체가 아닌 일부를 대상으로 신호를 보낼 경우 사용하며, 특정 IP주소들이 멀티캐스트용으로 예약되어 있습니다.
데이터를 수신하게되는 F 컴퓨터는 어떤 일이 일어날까요? 앞서 살펴보았지만 꼭 목적지가 자기자신(F)이 아니더라도 모든 신호들은 전달되게 되는데, 즉 A, B 컴퓨터가 둘이 속삭이고(?) 싶어도 언뜻언뜻 들리게(?) 됩니다. 이 때문에 이더넷은 구조적으로 충돌이 빈번히 발생할 수 밖에 없습니다.
- 이더넷 카드(랜카드)는 CPU에게 인터럽트를 발생시킨다
자 그럼 F컴퓨터가 수신한 데이터를 처리하는 과정을 살짝 유추해 보면, 일단 회선을 통해 데이터가 전달되게 되면 F의 이더넷카드(랜카드)는 해당 데이터의 목적지 MAC주소를 살펴본후 이것을 수신해야 하는지 여부를 판단하게 됩니다. 만약 수신해야하는 판단이 서게되면, 해당 편지봉투를 열고, 또 열고, ...여러번 열어 마침내 내용물을 판단하게 됩니다. (편지 봉투안에는 또 다른 편지봉투가 있어 몇 번이고 열어야 합니다.)
이와 동시에 이더넷 카드는 시스템에 인터럽트(interrupt)를 발생시켜 "내가 데이터를 좀 받았는데, CPU야 처리좀 해라 !" 하며 반 강제적인 요구를 하게 되며, 인터럽트가 발생하면 시스템은 인터럽트 우선순위에 따라 이를 처리하게 됩니다. - 만약 회선상에 브로드캐스트 신호가 넘쳐 난다면 충돌이 증가할 가능성이 높을뿐만 아니라 회선에 연결된 모든 시스템들은 수시로 발생하는 브로드 캐스트 신호 때문에 인터럽트를 발생시키고, 쓸대없는 CPU 자원을 소비하게 됩니다.
인터럽트(Interrupt)
과거 IBM 호환 PC들은 총 15개(8+7)의 IRQ(Interrupt ReQuest)가 존재합니다. 통상 시스템 타이머가 IRQ 0으로 가장높은 우선순위를 지니며, 바로 그 뒤를 키보드가 점유하고 있습니다.
통상 이더넷 컨트롤러의 IRQ는 높은 우선순위로, 사운드 카드는 낮은 우선순위를 설정하는 것이 일반적입니다. 물론 낮게 설정했다고 체감할 수 있을 정도는 아닙니다. 게다가 윈도우즈의 플러그&플레이(PnP)기능이 보편화 됨에 따라 자동으로 IRQ가 할당되기 때문에 최근엔 특별히 고려할 필요가 없어졌습니다.
- 네트워크의 다양한 형태 : Bus
과거 도스(DOS)를 사용할 때만 해도 여러컴퓨터를 서로 연결하는 네트워크가 큰 주목을 받지 못했습니다. 그 당시 컴퓨터를 사용해 누군가와 접촉(?)한다는것은 일종의 특권이기도 했습니다. 그러나 지금 네트웍이 안되는 컴퓨터가 과연 컴퓨터 소리를 들을 수 있을까요? 그만큼 컴퓨터가 보급됨에 따라 혼자가 아닌 여럿이 어울려야 제 맛임을 깨닫게 되었습니다. 자 그럼 이러한 컴퓨터를 통한 네트웍을 구성하는 방법에는 어떤 것들이 있으며 무엇이 필요한지 알아보면...
가장 일반적인 네트워크의 형태는 위와 같이 중앙에 백본(Backbone)두고 호스트(혹은 노드)들을 연결한 형태입니다. 위의 그림과 같은 연결형태를 통상 버스(Bus) 라 부르는데, 회선의 양 끝에는 신호의 반송을 막기위해 터미네이터(아놀드? ^^) 혹은 접지를 시키는 것이 일반적입니다. 버스형태는 얼마전 까지만 해도 중소규모의 랜환경에 주로 사용되어왔지만 지금은 보기 드물 게 되었습니다. 매우 단순한 구조를 가지고 있지 않나요?
단점을 지적해 보면, 특정 호스트가 문제를 일으켜 요상한(?) 신호를 끊이지 않고 지속적으로 회선에 뿌리게 되면, CSMA/CD을 사용하는 이데넷의 특성 때문에 다른 호스트들은 계속 기다려야 하는 상황에 오게되고 회선을 혼자 독차지 하게 됩니다. 결국 통신을 못하게되는 일이 발생하게 되는데, 이로인해 전체 네트워크는 다운된 것과 다를바 없어집니다. 말그대로 무용지물이 되는셈이지요. 게다가 어떤 녀석이 문제를 일으켰는지도 찾기가 쉽지 않게 됩니다.
- 네트워크의 다양한 형태 : RIng
자 다음은 링(Ring) 형태를 띈 네트워크 모델이 있습니다. Bus와 마찬가지로 중앙에 백본을 두고 있지만 양끝을 서로 연결시켜 원형을 만들어 주었습니다. 링 형태를 사용하는 대표적인 네트웍크중 '토큰링(Token Ring)'이란 것이 있습니다.
토큰(Token)은 80년대까지 버스를 탈 때마다 내야했던 바로 그 토큰(현재의 회수권?)과 매우 흡사합니다. 일단 네트웍상에 하나의 토큰을 생성한 후, 이 토큰을 가진 컴퓨터만 통신할 수 있는 권한이 생기게 됩니다. 네트웍에 연결된 다른 녀석들은 손가락만 빨며(^^) 순서를 기다려야 합니다. 이후 자신의 할 일을 마쳤거나 토큰의 사용기간이 만료되면 옆의 컴퓨터로 토큰을 전달하는 방식을 취하게 됩니다.
이런 제한적인 네트워크 구조로, 버스나 추후설명할 스타구조와는 달리 이더넷의 특징인 충돌(Collision)이 발생하지 않습니다. 현재 이런 토큰링은 흔히 보긴 어렵고 몇몇 대형서버들에서 주로 사용되고 있습니다.
- 네트워크의 다양한 형태 : Star
스타 구조는 현재 가장많이 사용되고 있습니다. 게다가 대부분의 네트웍 장비들도 스타구조를 지원하고 있습니다. 허브나 스위치, 그리고 최근 인터넷의 확산으로 잘알려진 IP공유기가 바로 스타구조를 지원합니다. 가장 큰 장점으로는 아래 그림처럼 확장이 매우 간편하다는데 있습니다. 게다가 버스형태와는 달리 특정 호스트에 문제가 발생할 경우, 위치를 파악해 해결하기가 매우 간편합니다.
확장이 용이한 스타구조
최근엔 특정 호스트가 문제를 일으킬 경우 자동으로 회선에서 격리시켜주는 지능적인 장비들도 있으며, 이렇게 네트웍에서 분리해주는 기능을 오토 파티셔팅(Auto-Partitioning) 이라고 부르기도 합니다. 위에서 소개한 3가지외에 Mesh, Hybrid등의 복합적인 네트웍형태도 존재합니다.
- 서브넷(Subnet)
우리가 사용하고 있는 랜환경, 즉 이더넷에서 발생되는 모든 신호들은 각 호스트로 전달되며, 특히 브로드캐스트 신호 혹은 신호의 목적지가 자기자신인 경우는 해당 호스트들이 반드시 처리해야 한다는 사실을 알았습니다. 인터럽트가 걸리기 때문에 피할 수는 없는데... 그렇다면 과연 이 신호의 전파범위는 어디까지 일까요?
(딴지) 데이터를 전송할 때만이 아니라 컴퓨터를 킬 경우에도 ARP 신호가 발생합니다. 동적으로 IP주소를 얻기위해 ARP를 사용하곤 합니다 → ARP는 브로드케스트 신호입니다 → 인터넷은 거대한 네트워크입니다 → 인터넷에 연결된 엄청난 컴퓨터들이 켜질 때마다 브로드케스트 신호가 발생하게 됩니다 → 컴퓨터를 부팅할 때마다 케이블을 뽑지 않으면 브로드캐스트신호가 인터넷을통해 날라갑니다 → 지구상에 존재하는 컴퓨터들이 부팅할 때마다 발생된 이 신호는 내 컴퓨터의 랜카드까지 전파됩니다 → 않그래도 할 일 많은 내 컴퓨터는 지구촌 친구들이 보내준 엄청난 신호를 처리하느라 바빠집니다...
결국 엄청난 인터럽트에 걸리게 되고 탐색기하나 실행하는데 몇분이나 걸릴지도 모릅니다. 아니면 아예 컴퓨터가 다운되던지 ... -_- 혹시 지금도 전세계의 브로드캐스트 신호들이 케이블을 타고 흘러들오지 않을까요? 목적지의 물리적 주소를 FF.FF.FF.FF.FF.FF 로 설정만 하면 여러분도 해커가 ? ^^
회선을 따라 전파되는 신호들의 전파범위를 적절히 제한하지 않으면 인터넷은 존재할 수가 없겠지요? 과연 어떤 방법으로 해결할까요? 일단 신호가 어디까지 전파될 것인지를 나누어야 합니다. 이렇듯 해당신호가 전달되는 범위를 일컬어 "네트워크 세그먼트" 혹은 "서브넷" 이라고 부르고 있습니다. 네트워크를 이런 세그먼트를 나누기 위해서는 보통 물리적인 장비들을 사용하거나 논리적인 방법(IP주소처럼)이 사용되곤 합니다.
서브넷으로 나누기위한 물리적 방법에는 브리지, 스위치, 라우터란 장비가 있으며, 논리적으로 나누는 방법으로는 바로 IP주소를 사용하는 것입니다. 즉 위의 그림에서 ? 표시가 된 부분에 브리지,스위치 혹은 라우터가 있다면 A,B는 독립적인 서브넷이 됩니다. 즉 설정에 따라 회선상의 신호가 전달되거나 차단되거나 하는 것이 가능합니다.
왜 서브넷으로 나누고 신호를 차단하는 것이 필요할까요? 앞서 살펴본 것처럼 이더넷에 사용되는 CSMA/CD 프로토콜은 충돌이 불가피 하다고 했습니다. 즉 회선상에 연결된 컴퓨터들이 많아 질수록 충돌이 일어날 확률이 높아지게 됩니다. 이 때문에 한 회선에 연결하는 컴퓨터의 수를 제한하기도 합니다.
이더넷에서 충돌이 일어나는 영역을 콜리젼 도메인(Collison Domain)이라고 부르는데, 서브넷으로 나누는 이유는 이 콜리젼 도메인의 크기를 적절히 조절하기위한 것으로도 해석해 볼 수 있습니다.
주변에서 쉽게 구할 수 있는 더미허브의 경우는 앞서 말한 신호에 대한 처리가 불가능하며 단지 신호를 재 전송하는 초보적인 수준의 장비입니다. 이 때문에 허브를 리피터(Repeater)라고 부르기도 합니다. (저는 앵무새라고 부르고 싶습니다^^) 어쨋든 현재 시장에서는 단순한 허브 보다는 저렴한 스위치 장비들이 늘어나고 있는 추세입니다.
- IP주소이야기 #1
IP주소는 32개의 이진수로 이루어져있는데, 사람이 알아보기 편하도록 각각 4등분한후 점(.)을 찍어 구분짓고 있습니다. 초창기, 32비트는 워낙에 큰 수이기 때문에 관리상의 편의(?)를 위해서 A,B,C,D,E 등의 클래스로 나누었습니다. A 클래스의 경우 사용할 수 있는 IP주소는 이론상 224 -2 (약 1천6백만개) 만큼의 컴퓨터들에게 고정아이피를 부여할 수 있는 거대한 크기입니다.
초창기에는 주로 국가나 규모가 큰 대형통신망등에 A클래스를 할당하곤 했지만 현재 네트워크의 엄청난 보급으로 인해 클래스기반의 IP주소는 역사속으로 잊혀지고 좀더 세분화된 구별법(classless)을 쓰고 있습니다.
그러나 날로 늘어가는 IP주소의 수요로 인해 좀더 커다란 크기(IPv6 는 128비트의 크기를 가집니다)를 갖는 IP주소가 도입되고 있습니다.
(참고) IP주소중 내부 네트워크 망에서만 사용하는 주소가 존재하는데, 이 주소들을 사설 IP(Private IP)라고 부릅니다. 사설 IP주소들은 외부 네트웍크로 연결되지 않는 특징이 있습니다. 사설 IP주소와 구별되도록 일반적으로 인터넷에 사용하는 IP주소들을 공인IP (Public IP)라고 합니다.
각 클래스 별 사설 IP주소를 살펴보면, 10.x.x.x (A클래스), 172.16.x.x ~ 172.31.x.x (B클래스), 192.168.x.x (C클래스) 가 이에 해당합니다.
IP공유기를 사용하게되면 일반적으로 192.168.x.x 로 시작하는 주소가 할당되는데, 신기하게 인터넷이 됩니다. 이는 사설 IP가 네트웍 외부로 나가지 못한다는 원칙과는 다른데.... ??
위와 같이 물리적인 방법으로 네트웍을 나눌 수도 있지만, 좀더 유연한 방법도 함께 사용되고 있습니다. 바로 우리에게 익숙한 IP주소를 이용하고 있습니다. 32비트 IP주소(IPv4)를 사용해 밖으로 나갈지 여부를 결정하게 되는데, 이를 이해하기 위해서는 네트워크 입문서에 자주 거론되는 A 클래스니 B 클래스에 대한 이해가 필요하며, 서브넷 마스크(Subnet Mask)도 필요로 합니다.
간단히 설명해 보면, IP주소는 단순히 연속된 32비트의 이진수(예: 211.200.9.10)이지만 네트워크 장비들은 이 IP주소를 두 부분으로 나누어서 보게됩니다. 예로 든 211.200.9.10 과 같은 경우 클래스기반 IP주소체계에서는 두 부분으로 나누어 보게되며, 각각 네트워크 부분(211.200.9) 와 호스트 부분(10)으로 나눌 수 있습니다.
앞부분을 네트웍 부분, 뒷부분을 호스트 부분이라고 하며, 두 부분중 네트워크 부분을 보고 이 IP주소가 외부 네트웍으로 전달되어야 하는지 아니면 내부 네트웍에서 처리되어야 하는지 판단하게 됩니다. 그후 해당 네트워크에 도달되면 호스트부분을 통해 해당 컴퓨터를 찾게 됩니다.
- IP주소이야기 #2
IP주소를 두 부분, 그러니까 네트워크와 호스트 부분으로 나누는 이유는 무엇이고, 나누는 기준은 어떤 것일까요? 이미 언급하였지만 어떤 데이터(패킷)을 원하는 목적지로 전송하려할 때, 목적지의 네트워크 위치는 어디인지를 알아야 하는데, 바로 이때 IP주소의 네트워크 부분을 보고 판단하게 됩니다. 그리고 목적지 네트워크 안에 어떤 컴퓨터가 데이터를 받아야 하나? 이는 호스트 부분을 보고 판단하게 됩니다.
이렇게 두 부분으로 나누었기 때문에 IP주소를 물리주소(MAC주소)와 달리 입체적(?), 계층적 혹은 2차원적 주소로 볼 수 있습니다. 반대로 MAC주소를 평면적이라고 합니다. 말이 너무 이상하네요 -_-'; 어쨌거나 IP주소를 두 부분으로 나누게 된 것은 꽤 좋은 아이디어 같습니다.
자 그렇다면 IP주소를 두 부분으로 나누는 기준은 무엇인지 알아보도록 하겠습니다. 과거 클래스기반 IP주소에서는 기준이 딱 정해져 있었습니다. 예를 들어볼까요? A 클래스는 1.0.0.0 ~ 126.255.255.255 까지의 주소들 임을 위에서 언급했습니다. 만약 여러분들이 10.0.0.0 이란 A 클래스 주소를 공짜(?)로 얻게되었다고 가정해 보면... 일단 네트워크 부분은 10.0.0.0 에서 10 이며 호스트 부분은 0.0.0 이 되도록 이미 약속이 정해져 있습니다.
A클래스는 맨 앞부터 8비트, B클래스는 16비트, C클래스는 24비트만큼이 네트워크 부분이며 이를 제외한 부분이 호스트부분 입니다.
여러개의 서브넷으로 나누어야 사용 및 관리가 편리하다
이로인해 호스트 부분에는 0.0.0 ~ 255.255.255 까지 총 224 개수 만큼 컴퓨터들을 연결할 수 있게 되며 각각 컴퓨터들에 IP를 부여할 수 있게 됩니다. 물론 1천6백만대나 되는 컴퓨터를 단일 네트워크에 연결하지는 않겠지요? 이더넷의 충돌이란 특성도 있고 공간상의 문제도 있기 때문에 앞서 말한것처럼 서브넷으로 조각조각 나누어서 관리해야 합니다. 이렇게 나누는 행위를 서브네팅(Subnetting)이라고 합니다.
클래스 기반 IP주소 체계에서 가장 작은 호스트 수를 가질 수 있는 클래스는 C 클래스입니다. 즉 28-2개, 254개의 컴퓨터(호스트)에게 각각 아이피를 부여할 수 있습니다. 각 클래스 별로 연결 가능한 호스트수를 보면 A클래스: 약 1천6백만개, B클래스: 약 6만5천개, C 클래스: 254개인데, 클래스 별로 매우 큰 차이가 있음을 알 수 있습니다.
- 서브넷 마스크(Subnet Mask)
점점 IP주소가 부족해 지는 상황에서, 300개의 호스트 연결이 필요한 네트워크에 벌컥 B클래스 주소를 줄리는 만무하겠죠? 또한 A클래스의 경우 1천6백만개나 되는 호스트를들 단일 네트워크로 연결하기는 사실상 불가능하기 때문에 잘게 나누어야 하는데, 이를 위한 효과적인 방법도 필요하게 됩니다. 이 때문에 IP주소와 함께 서브넷 마스크(Subnet Mask) 란 것을 사용하게 되었습니다.
서브넷 마스크(Subnet mask)
클래스 기반으로 A,B,C 이렇게 나누던 방법에서, 서브넷 마스크를 통해 네트워크를 나눈는 방법의 차이는 무엇일까요? 바로 자신이 원하는 크기로 나눌 수 있다는 것입니다.
서브넷 마스크값은 IP와 동일한 32비트 값으로, 네트워크 부분과 호스트 부분을 구별하기위해 IP주소와 서브넷 마스크값을 "논리적 AND" 처리하는 방법을 사용합니다. 그 결과로 나오게 되는값을 통해 IP주소를 네트워크 부분과 호스트 부분으로 구별할 수 있게되고, 해당 데이터가 외부 네트워크로 나갈건지 여부도 판단하게 됩니다.
즉 자기자신의 네트웍부분과 전송할 패킷의 목적지 IP의 네트웍부분을 서로 비교한후 같으면 ARP를 통해 해당 목적지의 물리주소(MAC)를 알아내여, 데이터를 뿌리게 되고 (유니캐스트로), 서로 다를 경우에는 이미 정해진 출구, 즉 디폴트 게이트웨이(default gateway)로 패킷을 전달하게 됩니다 - 이때도 마찬가지로 "디폴트 게이트웨이를 가진 IP는 응답하라! 그리고 MAC주소를 즉시 알려달라! " 라는 ARP 프로토콜을 사용해 물리주소를 알아낸후 패킷을 디폴트 게이트웨이로 전달하게 됩니다. 즉 자신이 속한 네트웍에 목적지가 없는 경우겠지요. 비로서 해당 패킷이 멀고먼 여행을 떠날 첫 번째 관문에 부딪히게 되는 것이기도 합니다.
- 디폴트 게이트웨이(Default Gateway)
이같이 ARP는 매우 빈번히 쓰이기 때문에 자주 사용되는 IP주소와 MAC어드레스의 내용을 일정시간 기억하게 됩니다. 명령프롬프트 창을 열고 "arp -a"를 입력해주면 ARP 프로토콜을 통해 최근에 알게된(캐쉬된) IP주소와 MAC 주소의 관계를 볼 수 있습니다.
글을 쓰는 환경은 현재 IP공유기를 통해 인터넷을 사용하고 있기 때문에 192.168로 시작하는 사설 IP 주소가 할당되어 있습니다. 맨위의 192.168.1.1은 패킷의 목적지 네트워크가 다를 경우 무조건 보내게 되는 디폴트 게이트웨이의 물리주소가 보입니다.
즉 제 컴퓨터(192.168.1.102)에서 테크노아 랩실외의 곳으로 패킷을 보내게 된다면 무조건 192.168.1.1을 거쳐야 합니다. 여기에서는 192.168.1.1는 IP공유기를 뜻합니다. 그 밑으로는 실장님, 기플, 오군등이 사용하고 있는 랜카드들의 물리주소가 보입니다. 즉 브로드캐스트를 사용하는 ARP로 제가 랩실분들의 CPU 에 인터럽트를 걸어 자원을 몰래(?) 사용했습니다.
- 네트워크 구성의 기본 : 케이블
10Base5 케이블모습
10BaseF 케이블 모습
이더넷의 종류
물리적형태
논리적형태
속도(Mbps)
10Bbase5
버스
버스
10
10Base2
버스
버스
10
10BaseT
스타
버스
10
100BaseTX
스타
버스
100
100BastFX
스타
버스
100
최근엔 데스크탑 PC에서 기가비트(Gigabit) 이더넷이라고 하여 무려 1000Mbps를 지원하는 이더넷 컨트롤러를 탑재한 메인보드가 종종 등장하지만, 현재 가장 많이 사용되는 이더넷 컨트롤러의 전송속도는 10/100Mbps입니다. 보통 랜카드를 구입할 때 "텐백(10/100) 지원하지요? " 라고 물어보기도 하자나요.
RJ-45 커넥터 모습
이런 전송속도외도 이더넷의 종류에 따라 다양한 케이블 규격이 존재합니다. 현재 10/100Mbps(혹은 기가비트이더넷에) 속도를 지원하고, 주변에서 가장 많이 사용되는 케이블은 UTP(혹은 STP) 케이블이 대표적입니다. 양쪽끝은 RJ-45 커넥터를 사용하며, 핀의 순서에 따라서 다이렉트 혹은 크로스 케이블을 구성해 사용하게 됩니다.
UTP는 쉴드 처리되지 않은 꼬인선(UTP - Unshield Twisted Pair)이란 의미로, 기존 케이블들보다 얇고 가벼울 뿐 아니라 확장이 용이해 현재 가장 많이 애용되고 있습니다.
최근 몇몇 네트웍 장비들의 경우 다이렉트 인지 크로스 케이블인지에 관계없이 자동으로 인식하는 것들도 있습니다.
케이블을 나누는 또다른 방법으로는 카테고리(Category)라는 것이 있습니다. 현재 일반적인 10/100Mbps 시스템에서는 카테고리5 케이블을 사용하는데, 이러한 등급은 EIA/TIA-586 표준에 명시되어 있습니다. 우리가 사용하는 10BaseT 이더넷이 주로 카테고리5 를 지원하는 UTP 케이블입니다.
10/100Mbp에 애용되는 CATEGORY 5 지원 UTP 케이블 상자
UTP 케이블을 통한 이더넷은 약 100m의 전송거리를 지원하며, 전화기 단자보다 조금 커보이는 RJ-45 커넥터를 사용하게 됩니다. 다이렉트 케이블에서 송/수신핀의 순서를 바꾸게 되면 크로스케이블로 사용할 수 있으며 실제 송수신에 사용되는 핀은 8개중 4개만 사용하고 있습니다.
UTP 케이블 자작을 위한 도구
UTP 케이블이 사용된 예
- 허브
A에서 D로 데이터를 전송하고자 할때
허브는 단순히 중계를 해주기 때문에 신호를 각 포트로 연결된 컴퓨터들에게 모두 전달하게 됩니다. 위와같이 허브로 이루어진 네트워크를 예를 들면, A컴퓨터에 있는 사용자가 D컴퓨터에게 데이터를 전달한다고 가정해 보면, A로부터 출발된 데이터(패킷)은 허브를 통해 각 호스트들로 전파가 이루어지게 됩니다. 물론 A,B,C는 목적지 주소를 보고 "내께 아니네 !" 하며 버리지만, D컴퓨터는 목적지의 주소를 확인하고, "아! 내꺼군!" 하며 전송을 받게됩니다. (유니캐스트로 전달되었겠죠?)
앞서 이더넷의 특징이 CSMA/CD를 사용함을 알아봤습니다. 이 때문에 되도록 서로 충돌을 피하기위해 다른곳에서 회선을 사용중인지를 살피게되는 예비동작이 필요합니다. 그러나 이더넷에서 충돌은 항상 뒤따라다니는 특징을 가지고 있으며, 위와같이 허브를 통해 네트워크를 확장하게되면 각신호가 전파되는 범위가 커져, 충돌이 일어날 확률이 높아지게 됩니다. 즉 콜리전 도메인(Collision Domain)이 커지게 됩니다.
또한 A에서 D로 데이터를 보내는 그 순간에는 B,C의 컴퓨터들은 회선이 사용중이기 때문에 자신의 차례를 위해 랜덤한 시간동안 기다린후 회선의 사용유무를 검사하게 됩니다. 즉 순간적으로 회선의 사용이 제한되게 됩니다. 이 때문에 허브로 이루어진 네트워크에서는 호스트들이 회선의 대역폭을 나누어 사용하게 됩니다.
- 브리지/스위치
A->E , B->C 로 데이터를 전송
연결해야할 호스트들이 많아지면, 추가적으로 허브를 연결하게되고 이 때문에 콜리전 도메인이 증가하게 됩니다. 이를 효과적으로 해결할 수 있도록 기존의 허브를 개선시킨 네트웍 장비가 바로 브리지(Bridge)입니다. 최근에는 브리지보다 좀더 우수한 기능에 가격까지 저렴해진 스위치(Switch)를 많이 사용하고 있습니다. 일단 스위치란 장비는 브리지의 특징에 좀더 우수한 성능을 가졌다고 생각해주시길...
앞서 허브로 이루어진 네트워크에서는 CSMA/CD의 특성으로 인해 데이터를 전송하는 호스트를 제외하고 나머지 호스트들은 모두 하늘만 바라보아야 하는 불공평한 동작방식을 가지고 있었습니다. 그러나 위의 그림처럼 A는 E로 , B->C로 데이터를 보낸다고 가정해 보면, 브리지(혹은 스위치)를 사용할 경우 전송 데이터(패킷)의 목적지를 중간에 있는 브리지가 검사를 하게 됩니다. 검사결과 목적지가 E라는 것을 판단한 브리지는 B,C,D로 해당 패킷을 뿌리지 않고 목적지인 E로만 전달하게 됩니다. 이러한 기능 때문에 A가 E로 데이터를 전송하는 순간에, B는 회선을 검사한 결과 아무런 신호가 없는 것을 감지한후 C로 데이터를 전송하게 됩니다. 결국 회선의 대역폭을 분할하지 않고도 동시에 전송이 이루어지게 됩니다.
- IP 공유기 = 허브 + 스위치 + DHCP 서버 + 방화벽 ?
자 그럼 최근 많은 유저들이 사용하고 있는 인터넷 공유기(일명 IP공유기)를 통해 글을 정리해 보고, 실제 적용해 보겠습니다. 테스트에 사용한 IP공유기는 애니게이트 GW-300A 모델로 고속의 VDSL을 지원하며, 기본적으로 4포트 스위치역할을 할 수 있습니다. 대부분의 IP공유기들은 앞서 설명한 허브(Hub)뿐 아니라 스위치(Switch)기능을 모두 가지고 있기도 합니다.
4x LAN, 1x WAN 포트를 가진 애니게이트 GW-300A
일반적인 IP공유기의 역할은 ISP업체(한국통신, 하나로등)로부터 유동 혹은 고정아이피를 하나 얻어오게 됩니다. 그후 랜포트에 연결된 해당 컴퓨터들에게 사설 IP(Private IP)를 하나씩 부여하게 됩니다.(보통 C클래스의 사설IP주소를 사용하며 그 영역은 192.168.0.0 ~ 192.168.255.255 입나다) 앞서 언급했지만 사설 IP는 외부 네트워크로 전파되지 않는 태생적 한계가 있습니다.
이 때문에 IP공유기들은 외부 네트워크와의 통신을 가능케하도록, 패킷이 외부 네트워크로 나가게 될 때 이 패킷의 출발지 주소를 자신의 IP주소로 변경시켜 전달하게 되고, 외부에서 내부로 전달되는 패킷이 있을 경우 이 목적지 주소를 상황에 맞게 사설 IP주소로 서로 변경하게 됩니다.
NAT(Network Address Translation)을 사용해 외부 네트워크와 통신하도록...
즉 중간에서 일종의 번역작업을 수행하게 되는데, 이를 NAT(Network Address Translation) 기능이라 합니다. 이 기능으로 인해 IP공유기 자체는 하나의 공인IP를 할당받았지만 연결된 다수의 호스트들에게 사설 IP를 부여하여 인터넷과 같은 외부네트워크와의 통신을 지원하게 됩니다. 즉 NAT 가 바로 IP공유기의 핵심이라고 할 수 있습니다.
게다가 네트워크 외부에서 볼 때는 IP공유기 안의 내부 내트워크 구조를 알 수 없는 상황에 처하게 되는데, 이 때문에 IP공유기는 일종의 방화벽(Firewall)과 비슷하게 볼 수 있습니다. 결과적으로 NAT를 사용하기 때문에 사설IP를 사용하게 되더라도 인터넷이 가능하게 됩니다.
- 자동으로 IP주소를 받아오자
일단 IP공유기를 연결한 상태에서 컴퓨터를 부팅(자동으로 IP를 받아오게 설정. 즉 DHCP 클라이언트로 동작하도록)하게되면 네트워크에 브로드케스트 신호를 보내 DHCP서버를 찾게됩니다. DHCP서버기능을 가진 IP공유기는 이에 대한 적절한 응답으로 IP하나를 대여해주는 역할을 하게됩니다.
4대의 호스트를 연결할 수 있으며 확장도 가능
자동으로 IP를 받아오도록 DHCP 클라이언트를 구성
자동으로 IP을 얻어오는 DHCP
ISP업체로부터 유동 IP주소를 받아오기 위해서 DHCP 라는 약속을 사용합니다. 즉 ISP의 DHCP 서버는 빌려줄 수 있는 IP주소 리스트(이를 IP Pool이라고 합니다)를 가지고 있습니다. 고객 컴퓨터가 부팅되면 DHCP 서버에게 남는 IP주소를 하나 요구하게 되고, 적당한 IP주소를 골라 전달하게 됩니다. - 이를 IP주소를 대여(Lease)한다는 표현을 사용합니다.
IP공유기 역시 DHCP서버로 동작시킬 수 있습니다. 이로인해 IP주소를 수동으로 할당할 필요없이(수동으로도 사용가능합니다) 컴퓨터를 부팅하는 것만으로도 동적으로 IP들이 할당됩니다.
IP공유기들은 사설IP주소를 내부 네트워크에 사용합니다. 할당가능한 사설 IP주소는 임의로 변경할 수 있는데, 만약 192.168.1.100 ~ 192.168.1.254 로 설정했다면 부팅시 IP공유기에서 남는 IP를 줄 것을 부탁하게 되고 IP공유기로부터 남는 IP주소가 부여됩니다. - 보통 요구한 순서대로 주소가 정해집니다.
(참고#1) IP공유기에 사설IP로 사용되는 가장 흔한 주소는 192.168.x.x 이며, C클래스에 속하는 주소입니다. (참고#2) IP공유기 대신 구형 컴퓨터를 IP공유기와 비슷하게 사용하는 방법도 있습니다. 리눅스 라우터가 그중 한가지인데, NAT와 비슷한 IP 머스커레이딩(Masquerading)을 사용합니다.
- IP공유기의 필수설정사항
IP공유기의 설정에 대해 살펴볼까요? 일단 인터넷 익스플로러를 통해 IP공유기로 접속을 해야합니다. 일반적으로 IP공유기에 할당되는 내부 IP주소의 기본값은 192.168.1.1 입니다.
위와 같이 IP공유기로 접근하게 되면 여러 가지 설정이 가능합니다. 위의 "내부 IP주소", "서브넷마스크" 는 크게 손댈 필요가 없습니다. 그 밑에는 IP공유기를 DHCP 서버로 사용할지 여부를 선택하게 되는데, 연결된 컴퓨터들을 모두 수동설정하기 싫다면 DHCP로 사용하는 것을 추천합니다. 그 밑부분은 할당할 IP주소들, 즉 할당할 사설IP 주소의 범위를 설정해 주면 됩니다.
IP공유기들은 최대 254개까지 호스트를 연결할 수 있는데, 예를들어 192.168.1.2~192.168.1.245 와 같이 지정이 가능합니다. (참고) 192.168.1.0은 해당 네트워크를 대표하는 이름, 192.168.1.1 은 IP공유기를 의미하며 192.168.1.255는 브로드캐스트 주소로 사용됩니다.
- IP공유기 전송속도의 허와실
A->C, D->E 로 데이터 전송
앞서 살펴본 것처럼 IP공유기는 스위치로의 역할도 수행하게 됩니다. 즉 위 그림에서 A->C로, D->E로 데이터를 동시에 전달할 수 있다는 의미입니다. 이 때문에 허브와는 달리 스위치(위의 그림에선 IP공유기)가 지원하는 회선속도에 근접하게 사용할 수 있습니다. 즉 100Mbps 스위치허브기능을 가졌다면 A->C, D->E 모두 이에 근접한 전송속도로 데이터를 주고받을 수 있습니다.
그러나 이러한 상황은 1:1 일 경우에만 해당합니다. 즉 A->C로 전송중인데, D->C로 전송을 동시에 하려한다면 2:1 상황으로 돌변하게 되며, 회선속도는 1/2로 줄어들 게 됩니다.
이를 IP공유기에 적용해 볼까요? 인터넷으로 향하는 외부회선(WAN)은 하나뿐인데 위 그림에서 총 5개의 호스트들이 모두 인터넷을 사용한다고 가정하면, 1:5 상황이 됩니다. 즉 모든 호스트가 인터넷으로부터 데이터를 송/수신하는 상황에서는 대역폭을 1/5 로 쪼개어 사용하게 됩니다.