검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 네트워크
이더넷은 OSI 7 Layer로 따지면 2계층인 데이터 링크(Data Link), TCP/IP로 따지면 1계층인 네트워크 액세스(Network Access)에 속합니다. 이런 식으로 이야기하면 딴 세상 이야기 같지만 사실 우리는 언제나 이더넷을 이용하고 있습니다.

  이 시대에 우리가 일상에서 흔히 랜 카드라고 부르는 물건은 거의 전부 이더넷 카드입니다. 즉, 우리는 언제나 이더넷을 이용하고 있습니다. 그렇다면 과연 어떻게 이용하고 있을까요? 이더넷(정확히는 이더넷 뿐만이 아니라 OSI 2계층에 속한 프로토콜 모두)에서는 각각의 데이터 단위를 프레임이라고 부릅니다. 이더넷의 프레임 안에는 자신의 주소와 목적지의 주소 정보도 포함되어 있습니다. 무슨 주소냐고요? IP 주소냐고요? 아닙니다. 여러분에게 가기 위해 인터넷을 건너온 데이터가 여러분과 가장 가까운 라우터에 도착하면 그때부터는 여러분을 찾아가기 위해 여러분의 MAC 주소(랜 카드 주소)가 필요합니다.

  그렇다면 과연 어떻게 데이터가 목적지까지 찾아갈 수 있는 걸까요? 아래의 설명은 같은 네트워크 안에 있는 두 PC끼리 통신을 하는 일련의 과정을 편지에 비유하여 설명한 것입니다.

사용자 삽입 이미지

  PC1: "PC3한테 뭐 좀 보내야지."
  PC1은 편지를 쓴 후 편지 봉투(IP 패킷의 헤더)에 넣고 출발지에 192.168.100.10, 목적지에 192.168.100.30이라고 쓴다. 그리고 나서 그 편지 봉투를 또 다른 편지 봉투(이더넷 프레임 헤더/트레일러)에 넣고 출발지에 AAAA:AAAA:AAAA, 목적지에 CCCC:CCCC:CCCC라고 쓴다.
  PC1: "자, 이제 보내볼까? 어이, 허브. 이것 좀 다른 곳으로 보내줘.(허브에게 편지를 던진다.)"
  허브: "(편지를 받고)음, 편지가 왔군."
  허브는 자신과 링크가 이어진 포트가 몇 개인지 본다. 이때 자신에게 편지를 보낸 포트는 제외한다.
  허브: "음. 편지 보낸 곳 빼고 나하고 연결된 선이 2개군. (편지를 똑같이 복사해서 2개로 만들어 PC1, PC2에게 건내며)편지 왔다."
  PC2: "(편지를 받아보고)음. 이거 내 MAC 주소가 아니네. 버려야지."
  PC3: "(편지를 받아보고)음. 이거 내 MAC 주소네. 뜯어보자."
  PC3이 편지 봉투를 뜯자 또 편지 봉투가 나온다. 안에 있던 편지 봉투의 목적지에는 192.168.100.10이라고 적혀 있다.
  PC1: "(안에 있는 편지 봉투의 목적지를 보고)내 IP 주소 맞네?(편지 봉투를 뜯는다.)"

  위의 내용을 보면 결국 이더넷 망에서 데이터를 전송하려면 데이터를 보낼 곳의 IP 주소와 MAC 주소를 모두 알아야 합니다. 만약 자신이 속한 네트워크 전체에 뭔가를 보내고 싶을 경우 어떻게 해야 할까요? 이럴 때는 목적지 MAC 주소에 'FFFF:FFFF:FFFF'라고 적어서 보냅니다. 이 주소를 '브로드캐스트 주소'라고 합니다. MAC 주소에 브로드캐스트 주소를 입력해서 보낼 경우 그 프레임을 받은 장비 중 이더넷 프레임을 직접 처리할 능력이 있는 모든 장비들은 해당 프레임을 받아들입니다. 만약 위의 네트워크를 바탕으로 이 상황을 재현하자면 아래와 같습니다.

  PC1: "음. 이건 이 네트워크 내에 있는 모두에게 말해야 할 내용이군."
  PC1은 편지를 쓴 후 편지 봉투에 넣고 출발지에 192.168.100.10, 목적지에 192.168.100.255이라고 쓴다. 그리고 나서 그 편지를 다시 다른 편지 봉투에 넣고 출발지에 AAAA:AAAA:AAAA, 목적지에 FFFF:FFFF:FFFF라고 쓴다.
  PC1: "자, 이제 보내볼까? 어이, 허브. 이것 좀 다른 곳으로 보내줘(허브에게 편지를 던진다.)"
  허브: "(편지를 받고)음, 편지가 왔군. (PC1, PC2에게)편지 왔다."
  PC2, PC3: "(편지를 받아보고)음. 브로드캐스트 MAC 주소군. 뜯자."
  PC2, PC3이 편지 봉투를 뜯자 또 편지 봉투가 나온다. 안에 있던 편지 봉투의 목적지에는 192.168.100.255라고 적혀 있다.
  PC1: "(안에 있는 편지 봉투의 목적지를 보고)IP 주소도 브로드캐스트 주소군. 뜯어야겠네."

  위의 내용 중 IP의 마지막 옥텟에 255라고 적은 주소가 나오는데 이런 주소도 똑같이 '브로드캐스트 주소'라고 부릅니다. 이에 대한 설명은 나중에 IP 어드레싱과 서브네팅에 대한 포스팅을 할 때 하겠습니다. 일단은 MAC 주소와 IP 주소 모두 브로드캐스트 주소라는 것을 가지고 있다고 알아두시면 됩니다. 우리가 흔히 게임에서 볼 수 있는 '랜 게임'이라는 것도 바로 이 브로드캐스트를 이용하는 것입니다. 그런데 이 브로드캐스트라는 것은 라우터를 넘어갈 수 없습니다. 즉, 다른 네트워크에는 전달되지 않는다는 것이죠. 그렇기 때문에 자신과 연결된 라우터를 넘어 다른 네트워크에 있는 사람과는 랜 게임을 할 수 없는 겁니다. 피시방에서 방을 만들면 해당 피시방에 있는 사람들끼리만 같이 랜 게임을 할 수 있는 것도 같은 이유입니다.

  자, 그런데 첫 번째 예제에서 PC1은 PC3의 MAC 주소를 어떻게 알고 있었던 걸까요? OSI에서 2계층 데이터를 처리할 수 있는 장치들은 각자 '이러이러한 IP 주소를 가지고 있는 장치는 이러이러한 MAC 주소를 가지고 있다'라는 내용이 담긴 테이블을 유지하고 있습니다. 이것을 MAC Address Table이라고 부릅니다. 이더넷에서 데이터를 보낼 때 각 장치들은 자신의 테이블을 참조하여 목적지 주소에 상대의 MAC 주소를 적습니다. 윈도우, 유닉스, 리눅스 등 대부분의 운영체제에서 'arp -a'라는 명령어를 사용하면 이 테이블을 볼 수 있습니다. 하지만 과연 PC1이 처음부터 PC3의 MAC 주소를 알고 있었을까요? 필요한 MAC 주소 정보가 자신의 테이블에 없을 때는 아래와 같은 방법을 통해 목적지의 MAC 주소를 알아냅니다.

  PC1: "음. PC3에게 할 말이 있는데 이 녀석 MAC 주소가..."
  PC1이 PC3의 IP 주소를 가지고 자신의 MAC Address Table을 살펴본다.
  PC1: "어? 192.168.100.30의 MAC 주소 정보가 없네?"
  PC1이 '자기 IP 주소가 192.168.100.30이면 MAC 주소 좀 알려줘'라는 내용의 편지를 작성하고 편지 봉투에 넣은 후 목적지를 FFFF:FFFF:FFFF로 쓴다. 편지는 허브를 통해 PC2와 PC3에게 전해진다.
  PC2: "(편지를 받아보고)음. 브로드캐스트 MAC 주소군. 뜯자. (편지의 내용을 보고)내 IP는 192.168.100.20인데? 나하곤 상관 없는 편지군. 버려."
  PC3: "(편지를 받아보고)음. 브로드캐스트 MAC 주소군. 뜯자. (편지의 내용을 보고)아니! 누가 날 찾는군."
  PC3은 '192.168.100.30의 MAC 주소는 CCCC:CCCC:CCCC'라는 편지를 작성하여 편지 봉투에 넣고 목적지에 AAAA:AAAA:AAAA라고 써서 보낸다.

  이렇게 필요한 IP 주소가 자신의 테이블에 없을 경우 브로드캐스트를 이용하여 자기가 속한 네트워크 전체를 대상으로 해당 IP를 사용하는 장비의 MAC 주소를 수소문하는 일련의 과정을 행하는데 이것을 ARP(Address Resolution Protocol)라고 합니다. 위에서 잠깐 언급한 'arp -a' 명령어의 정체가 바로 이것이죠. 각 장비들은 ARP를 통해 위의 예처럼 자신에게 필요한 MAC 주소를 동적으로 학습합니다. 참고로 일정 시간 동안 참조하지 않은 MAC 주소들은 삭제하여 테이블에 오래된 정보가 남지 않도록 관리합니다.

  지금까지 설명한 내용이 이더넷의 기본적인 작동 원리입니다. 위의 예처럼 만약 데이터의 목적지가 자신의 이더넷 내부 있을 경우 이더넷 껍질(이더넷 프레임 헤더와 트레일러)을 붙이고 이더넷 카드(랜 카드)를 통해 내보냅니다. 이렇게 보내진 이더넷 프레임을 받은 각 2계층 이상의 장비들은 도착한 프레임의 목적지 MAC 주소와 자신의 주소를 비교합니다.(위의 예에서 허브는 1계층 장비이므로 프레임의 내용을 보지 않고 전달만 했던 겁니다.) 자신의 MAC 주소와 프레임의 목적지 MAC 주소가 일치함을 확인한 장비는 이더넷 프레임의 껍질(프레임 헤더/트레일러)을 버리고 그 안에 있는 IP 패킷의 껍질(패킷 헤더)을 봐서 목적지 IP가 자신의 IP와 일치하는지 살펴봅니다. 이번에는 외부 네트워크(라우터를 이용해야 도달할 수 있는 곳)에서 온 데이터의 전달 과정을 보겠습니다.

사용자 삽입 이미지

  인터넷으로부터 라우터로 데이터가 도착했다.
  라우터: "음 편지가 도착했군. 어디 한번 뜯어볼까?"
  편지를 뜯자 목적지 IP가 192.168.100.10이라고 적힌 편지가 나왔다.
  라우터: "목적지 IP가 192.168.100.10이군? 어디보자..."
  라우터는 자신의 라우팅 테이블을 살펴본다.
  라우터: "192.168.100.0 네트워크는 내 아래 달린 네트워크군! 이걸 내 안으로 전달해야겠어. 근데 192.168.100.10의 MAC 주소가 뭐더라..."
  라우터는 자신의 MAC 주소 테이블을 찾아본다.
  라우터: "여기 있다! 192.168.100.10의 MAC 주소는 AAAA:AAAA:AAAA군."
  새로운 편지 봉투를 작성한다. 출발지에는 자신의 MAC 주소를 쓰고 목적지에는 'AAAA:AAAA:AAAA'라고 적는다. 작성을 마치고 자신에게 도착한 편지를 그대로 자신이 작성한 편지 봉투에 넣고 자신의 내부로 편지를 전달한다.
  허브: "어? 편지 왔네."
  편지를 복사해서 총 3개로 만든 후 PC1, PC2, PC3에게 편지를 하나씩 던진다.
  PC3: "(편지를 받아보고)음. 이거 내 MAC 주소가 아니네. 버려야지."
  PC2: "(편지를 받아보고)음. 이거 내 MAC 주소가 아니네. 버려야지."
  PC1: "(편지를 받아보고)음. 이거 내 MAC 주소네. 뜯어보자."
  PC1이 편지 봉투를 뜯자 그 안에 아까 라우터가 넣었던 편지 봉투가 나온다. 안에 있던 편지의 목적지에는 192.168.100.10이라고 적혀 있다.
  PC1: "(안에 있는 편지의 목적지를 보고)내 IP 주소 맞네?(편지 봉투를 뜯는다.)"

  라우터는 자신이 받은 (OSI 모델의)2계층 데이터의 껍질(예를 들어 PPP헤더/트레일러)을 버린 후(이 부분은 위의 예에서 나오지 않았습니다.) 그 속에 있는 IP 패킷의 껍질(패킷 헤더)를 살펴봅니다. 그리고 그 데이터에 다시 껍질(적절한 OSI 2계층 헤더와 트레일러)을 붙여서 적절한 경로로 보냅니다. 만약 위의 예처럼 자신의 이더넷 포트 내부에 목적지가 있을 경우 위의 예와 동일한 과정을 거쳐 목적지까지 전달합니다.

  자, 아까 전에 브로드캐스트는 라우터를 넘어갈 수 없다는 말을 했었습니다. 사실 라우터가 있는 곳이 이더넷 망이 끝나는 지점이 됩니다. 그런데 인터넷을 통해 특정 대상과 통신을 하려면 라우터(정확히는 게이트웨이)를 거쳐 외부로 나가야 합니다. 그럼 대체 이더넷 프레임과 IP 패킷을 어떻게 작성해서 자신의 이더넷 망으로 흘려야 할까요?

사용자 삽입 이미지

  PC1: "음. IP 주소가 192.168.1.2인 PC2라는 장비랑 통신을 해야 하는군. 일단 내 IP는 192.168.0.2니까 C클래스군. C클래스니까 내가 속한 네트워크는 192.168.0.0이고 IP 주소 범위는 192.168.0.0~192.168.0.255지. 내가 통신하려는 장비의 IP 주소가 192.168.1.2니까 똑같이 C클래스고 네트워크는 192.168.1.0이며 IP 주소 범위는 192.168.1.0~192.168.1.255군...응? 나랑 같은 네트워크가 아니네?"
  PC1은 자신의 디폴트 게이트웨이의 IP와 MAC 주소를 MAC Address Table에서 확인한다. 대부분의 경우 디폴트 게이트웨이는 자신과 가장 가까운 라우터이다.
  PC1: "음. 내 디폴트 게이트웨이의 IP 주소는 192.168.0.1이고 MAC 주소는 BBBB:BBBB:BBBB군. 디폴트 게이트웨이한테 이 데이터 좀 전달해달라고 해야겠다.
  PC1은 편지를 작성한 후 편지 봉투의 출발지에 192.168.0.2를 쓰고 목적지에 192.168.1.2를 쓴다. 그리고 나서 그 편지를 다시 다른 편지 봉투에 넣고 출발지에 AAAA:AAAA:AAAA라고 쓰고 목적지에 BBBB:BBBB:BBBB라고 쓴다.
  PC1: "자, 이제 이 편지를 이더넷 망에 흘리자"
  Router1이 이더넷 망에 흘러다니는 편지를 줍는다.
  Router1: "이 편지는 뭐지? (편지의 목적지를 본다.)엇? 내 MAC 주소네? 어디보자..."
  Router1은 편지 봉투를 뜯어 그 안에 들어 있던 또 다른 편지 봉투의 목적지를 확인한다.
  Router1: "목적지가 192.168.1.2라...일단 이 편지가 온 네트워크와 같은 네트워크는 아니군. 그렇다면 인터넷 쪽으로  흘려야지. 나머진 인터넷에 있는 여러 라우터들이 알아서 전달해주겠지.
  Router1은 인터넷 쪽으로 연결된 시리얼 구간으로 데이터를 보낸다. 이때 OSI 2계층을 사용하지만 이더넷이 아닌 PPP나 HDLC 등과 같은 프로토콜을 사용한다. Router1이 보낸 데이터는 인터넷의 많은 라우터들을 거쳐 Router2에 도착한다.
  Router2: "편지가 왔군. (편지를 살펴본다.)목적지가 192.168.1.2라고? 나한테 붙어 있는 네트워크네? 192.168.1.2의 MAC 주소를 찾아볼까...(MAC Address Table을 보고)여기 있다. DDDD:DDDD:DDDD군.
  Router2는 새로운 편지 봉투를 꺼내 출발지에 CCCC:CCCC:CCCC라고 쓰고 목적지에DDDD:DDDD:DDDD라고 쓴 후 자신이 받은 편지를 그대로 그 안에 집어넣어 이더넷 망에 흘린다.
  PC2: "(이더넷 망의 편지를 보고)편지네. 어디보자. (목적지 주소를 보고)나한테 온 거군."
  PC2는 봉투를 뜯어 그 속에 있는 또 다른 편지 봉투의 목적지가 192.168.1.2임을 확인한다. 이로써 PC2는 자신이 줏은 편지가 자신을 위한 편지임을 확신하고 봉투를 뜯어 편지의 내용을 확인한다.

  뭔가 복잡해 보이지만 결론은 간단합니다.
  1. PC1이 보낼 때 목적지 IP는 PC2, 목적지 MAC은 Router1으로 작성.
  2. Router1은 PC1에게 받은 것을 인터넷을 통해 Router2에게 전달한다.
  3. Router2은 출발지 MAC을 자신의 MAC, 목적지 MAC을 PC2로 작성해서 전송.

  여기서 우리는 중요한 사실을 알 수 있습니다. 라우터 밖으로(즉, 인터넷으로) 데이터를 보낼 때는 목적지 IP 주소에는 최종 목적지를 적지만 목적지 MAC 주소에는 자신이 속한 이더넷 망이 끝나는 지점인 자신의 게이트웨이(라우터)를 적는다는 것입니다. 또한 최초에 출발지와 목적지에 적었던 IP 주소는 전송과정에서 변하는 일이 없지만 출발지와 목적지에 적은 MAC 주소는 라우터에서 나올 때마다 둘 모두 바뀐다는 겁니다.


참고 도서: CCENT / CCNA ICND1 Official Exam Certification Guide

2010/08/07 00:43 2010/08/07 00:43
Posted
Filed under 네트워크
IP(IPv4 기준)는 총 32비트(=4바이트)로 되어 있으며 보통 10진수로 표기해서 사용합니다. 또한 8비트마다 보통 점(.)으로 구분해서 표기하는데 이 각각의 바이트를 옥텟이라고도 부릅니다. 각 옥텟은 1바이트의 범위인 0~255의 값을 가집니다.

  IP 주소는 네트워크 부분과 호스트 부분으로 나눠져 있습니다. 네트워크 부분을 동네 이름이라고 한다면 호스트 부분은 번지수라고 할 수 있습니다. 즉, 네트워크 부분이 같은 호스트들은 전부 같은 네트워크 안에 속해 있는 겁니다. 라우터도 바로 이 네트워크 부분만을 보고 패킷을 어디로 보낼지 결정합니다. 그렇다면 네트워크 부분과 호스트 부분이 어딜 기점으로 나눠지는 것인지 그 기준이 필요하겠죠? 1차적인 기준은 바로 '네트워크 클래스'입니다. 아래 표는 네트워크 클래스별 특징을 요약한 표입니다.

사용자 삽입 이미지

  '네트워크 부분 길이'는 해당 클래스가 네트워크를 구분하기 위해 주소 중 얼마나 많은 부분을 사용하는지를 나타내고 있습니다. 전체 주소 길이(4바이트) 중 네트워크 부분을 제외한 모든 부분은 해당 네트워크에 속한 호스트의 주소를 나타내는데 사용하기 때문에 네트워크 부분의 길이가 짧다는 것은 그 만큼 한 네트워크당 호스트의 수가 많다는 것을 의미합니다.

  '호스트 부분 길이는' 해당 클래스가 네트워크 안에 있는 호스트를 나타내기 위해 주소 중 얼마나 많은 부분을 사용하는지를 나타내고 있습니다. IP 주소는 4바이트로 구성되어 있으므로 네트워크 부분을 나타내는데 사용하고 남은 부분은 모두 호스트 부분을 나타내는데 사용됩니다. 예를 들어 A 클래스는 네트워크 부분에 사용되는 길이가 1바이트므로 나머지 3바이트는 호스트를 나타내는데 사용합니다.

  '첫 번째 옥텟'은 각 클래스의 첫 번째 옥텟의 필수 조건을 나타내고 있습니다. 이건 매우 중요한 사항이기 때문에 꼭 알고 넘어갈 필요가 있습니다. A 클래스의 경우 첫 번째 비트가 '0'으로 시작해야 하며 그 뒤의 7비트는 원하는 값을 넣을 수 있습니다. 단, 전부 1을 넣어 127로 만들거나 전부 0을 넣어 0으로 만들면 특별한 의미를 갖는 주소가 되기 때문에 그 2개는 사용할 수 없습니다. 그렇기 때문에 A 클래스의 첫 바이트를 10진수로 표현하면 1~126의 값이 됩니다. 즉, 전 세계에 A 클래스 네트워크는 겨우 126개 밖에 존재하지 않습니다. B 클래스 네트워크의 경우 처음 두 비트가 '10'으로 시작해야 합니다. 그러므로 첫 바이트는 128~191의 값이 됩니다. C 클래스 네트워크는 처음 세 비트가 '110'으로 시작해야 하기 때문에 192~223의 값을 가집니다.

  '네트워크 개수'는 각 클래스마다 존재하는 네트워크의 개수입니다. 이것은 네트워크 부분의 길이와 각 클래스별 첫 번째 옥텟의 조건을 통해 유추할 수 있습니다. 예를 들어 A 클래스의 경우 네트워크 부분을 나타내는데 8비트(1바이트)를 사용하는데 A 클래스의 조건은 '첫 번째 비트가 0으로 시작할 것'이므로 총 7비트를 조합하여 네트워크를 만들 수 있습니다. 그러면 2^7이므로 총 128개지만 첫 번째 옥텟이 0인 것과 127인 것은 특별한 의미로 쓰이는 네트워크 주소이기 때문에 실제로 쓰이는 건 126개입니다. B 클래스는 총 16비트(2바이트)를 네트워크 부분으로 사용하는데 맨 앞의 두 비트가 '10'으로 시작해야 하기 때문에 조합할 수 있는 수는 2^14가 됩니다. C 클래스도 마찬가지 방법으로 계산합니다.

  예약된 두 네트워크 중 0.0.0.0 네트워크는 원래 브로드캐스트 주소로 사용되기 위해 정의된 주소지만 실제로는 쓰이고 있지 않습니다. 또 다른 예약된 네트워크인 127.0.0.0 네트워크는 자기 자신을 가리키는 의미로 사용하는 네트워크 주소로서 보통 '루프백(Loopback) 주소'라고 부르며 0.0.0.0 네트워크와 달리 실제로 사용이 가능합니다.

  '네트워크 부분 범위'는 해당 클래스에 속하는 네트워크 주소의 범위를 보여주고 있습니다. 각 클래스별 네트워크 부분의 길이와 앞서 설명한 클래스별 첫 번째 옥텟의 필수 조건을 생각해보면 A 클래스의 경우 1.X.X.X ~ 126.X.X.X, B 클래스의 경우 128.0.X.X ~ 191.255.X.X, C 클래스의 경우 192.0.0.X ~ 223.255.255.X를 네트워크 부분의 주소로 사용할 수 있다는 것을 알 수 있습니다.

  '사설 네트워크 부분 범위'는 내부의 사설 네트워크를 뜻하는 특별한 주소로서 인터넷이 가능한 공인IP 주소로 사용할 수 없는 범위의 주소들입니다. 여기서 눈여겨봐야 할 것은 B 클래스입니다. B 클래스의 사설 주소 범위는 172.16.0.0 ~ 172.32.0.0이기 때문에 첫 옥텟이 '172'로 시작한다고 해서 무조건 사설 주소인 것은 아니라는 것을 잘 알아둬야 합니다.

  '네트워크당 호스트 개수'는 하나의 네트워크에 존재할 수 있는 호스트의 개수를 말합니다. 예를 들어 A 클래스는 네트워크 부분을 나타내는데 8비트를 사용하므로 나머지 24비트는 호스트를 나타내는데 사용합니다. 여기서 알아야 할 것은 각 네트워크마다 예약된 주소가 2개씩 존재한다는 것입니다. 먼저 호스트 부분의 비트가 모두 0인 경우입니다. 예를 들어 A 클래스 주소 11.0.0.0은 실제 호스트의 주소로 사용할 수 없습니다. 왜냐하면 저 주소를 호스트의 주소로 쓸 수 있을 경우 11.0.0.0이라는 주소가 11.X.X.X 네트워크 전체를 뜻하는 것인지, 아니면 11.0.0.0이라는 주소를 가진 하나의 호스트를 뜻하는 것인지 알 수 있는 방법이 없기 때문입니다. 그렇기 때문에 네트워크 자체를 뜻하는 주소들(호스트 부분이 전부 '0'인 주소)은 호스트에 할당할 수 없도록 예약되어 있습니다. 예약된 또 다른 주소는 호스트 부분의 비트가 모두 1인 경우입니다. A 클래스는 예로 들자면 11.255.255.255 같은 주소들이지요. 이런 주소들을 네트워크 브로드캐스트 주소(Network Broadcast Address) 또는 다이렉티드 브로드캐스트 주소(Directed broadcast Address)라고 부릅니다. 이 주소는 '이 네트워크에 있는 모든 호스트'라는 뜻을 가지는 특수한 주소입니다. 같은 네트워크에 있는 모든 호스트에게 패킷을 전달하는 용도로 쓰이는 주소로서 호스트에 할당할 수 없습니다. 결론적으로 각 네트워크마다 호스트 부분의 비트가 모두 0인 주소, 호스트 부분의 비트가 모두 1인 주소는 사용할 수 없습니다.

  멀티캐스트용으로 쓰이는 D 클래스와 실험용으로 쓰이는 E 클래스 주소들도 있지만 비중이 너무 없는 관계로 생략하겠습니다. 네트워크 부분과 호스트 부분을 구분 방법 중 더 세련된 방법인 '서브네팅'은 매우 중요한 내용이므로 따로 설명하도록 하겠습니다.


참고 도서: CCENT / CCNA ICND1 Official Exam Certification Guide
2010/08/04 23:45 2010/08/04 23:45
Posted
Filed under 네트워크
당연하지만 원래 통신 회사들은 음성 서비스를 통해 사업을 했었습니다. 그러다 기술의 발전으로 20세기 중반에 디지털 송신을 통해 음성을 전송하는 표준을 개발합니다. 아날로그 음성을 디지털 신호로 변환하는 기술을 PCM(Pulse Code Modulation)이라고 합니다. PCM은 아날로그 신호를 초당 8천번 샘플링하고 각 샘플을 8비트로 표현하므로 1초의 음성에 64,000비트를 사용합니다. 통신사가 최초의 디지털 네트워크를 만들었을 때 기본 통신 속도가 64 kbps였는데 그 이유가 바로 이것 때문입니다. 하나의 64 kbps 회선에 대한 표준을 DS0(Digital Signal Level 0)라고 부르며 이런 회선을 합쳐 하나의 빠른 회선을 만드는 기술을 TDM(Time-Division Multiplexing)이라고 합니다. 이런 기술을 이용하여 흔히 사용되는 회선 서비스들은 아래와 같습니다.

<회선별 속도>


  T1과 T3는 주로 미국에서 사용하고 E1과 E3는 유럽과 일본에서 사용합니다.


참고 도서: CCENT / CCNA ICND1 Official Exam Certification Guide
2010/08/03 16:04 2010/08/03 16:04
Posted
Filed under 네트워크
ISP에서 제공하는 WAN 회선에는 여러 가지 속도가 지정되어 있으며 그 중 한 종류의 속도를 쓸 수 있도록 지원합니다. 이 속도를 클록률(Clock Rate), 대역폭(Bandwidth), 링크 속도(Link Speed)라고 부릅니다. 통신사에서는 고객이 요청한 속도에 쓸 수 있는 회선을 설치해야 하지요. 또한 링크의 양쪽 끝에 있는 CSU/DSU에도 정한 속도에 맞도록 설정을 해줘야 합니다.

  연결이 작동하려면 링크에 참여하고 있는 여러 장비들이 같은 속도로 작동하도록 장비들의 클록을 맞춰야 하는데 이 과정을 동기화(Synchronous)라고 부릅니다. 양쪽의 장비는 거의 같은 속도로 작동하면서 반대 쪽의 장비의 속도를 파악합니다. 이런 동기화를 통해 한쪽이 다른 쪽과 속도를 일치시키기 위해 클록률을 조금씩 조정합니다.

  이러한 동기화는 전용선에서 두 CSU/DSU 사이에서 일어나며 한쪽 CSU/DSU(슬레이브)가 반대쪽 CSU/DSU(마스터)의 클록률에 맞춰 자신의 클록을 조정함으로써 실현됩니다. 이런 일은 1초에도 여러 번 발생합니다.

  통신 회사는 회선에서 전기 신호 변화를 기반으로 CSU/DSU에게 클로킹 정보를 제공합니다. 양쪽의 CSU/DSU는 통신 회사로부터 받은 클로킹 신호에 맞춰 속도를 조정합니다. 그러면 각 CSU/DSU는 라우터에게 클로킹 신호를 제공하고 라우터는 이에 적절한 속도로 데이터를 송수신합니다. 그러므로 라우터의 입장에서는 CSU/DSU가 클록을 조절하는 장비가 됩니다. CSU/DSU처럼 클로킹을 제공하는 장비를 DCE(Data Communication Equipment)라고 부르고 라우터처럼 클로킹을 수신하는 장비를 DTE(Data Terminal Equipment)라고 부릅니다.

  연습용으로 두 라우터를 연결할 때는 CSU/DSU를 쓰지 않고 DTE 케이블과 DCE 케이블을 서로 연결한 뒤 각 케이블을 라우터와 연결시켜 쓸 수 있습니다. DTE 케이블의 커넥터는 튀어나와 있고 DCE 케이블의 커넥터는 파여 있기 때문에 서로 끼울 수 있으며 이러한 생김세를 성적으로 비유하여 DTE 케이블 커넥터를 Male(숫) 모양, DCE 케이블 커넥터를 Female(암) 모양이라고 부릅니다. 이렇게 구성할 경우 두 라우터 중 한 라우터는 DCE(CSU/DSU) 역할을 해야 하며 이것은 (시스코 라우터의 경우)clock rate 명령어로 설정할 수 있습니다. DCE 역할을 하는 라우터에는 DCE 케이블을 연결하고 반대편 라우터에는 DTE 케이블을 연결합니다. 이렇게 두 라우터를 직접 연결하여 Point-to-Point로 구성하는 것을 Back-to-Back 시리얼 연결이라고 합니다. 참고로 DCE 시리얼 케이블은 송신 핀과 수신 핀이 반대로 바뀌어 있어 동작 방식이 Crossover 케이블과 매우 비슷합니다.


참고 도서: CCENT / CCNA ICND1 Official Exam Certification Guide
2010/08/03 12:25 2010/08/03 12:25
Posted
Filed under 네트워크

  인쇄기로 유명한 회사인 제록스가 과거에 PC를 효율적으로 연결하기 위한 이더넷 표준 개발 작업을 시작, 인텔과 DEC을 끌어들여 개발한 끝에 현재 이더넷의 시초인 'DIX 이더넷'이라는 것을 만들었었습니다. 참고로 DIX는 DEC, Intel, Xerox의 각 앞글자들을 딴 겁니다. 그러다가 1980년 초에 이 표준 작업을 IEEE로 이관합니다. IEEE는 이 작업과 관련하여 아래의 두 위원회를 개설합니다.

  IEEE 802.3 위원회: 물리 계층과 데이터 링크 계층의 하위 계층인 MAC(Media Access Control)에 대한 표준 담당.
  IEEE 802.2 위원회: 데이터 링크 계층의 다른 하위 계층인 LLC(Logical Link Control)에 대한 표준 담당.

  참고로 802.3 표준은 이더넷 LAN 네트워크에만 쓰이는 내용이지만 802.2 표준은 이더넷이 아닌 토큰 링 등 기타 LAN 네트워크에도 적용된다는 차이점이 있습니다.

  802.3의 MAC 프로토콜은 주소에 대한 세부 내용을 정의하고 있기 때문에 후에 이 'MAC'이라는 용어가 그대로 이더넷 인터페이스 카드의 주소를 지칭하는 용어로 정착합니다. 이더넷의 주소는 6바이트로 총 48비트의 길이이며 16비트마다 끊어서 총 3개의 세트로 16진수를 이용하여 표기합니다. 시스코 장비의 경우 이 세트를 점(.)으로 구분하므로 'XXXX.YYYY.ZZZZ' 같은 형식으로 나옵니다.

  IEEE는 표준으로 모든 이더넷 카드가 고유한 주소를 갖도록 정했습니다. 이를 실현하기 위해 주소 중 앞의 절반(24비트)을 각 이더넷 카드 제조 업체에 할당하는 값으로 정하고 OUI(Organizationally Unique Identifier)라고 부르게 됩니다. 각 제조 업체는 IEEE로부터 OUI 값을 할당받아 자신들이 생산하는 이더넷 카드의 주소 중 앞부분 24비트에 그 값을 넣고 나머지 뒷부분 24비트에 각 카드 별로 고유한 값을 할당합니다.

  이더넷의 주소는 크게 '유니캐스트 주소'와 '그룹 주소'로 나눕니다. 유니캐스트 주소는 하나의 이더넷 카드를 대상으로 하는 주소로서 MAC 값을 가리킵니다. 그룹 주소는 다시 '브로드캐스트 주소'와 '멀티캐스트 주소'로 나눠집니다. 브로드캐스트 주소는 자신이 속한 LAN의 모든 장비를 대상으로 하는 주소로서 목적지 주소를 'FFFF.FFFF.FFFF'로 입력하여 보냅니다. 멀티캐스트 주소는 LAN의 특정 장비들을 대상으로 하는 주소이며 목적지 주소 중 앞의 3바이트를 '0100.5e'로 세팅합니다. 그러므로 '0100.5eXX.XXXX'의 형태가 됩니다. 뒷부분은 원하는 그룹 번호로 기록하여 쓸 수 있습니다.

  이더넷 데이터는 TCP/IP에서 1계층에 해당하므로 '프레임'이라고 부를 수 있습니다. 이 프레임 헤더의 구조에 대한 표준은 지금까지 2번이 바껴서 총 3개가 있습니다.

이더넷 헤더의 구조

  첫 번째 것은 제록스, 인텔, DEC의 합작인 DIX, 두 번째 것은 IEEE가 80년대 초반에 발표한 표준, 세 번째 것은 97년도에 개정한 표준입니다. 마지막 표준을 기준으로 각 필드의 내용은 아래와 같습니다. 참고로 각 필드의 숫자는 바이트 단위입니다.

  Preamble은 동기화를 개시하기 위한 부분으로 '10101010'이 7번(7바이트) 반복됩니다. 이더넷 카드에서 제거되기 때문에 실제 스니핑 소프트웨어에서는 볼 수 없습니다. SFD(Start Frame Delimiter)은 다음 바이트부터 프레임의 내용이 본격적으로 시작된다는 것을 알리는 부분으로 내용은 '10101011'입니다. Preamble과 마찬가지로 이더넷 카드에 의해 제거됩니다.

  목적지와 출발지에는 그에 해당하는 MAC 주소가 들어갑니다.

  길이/종류 필드에는 프레임이 담고 있는 데이터의 길이 또는 프로토콜이 들어갑니다. 값이 16진수로 0600(10진수로 1536)보다 작으면 해당 프레임의 전체 길이를 나타내고 그렇지 않을 경우 종류를 타나냅니다. 종류를 나타내는 경우 대부분 IP 패킷을 뜻하는 0800(10진수로 2048)이 사용됩니다. 만약 길이 필드로 사용할 경우 종류를 나타내기 위한 필드가 별도로 필요해지는데 이때 하나 또는 두 개의 다른 헤더가 기존의 802.3 헤더와 데이터 부분 사이에 삽입됩니다. 대부분의 경우 TCP/IP를 사용하므로 데이터 부분에 IP 헤더가 들어가는데 이 경우 IEEE 802.2 LLC(Logical Link Control) 헤더와 IEEE SNAP(Subnetwork Access Protocol) 헤더가 삽입되며 '종류'를 기록하는 부분은 SNAP 헤더 안에 있습니다.

  데이터에는 상위 계층의 헤더와 데이터를 담고 있으며 거의 모든 경우 L3PDU(즉, IP 패킷)가 들어 있습니다. 802.3 표준에서는 이 부분(데이터)의 최대 길이를 1500 바이트로 명시하고 있습니다. 그러므로 IP 패킷의 최대 크기는 자동으로 1500바이트가 되며 이를 MTU(Maximum Transmission Unit)라고 부릅니다.

  FCS(Frame Check Sequence)는 프레임이 정상적으로 전송됐는지 확인하기 위해 사용되는 필드입니다. 전송을 하는 장비는 프레임 전체(물론 FCS는 아직 만들지 않았으므로 제외)의 내용을 수학적 함수(CRC)로 계산하여 32비트의 결과값을 만들어 FCS 필드에 넣습니다. 이를 수신 받은 장비는 FCS를 제외한 프레임의 내용을 같은 방법으로 계산하여 결과값을 만든 후 FCS 필드에 있는 값과 비교합니다. 결과가 동일하면 정상적으로 전송된 것이며 그렇지 않다면 중간에 어떤 이유로 프레임이 손상된 것이므로 프레임을 폐기합니다. 단, 여기서 주의할 것은 문제가 있는 프레임을 발견해서 버리기만 할 뿐 복구와 관련된 제어는 하지 않는다는 것입니다. 프레임 단에서 데이터를 버리면 상위 계층 입장에서는 데이터가 전혀 오지 않은 것과 같기 때문에 오류 제어를 담당하는 프로토콜(대표적으로 TCP)이 재전송을 요청함으로써 복구가 이루어집니다.

  마지막으로 각 프레임 사이에는 그 경계를 구분하기 위해 최소 12바이트의 유휴 문자(Idle Character)를 전송합니다. 이를 IFG(Interframe Gap)나 IPG(Interframe Pacing 또는 Interpacket Gap)라 부릅니다.

 

참고 도서: CCENT / CCNA ICND1 Official Exam Certification Guide

2010/08/03 10:49 2010/08/03 10:49
Posted
Filed under 네트워크
우선 케이블링에 대해 알아보기 전에 선행으로 필수적인 용어부터 알아보겠습니다. UTP란 Unshielded Twisted Pair의 약자로서 두 가닥이 꼬여 있는 구리선을 말합니다. (적어도 우리나라에서는)쉽게 볼 수는 없는 STP라는 케이블도 있는데 은박지 같은 막에 둘러싸여 전자 간섭(EMI: Electromagnetic Interference)을 최대한 막아줍니다. 비싸서 잘 안 씁니다. 유럽에서는 대부분 이걸 쓴다는데 진짜인지는 모르겠습니다. 선이 꼬인 이유는 마찬가지로 전자 간의 간섭을 억제하기 위해서라는 건 뭐 학창 시절에도 많이 배우는 내용이니 넘어가고...TP 케이블에는 2쌍이나 4쌍의 전선이 들어 있습니다.

  케이블 끝에는 커넥터를 연결하는데 우리가 흔히 '랜 선'이라고 부르는 케이블을 만들 때는 RJ-45 커넥터를 이용합니다. 커넥터에는 8개의 홈이 있는데 이를 '핀 포지션'이나 줄여서 '핀'이라고 부릅니다. 케이블을 만들 때는 전선 끝이 핀에 끝까지 잘 들어갔는지 확인해야 합니다. 아래의 사진이 바로 커넥터입니다. 낯이 익죠?

사용자 삽입 이미지

  그럼 가장 중요한 배선에 대해 알아보겠습니다. 케이블의 구리선을 적절한 핀에 집어넣는 것을 핀아웃(Pinout)이라고 부릅니다. 이 배선에 대한 표준은 TIA(Telecommunications Industry Association)와 EIA(Electronics Industry Alliance)에서 정의하고 있습니다. 이 핀아웃에는 2개의 표준이 있는데 T568A와 T568B로 불리며 내용은 아래와 같습니다.



  웃기게도 선은 8개인데 10BASE-T와 100BASE-TX에서는 이 중 4개만 사용합니다. 나머지는 자르든 아무렇게나 넣든 간에 상관없지만 이왕이면 표준을 따릅시다. 사용하는 4개(2쌍)는 1, 2, 3, 6번인데 중 2개는 송신, 나머지 2개는 수신에 사용합는다. NIC(Network Interface Card. 일명 '랜 카드')의 경우 1, 2번을 송신, 3, 6번을 수신에 사용합니다. 페어로 말하자면 T568A는 페어 2로 송신, 페어 3로 수신하고 T568B는 페어 3로 송신, 페어 2로 수신한다고 할 수 있겠습니다. 라우터의 이더넷 포트들도 이와 동일하게 동작합니다. 이와 반면 허브와 스위치의 이더넷 포트들은 반대로 1, 2번을 이용하여 수신하고 3, 6번을 이용하여 송신을 합니다. 이것을 보기 쉽게 그림으로 표현하자면 아래와 같습니다.


  두 그림 중 위의 그림처럼 송신용 두 핀과 수신용 두 핀의 위치가 서로 반대되는 장비끼리 연결을 할 때는 선의 양쪽을 동일한 핀아웃으로 만들며 이를 Straight-Through 케이블이라고 부릅니다. 국내에서는 다이렉트 케이블이라고 많이 부르는데 이게 틀린 용어인지 아니면 표준 용어인지 저도 잘 모르겠습니다.

  이와 반대로 두 그림 중 아래 그림처럼 송신용 두 핀과 수신용 두 핀의 위치가 동일한 장비끼리 연결할 때는 케이블 양 끝 중 한쪽의 송신 핀과 수신 핀을 서로 바꿔서 핀아웃 합니다. 즉, 한쪽은 Straight-Through 케이블을 만들 때처럼 만들고 나머지 한쪽은 1, 2번 핀에 3, 6번 선을 끼우고 3, 6번 핀에 1, 2번 선을 끼워 만듭니다. 이렇게 만든 케이블을 Crossover 케이블이라고 부릅니다. 우리에겐 크로스 케이블이라는 이름이 더 친숙하죠.

  추가로 1000BASE-T의 경우 8개(4쌍)의 선을 모두 사용합니다. Straight-Through 케이블의 경우 앞서 봤던 표준 케이블링 핀아웃과 동일합니다. Crossover 케이블의 경우 앞서 봤던 Crossover 케이블에 추가로 4, 5번을 7, 8번과 교차해서 만들면 됩니다.
 

참고 도서: CCENT / CCNA ICND1 Official Exam Certification Guide
일부 그림과 사진 출처 : 위키피디아(http://en.wikipedia.org/wiki/Ethernet_over_twisted_pair)
2010/08/02 11:22 2010/08/02 11:22
Posted
Filed under 네트워크
네트워크를 자세히 공부하기 전에 기본적으로 데이터가 어떻게 전달되는지 알아둘 필요가 있습니다. 이는 프로토콜의 각 계층과 매우 밀접한 관련이 있습니다. 네트워크로 데이터를 보낼 때는 상위 계층의 데이터를 하위 계층으로 보내는데 이때 하위로 보내기 전에 자기 계층이 담당하는 정보를 데이터 앞이나 뒤에 붙이는 포장 작업을 하며 이때 앞이나 뒤에 붙이는 정보를 각각 '헤더(Header)'와 '트레일러(Trailer)'라고 부릅니다. 말로 하면 쓸데없이 복잡하니 간단히 TCP/IP 프로토콜을 예로 들어 표현하겠습니다.


  1. 먼저 애플리케이션 계층에서 네트워크로 보내고 싶은 데이터를 트랜스포트 계층으로 집어던집니다. 유일하게 헤더(와 경우에 따라 트레일러)가 붙지 않는 계층이라고 할 수 있겠네요.

  2. 애플리케이션 계층으로부터 데이터를 건네받은 트랜스포트 계층은 자기 헤더를 데이터 앞에 붙입니다. 대부분 TCP나 UDP 헤더가 붙겠지요. 헤더를 붙이면 인터넷 계층으로 던집니다.

  3. 인터넷 계층은 건내받은 데이터의 맨 앞에 자기 헤더를 붙입니다. 참고로 TCP/IP 모델에서 IP 프로토콜은 인터넷 계층에서 사용할 수 있는 유일한 프로토콜입니다. 헤더를 붙이면 네트워크 액세스 계층으로 던집니다.

  4. 네트워크 액세스 계층에서는 최종적으로 받은 데이터의 앞뒤에 각각 '링크 헤더'와 '링크 트레일러'를 붙입니다. TCP/IP 모델에서 헤더와 트레일러를 모두 붙이는 계층은 이 계층 밖에 없습니다.


  그런데 사실 각 계층이 상위 계층으로부터 받은 데이터를 처리하는 방식을 자세히 표현하자면 아래가 더 정확한 표현이라고 할 수 있습니다.

하지만 이게 진실

  즉, 위에서 뭔 헤더를 어떻게 추가해서 어떻게 보냈건 간에 하위 계층 입장에서는 묻지도 따지지도 않고 그냥 한 덩어리의 '데이터'일 뿐인 겁니다. 이렇게 포장 이사 작업이 끝나면 물리적인 장치를 이용해 비트 단위로 전송 합니다.

  그리고 여기서 포장을 마친 각 계층의 덩어리들을 부르는 용어가 모두 다릅니다.
  세그먼트 - 트랜스포트 계층에서 헤더를 붙여 포장을 마친 데이터.
  패킷 - 인터넷 계층에서 헤더를 붙여 포장을 마친 데이터.
  프레임 - 네트워크 액세스 계층에서 포장을 마친 데이터.

  많은 사람들이 이 용어들을 혼돈하는 경향이 있는데 어떤 용어를 사용하느냐에 따라 어떤 계층의 데이터를 말하는지가 달라지므로 정확히 알고 말하도록 합시다.

  OSI에서는 각 계층의 데이터를 PDU(Protocol Data Unit)이란 용어로 표현합니다. 이때 표현 방식은 'L?PDU'이며 '?'에 OSI 7 Layer를 기준으로 해당 계층의 숫자를 적습니다. 예를 들어 TCP/IP의 '패킷'을 OSI 용어로 표현하면 'L3PDU'가 되는 겁니다.


참고 도서: CCENT / CCNA ICND1 Official Exam Certification Guide
2010/08/02 00:37 2010/08/02 00:37
Posted
Filed under 네트워크
TCP/IP가 나오기 이전에는 각 벤더마다 자체적인 네트워크 프로토콜을 사용했습니다. 그리고 그 스펙도 공개하지 않았는데 이로 인해 같은 벤더의 제품끼리만 네트워크가 가능했습니다. 그러다 1970년대 중반에는 자사의 네트워크 프로토콜을 공개하는 회사가 하나 둘씩 나타납니다. 하지만 이런 건 공개했다고 해도 해당 회사의 소유물이므로 공식적인 표준이라고 볼 수가 없죠. 그러다가 70년대 후반, 국제 표준협회인 ISO(International Organization for Standardization)가 네트워크 프로토콜에 대한 표준화를 위해 OSI(Open System Interconnection) 레퍼런스 모델 제작에 들어갑니다.

  한편, DoD에서도 ISO와 같은 작업에 들어갑니다. 그 결과물이 바로 TCP/IP입니다. 그리고 OSI와 TCP/IP가 경합을 벌이게 되는데 ISO가 표준을 세우는데 있어서 너무 형식적인 면에 치우쳐 실제 개발이 느려 결국 TCP/IP가 왕좌를 차지합니다.

  많은 기술 서적을 읽어보면 OSI 7 Layer와 TCP/IP를 마구 섞어서 설명합니다. 그러다 보니 TCP/IP가 OSI 7 Layer와 완벽히 동일한 계층 구조를 가지고 있는 것으로 잘못 알고 있는 경우가 많습니다. 사실 TCP/IP는 4계층 구조입니다.

4계층 - 애플리케이션 계층. OSI의 Session, Presentation, Application 계층에 해당.
3계층 - 트랜스포트 계층. OSI의 Transport 계층에 해당.
2계층 - 인터넷 계층. OSI의 Network 계층에 해당.
1계층 - 네트워크 액세스 계층. OSI의 Physical, Data Link 계층에 해당.

  특히 TCP/IP의 1계층인 네트워크 액세스 계층을 OSI와 혼돈하여 두 개의 계층으로 나눠보는 경우가 많은데 나눠보더라도 TCP/IP에선 원래 하나라는 걸 알고 보는 것이 좋겠습니다. 그리고 당연하지만 TCP/IP의 2, 3계층이 OSI의 3, 4계층과 일치한다고 해서 그게 정확히 일치하는 것이 아닙니다. 대략적으로 비슷할 뿐 세부사항은 다르지요.


참고 도서: CCENT / CCNA ICND1 Official Exam Certification Guide
2010/07/31 15:04 2010/07/31 15:04