키워드로 정리하는 네트워크 기본

undefcat·2021년 5월 7일
1

Network

목록 보기
1/1
post-thumbnail

국내에서 네트워크 책으로 유명한 책을 꼽아보자면 후니의 쉽게 쓴 시스코 네트워킹책인 것 같습니다.

오늘은 이 책의 내용 중 제 기준으로 기초로 알아야 할 내용들을 나름의 흐름대로 키워드로 정리해보고자 합니다. 초급 개발자의 시선이기 때문에 양해 부탁드리며, 디테일한 내용은 해당 책을 구매하셔서 보시는 것을 추천드립니다.

이 포스팅은 전체적인 흐름을 Top-Down 방식으로 정리하는 것이 목적이며, 일부 틀린 내용이 있을 수 있습니다(최대한 내용 검증을 하고자 노력은 하였습니다). 자세한 내용은 꼭 책을 구매하시거나 인터넷에서 검색하여 정확한 정보를 얻어주시기 바랍니다.

LAN

Local Area Network으로, 소규모 지역의 네트워크를 뜻합니다.

Ethernet

이더넷은 LAN의 de facto(사실상 표준)인 기술입니다. 대부분의 LAN은 Ethernet 기술로 구현되어 있습니다. 가정에서 사용하는 LAN카드들은 거의 모두 Ethernet 어댑터입니다. 즉, 이더넷 기술을 사용합니다.

MAC Address

Media Access Control Address 입니다. 이더넷 어댑터는 48bit로 이루어진 고유의 주소값을 가지고 있습니다. 앞의 24bit는 제조사 고유번호이며, 뒤의 24bit는 해당 제조사에서 부여한 고유한 ID값입니다. 이 48bit 값은 모든 이더넷 어댑터마다 고유합니다.

이 MAC Address는 LAN에서 단말기간 통신할 때, 단말기의 주소로 사용됩니다.

IP Address

Internet Protocol Address로, TCP/IP 프로토콜의 핵심 중 하나입니다. IP는 OSI 7계층을 기준으로는 네트워크 계층에 속해있으며, IP Address는 MAC Address와 마찬가지로 단말기의 고유 주소값을 나타냅니다.

IPv4(버전4)는 32bit의 값이며, IPv6(버전6)는 128bit의 값입니다. IPv4를 일반적으로 많이 사용하는데, IP Address는 TCP/IP 프로토콜이 이제는 전세계적으로 사용되는 만큼, 주소의 수가 부족하여 이를 해결하기 위해 IPv6가 탄생하였습니다.

IPv4는 주소값에 따라 A, B, C, D, E 클래스로 나뉩니다. 이 중 A, B, C를 주로 사용하며 D, E는 특별한 주소로 사용되므로 (멀티캐스트 및 연구용) A, B, C 클래스를 알고 있으면 됩니다.

  • 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

CSMA/CD

Carrier-Sense Multiple Access with Collision Detection 입니다. 보통 이더넷에서 사용되는 통신 방식 중 하나인데, 각 단말기에서 네트워크로 데이터를 보낼 때 한 번에 하나의 단말기만 보내야 하며, 두 대 이상의 단말기가 데이터를 보냈을 경우 서로 충돌이 발생하는데, 충돌을 감지하면 다시 발생하지 않도록 랜덤한 시간 뒤에 또 보내는 식으로 통신하는 방법입니다.

만약 계속 충돌이 발생한다면? 그러면 계속 또 다시 보내게 됩니다. 많은 충돌이 발생하면 결국 네트워크가 느려지거나 통신이 불가능해지는 경우가 발생할 수 있습니다.

허브

네트워크를 구성할 때, 단말기들이 연결되어야 합니다. 허브는 단말기들간 연결을 도와주는 네트워크 장비입니다. 즉, 각 이더넷 어댑터와 허브를 연결하면 허브에 연결되어 있는 이더넷 어댑터들끼리 네트워크 통신을 할 수 있게 됩니다.

Collision

하나의 허브에 많은 장비가 연결되어 있는 경우, 서로 통신할 때 많은 Collision이 발생합니다(CSMA/CD 방식). 이러면 통신이 힘들어지는데(한 번에 하나의 네트워크 요청만 지나갈 수 있으므로), 이를 해결할 방법이 필요합니다.

스위치/브릿지

허브로 연결되어 있는 경우, 같은 선로에 있기 때문에 Collision이 발생합니다. 이를 같은 Collision Domain에 있다고 표현합니다. 이를 해결하기 위해선 각자 다른 Collision Domain에 위치하도록 하면 되는데, 이를 스위치 혹은 브릿지가 해결해줍니다. 요즘은 일반적으로 스위치를 많이 사용한다고 합니다.

A, B, C, D 단말기가 연결된 허브에서는 A, B 단말기가 통신하고 있는데 C, D 단말기가 통신하고자 한다면 A, B의 통신이 끝날 때까지 기다려야 합니다(CSMA/CD의 Collision). 이 때, A, B와 C, D를 각각의 허브에 연결하고, 이 허브들을 스위치/브릿지와 연결하게 되면 각 허브가 Collision Domain이 됩니다.

하나의 허브에 15개의 단말기가 있을 때와, 5개의 단말기가 각 허브마다 연결되어 있고 이게 스위치와 연결되어 있는 경우, 이제 Collision Domain은 3개의 영역으로 나뉘게 되고 15개의 단말기가 하나의 허브에 연결되어 있을 때보다 충돌이 더 적게 일어나게 됩니다.

그러면 서로 다른 Collision Domain에 있는 단말기끼리 통신해야 하는 경우, 스위치가 이를 해당 허브와 연결된 포트로 연결을 해줘야 합니다. 따라서 스위치는 단말기들의 주소 정보(MAC Address)를 알고 있어야 합니다.

따라서 스위치는 아래와 같은 5가지의 일을 하게 됩니다.

  1. Learning

    • 출발지 주소의 MAC Address를 저장합니다(배웁니다).
  2. Flooding

    • 현재 포트로 들어온 프레임(네트워크 데이터)을 현재 포트를 제외한 다른 포트들로 뿌려줍니다.
  3. Forwarding

    • 통신하고자 하는 단말기가 다른 Collision Domain에 있는 경우, 해당 단말기가 존재하는 포트(허브와 연결된 곳)로 프레임을 뿌려줍니다.
  4. Filtering

    • 프레임을 다른 포트로 못 건너가게 막습니다.
    • 이를 통해 Collision Domain을 나눕니다.
  5. Aging

    • 저장된 MAC Address의 유효 시간이 지나면 폐기처분합니다.

기본적으로 네트워크 통신이 발생하는 경우, 같은 LAN에 있는 모든 곳에 프레임이 뿌려진다는 점을 기억해야 합니다. 이를 스위치/브릿지가 중간에서 다른 Collision Domain으로 가는 것을 막아주는 역할을 합니다.

Unicast

그럼 이제 단말기 입장에서 통신을 생각해봅시다.

A단말기에서 B단말기로 요청을 보내고 싶다면, B단말기의 목적지 주소로 요청을 보내야 합니다. 이렇게 A -> B로 요청을 보내는 방식을 유니캐스트 방식이라고 합니다.

LAN에서는 통신이 일어나면 모든 곳에 뿌려진다고 했습니다. 유니캐스트 역시 예외는 아닙니다. 하지만 이더넷 어댑터로 네트워크 프레임이 흘러 들어왔을 때, 만약 자신의 주소가 아니면 이를 폐기해버립니다. 따라서 컴퓨터에는 네트워크 인터럽트가 발생하지 않고, CPU에는 아무런 부하가 존재하지 않습니다.

ARP

TCP/IP에서는 IP Address를 목적지 주소로 이용합니다. 그런데 이더넷의 경우, MAC Address를 이용합니다. 즉, IP Address-> MAC Address의 매핑이 필요합니다. 그렇다면, IP 주소의 대상이 되는 MAC Address를 어떻게 알아내야 할까요? 이를 위한 프로토콜이 바로 ARP(Address Resolution Protocol)입니다. 이는 IP Address를 MAC Address로 매핑할 수 있도록 해줍니다. 바로 Broadcast를 통해서 말이죠.

Broadcast

브로드캐스트는 유니캐스트와 다르게 같은 네트워크에 있는 모든 이더넷 어댑터가 요청을 받아들입니다. 유니캐스트는 목적지 주소와 본인의 주소가 일치하지 않으면 폐기해버리지만, 브로드캐스트는 받아들입니다.

ARP는 MAC Address를 질의하는 프로토콜입니다. 간략히 아래와 같은 과정입니다.

A: 이 IP Address에 해당하시는분? (Broadcast)
C, D: 아, 나 아니네. (요청은 받아들였으나 따로 아무런 일도 하지 않음)
B: 접니다. 제 MAC Address는 이러합니다. (A로 Unicast)
A: 감사합니다. (IP Address를 MAC Address와 매핑 => ARP 캐시 테이블)

이렇게 브로드캐스트를 통해 IP Address로 MAC Address를 얻어냈으니, 다음부터 해당 IP Address로 네트워크 요청을 보내는 경우 ARP 캐시 테이블에서 MAC Address를 얻어내 유니캐스트로 요청을 하게 됩니다.

Multicast

특정 그룹으로 Broadcast 하는 방식을 뜻합니다. 이는 스위치/라우터가 지원을 해줘야 합니다.

Router

같은 LAN이 아닌 다른 LAN과는 어떻게 통신해야 할까요? 이를 위해 라우터가 필요합니다. 라우터는 다른 네트워크와 연결해주는 장비입니다.

Network ID / Host ID

IP주소는 네트워크 ID와 호스트 ID로 나뉩니다. 같은 네트워크에 있는 경우 Network ID가 같으며, 같은 Network ID에서 단말기들은 Host ID로 구분됩니다.

IPv4는 32bit라고 했습니다. 이 bit를 기준으로 A, B, C 클래스를 나눕니다.

A Class

A클래스는 비트가 0으로 시작하고, 첫번째 옥텟(8bit)이 네트워크 ID, 나머지 3개의 옥텟이 호스트 ID가 됩니다.

00000000 00000000 00000000 00000000
network- host----------------------

B Class

B클래스는 비트가 10으로 시작하고, 두 개의 옥텟이 네트워크 ID, 나머지 2개의 옥텟이 호스트 ID가 됩니다.

10000000 00000000 00000000 00000000
network---------- host-------------

C Class

C클래스는 비트가 110으로 시작하고, 세 개의 옥텟이 네트워크 ID, 나머지 1개의 옥텟이 호스트 ID가 됩니다.

11000000 00000000 00000000 00000000
network------------------- host----

IP주소는 고유해야 하기 때문에, 호스트 ID가 한 네트워크당 연결될 수 있는 최대의 단말기 수가 된다고 볼 수 있습니다. 이에 따라, A클래스가 가장 많은 호스트를 가질 수 있으며, C클래스가 가장 적은 호스트를 가질 수 있습니다.

Loopback

각 클래스별로 시작비트가 정해져있는데, 그 범위에서도 특수목적으로 사용되는 IP 대역들이 있습니다.

예를 들어, 가장 익숙한 IP중 하나인 127.0.0.1가 있습니다. 127.x.x.x 대역의 IP는 클래스상 A클래스에 속해있습니다. B클래스의 경우 앞의 bit가 10으로 시작하기 때문에 A클래스의 첫번째 옥텟이 가질 수 있는 가장 최댓값은 01111111 이고, 이는 127인데 127로 시작하는 IP는 루프백 IP로 일반적으로 단말기 자기 자신을 나타내는 목적으로 사용됩니다. 따라서 A클래스에 속하는 IP중 가장 큰 값은 126으로 시작하는 대역입니다.

그런데 왜 Loopback IP의 주소는 127.0.0.0이 아니라 127.0.0.1인 것일까요?

Network IP

네트워크 ID 부분을 나타내는 옥텟을 제외한 나머지가 Host ID라고했습니다. 이 때, Host ID 부분의 비트가 모두 0인 경우는 그 IP 주소 자체로 네트워크 IP주소를 나타내기 때문에, 일반적으로 해당 IP는 사용되지 않습니다. 즉, Loopback의 네트워크 IP는 127.0.0.0이고, 이를 제외해야 하므로 127.0.0.1이 사용되는 것입니다.

Broadcast IP

네트워크에서 브로드캐스트 방식으로 전송을 하는 경우, 네트워크에 속한 모든 단말기가 해당 데이터를 수신한다고 했습니다. 이 때, 이 데이터가 브로드캐스트인 것을 어떻게 알 수 있을까요? 브로드캐스트 IP는 호스트 ID부분의 비트가 모두 1인 경우로 정의되어 있습니다. 즉, A클래스 IP중 네트워크 IP가 3.0.0.0인 경우, 3.255.255.255가 브로드캐스트 IP입니다. 즉, 호스트 ID 부분의 비트가 모두 1인 IP 역시 단말기가 일반적으로 사용하지 않습니다. 브로드캐스트 전용 IP로 사용되기 때문입니다.

할당 가능한 IP의 수 계산

A클래스의 경우 첫번째 옥텟이 네트워크 ID이며, 나머지 3개의 옥텟이 호스트 ID입니다. 그러면, 네트워크 IP가 12.0.0.0인 A클래스에 할당될 수 있는 IP의 갯수는 3개의 옥텟에 할당될 수 있는 숫자인 2^(8*3) 일 것입니다. 그리고 모든 호스트 ID 비트가 0인 경우는 네트워크 IP이므로 1개를 제외하고, 모든 호스트 ID 비트가 1인 경우는 브로드캐스트 IP이므로 이를 또 1개 제외하면, 최종적으로 2^(8*3)-2가 될 것입니다.

즉, 호스트ID의 비트의 수를 2의 제곱한 수에서 네트워크 IP와 브로드캐스트 IP 2개를 제외하면 됩니다.

하나의 예를 더 생각해봅시다.

C클래스에서 네트워크 IP가 211.123.121.0 인 경우, 호스트는 2^8만큼 할당 가능하며 0과 255를 제외하면 2^8-2개를 할당할 수 있는 것입니다.

Private Network

이제는 TCP/IP가 전세계적으로 사용되긴 하지만, 외부망과 연결되지 않아도 되는 내부망에서도 역시 TCP/IP를 사용할 수 있습니다.

간단한 예로, 이제는 집에서 흔히 사용하는 무선공유기의 경우 공유기와 연결된 단말기들(컴퓨터/스마트폰 등)은 하나의 네트워크를 이루고 있다고 볼 수 있습니다. 이것이 Private Network입니다.

Private Network 전용으로 사용되는 IP 대역이 있습니다.

A, B, C 클래스로 마찬가지로 나뉘며 범위는 위의 이미지를 참고하시기 바랍니다.

여기서 ipTIME 공유기를 사용하시는 분들이라면 익숙한 IP가 보이실텐데, 바로 192.168.0.0 대역입니다.

보통 ipTIME 공유기의 설정페이지는 브라우저에서 192.168.0.1로 들어갈 수 있습니다. 이제는 대략 이해하실 수 있을겁니다.

192.168.x.x 대역은 Private IP 대역중 하나이며, 192.168.0.0은 네트워크 IP이므로 제외하여 192.168.0.1이 공유기의 IP가 되는 것입니다. 일반적으로 많이 사용하는 ipTIME 공유기의 기본 ip값이 192.168.0.1로 설정되어 있습니다.

Gateway

보통 Host ID의 맨 마지막비트만 1인 IP는 게이트웨이 IP로 많이 사용됩니다. 일반적으로 게이트웨이가 외부망과 연결되기 위한 첫관문이 되는 장비입니다. 가정에서는 공유기가, 보통은 라우터가 일반적으로 게이트웨이가 될 것입니다.

DHCP

Dynamic Host Configuration Protocol입니다. 컴퓨터의 경우, TCP/IP로 통신을 하기 위해서는 아래 4개의 정보가 필요합니다.

  • 컴퓨터의 IP주소
  • 서브넷마스크
  • 게이트웨이 IP주소
  • DNS IP 주소

이 때, 자동으로 IP 주소 받기 기능이 바로 DHCP를 사용하는 기능입니다.

IP주소는 모든 단말기가 유일해야 합니다. 이는 사설 네트워크에서도 역시 마찬가지입니다. 장비의 갯수가 적으면 각 정보를 수동으로 입력해 줄 수도 있지만, 이는 매우 번거로운 작업입니다. 이를 위해 DHCP를 사용합니다.

가정에서는 보통 공유기가 DHCP 서버 역할까지 합니다. 공유기와 연결하면, 컴퓨터는 공유기에서 건네주는 정보를 바탕으로 위의 설정들을 하는 것입니다. 기본 게이트웨이는 공유기의 IP주소가 되며, IP 주소도 공유기가 할당해주고 서브넷 마스크 역시 공유기에서 할당해줍니다.

Subnet

A클래스의 호스트 수(약 1,700만)를 생각해봅시다. A클래스의 네트워크 안에서 브로드캐스트가 발생한다면, 얼마나 끔찍할까요? 이렇게 하나의 네트워크 안에 수많은 장비가 연결되어 있다면 문제가 발생하게 됩니다. 한 네트워크는 하나의 브로드캐스트 도메인이라고 볼 수 있습니다. 이 브로드캐스트 도메인을 나누는 것이 서브넷입니다. 즉, 네트워크를 또 다시 서브네트워크로 나누는 것입니다.

서브넷을 나누는 경우, 하나의 독립된 네트워크가 되므로 다른 서브넷과 통신하기 위해서는 라우터가 필요하게 됩니다.

Subnet Mask

예를 들어 B클래스의 IP인 155.122.0.0 을 할당받았다고 생각해봅시다. 그러면 이제 155.122.0.0의 네트워크를 구성할 수 있게 됩니다.

하지만, B클래스에도 연결될 수 있는 호스트의 수는 약 65,000개입니다. 역시 너무 많은 장비가 하나의 브로드캐스트 도메인에 놓여있습니다. 이를 서브 네트워크로 나누는게 좋겠습니다.

IP주소는 네트워크ID와 호스트ID로 구분된다고 했습니다. 네트워크ID가 하나의 네트워크를 구분하는 ID라고 했으니, 서브넷을 나눈다고 하면 각 서브넷마다 각기 다른 네트워크 ID가 있어야 할 것입니다.

이를 서브넷 마스크로 표현할 수 있습니다.

서브넷 마스크는 32bit에서 네트워크 ID부분을 1bit로, 호스트 ID부분을 0bit로 표현합니다. 서브넷이 나뉘어져있지 않다면 기본 네트워크ID만큼 1bit로 채워져 있을테니, B클래스의 경우 255.255.0.0이 기본 서브넷 마스크가 됩니다. 이는 11111111 11111111 00000000 00000000 이렇게 비트로 표현될 것입니다.

그러면, 서브넷을 나눠봅시다. 서브넷 마스크는 앞에서부터 1bit로 채워야 하니, 서브넷 마스크는 11111111 11111111 10000000 00000000 이렇게 될 것입니다. 즉, 255.255.128.0이 됩니다.

그리고, 목적지 IP와 이 서브넷 마스크를 AND 비트연산을 했을 때, 나오는 값이 바로 네트워크 ID가 됩니다.

현재 우리는 155.122.0.0을 할당받았다고 했습니다. 이 때, 155.122.211.4 IP주소와 155.122.125.4 IP주소를 생각해봅시다.

우선, 155.122.211.4를 서브넷 마스크와 AND연산 하겠습니다.

10011011 01111010 11010011 00000100 # 155.122.211.4
11111111 11111111 10000000 00000000 # 255.255.128.0
-----------------------------------
10011011 01111010 10000000 00000000 # 155.122.128.0

네트워크 IP는 155.122.128.0입니다.

이제, 155.122.125.4를 서브넷 마스크와 AND연산 하겠습니다.

10011011 01111010 01111101 00000100 # 155.122.125.4
11111111 11111111 10000000 00000000 # 255.255.128.0
-----------------------------------
10011011 01111010 00000000 00000000 # 155.122.0.0

네트워크 IP는 155.122.0.0입니다.

서브넷 마스크는 비트를 앞에서 1씩 켜기 때문에, n개씩 켜질 때마다 2^n의 서브넷이 생기게 됩니다.

그리고 서브넷도 똑같이 네트워크입니다. 따라서,

  • 호스트 ID가 모두 0인 IP는 네트워크 IP로 사용됩니다.
  • 호스트 ID가 모두 255인 IP는 브로드캐스트 IP로 사용됩니다.

즉, 서브넷을 나눌 때마다 각 서브넷마다 네트워크 IP와 브로드캐스트 IP를 제외해야 하므로 연결가능한 호스트의 수도 2*n개씩 줄어들 것입니다. 브로드캐스트 도메인을 나누기 위한 비용이 됩니다.

IP(with subnet mask) 표기법

서브넷이 나누어져 있는 네트워크에서는, IP주소 뿐만 아니라 서브넷의 정보도 같이 표현할 필요가 있습니다.

위의 예제에서 서브넷 마스크를 255.255.128.0 이라고 했으니, IP주소와 같이

155.122.211.4 255.255.128.0

이렇게 IP주소와 서브넷 마스크를 나열하여 표현하는 방식과, 서브넷 마스크가 앞에서부터 1bit씩 켜진다는 규칙을 이용하여 켜져있는 bit의 수를 숫자로 표현하는 방식인

155.122.211.4/17

이렇게 표현하는 방법이 있습니다. /를 기준으로 IP주소와 서브넷마스크 비트의 수를 표현하는 것입니다.

NAT

IPv4는 32bit입니다. 단순 계산으로도 2^32값은 약 43억인데, 이 값은 TCP/IP가 전세계에서 사용되는 만큼 한계가 있는 숫자입니다. 지금은 IPv6가 있긴 하지만, 여전히 IPv4로 많은 것들이 이루어지고 있습니다. 이는 Private IP Address와 Network Address Translation(NAT) 덕분입니다.

NAT는 Private IP 주소를 Public IP 주소로 매핑합니다. 즉, 사설 네트워크에 할당된 사설 IP주소를 사설이 아닌 외부로 전송할 때, Public IP주소(+포트번호)로 바꿔줍니다. 이 때, 이를 바꿔준 장비는 어떤 Prviate IP 주소가 어떤 Public IP주소(+포트번호)로 바뀌었는지 정보를 기억하고 있다가, 응답되어 돌아온 프레임을 다시 역변환(Public -> Private)하여 해당 단말기가 처리할 수 있도록 해줍니다.

이런 과정을 통해서, 하나의 공인 IP만을 이용하여 수백, 수천대의 단말기가 사용할 수 있도록 해줍니다.

마치며

네트워크의 기본을 정리해보았습니다. 후니의 CISCO 네트워킹 책은 TCP/IP 프로토콜에 대해서는 자세히 다루고 있지 않습니다. 다음에는 TCP/IP에 대해서도 한 번 정리해보도록 하겠습니다.

==================

이미지 출처

profile
undefined cat

0개의 댓글