2019년 2월 27일 수요일

6. 네트워크 주소, 브로드캐스트 주소

아이피 주소를 이해하기 위해서는 네트워크 주소와 브로드캐스트 주소를 이해할 필요가 있다.
 
먼저 네트워크 주소부터 살펴보자.
 
192.168.10.2/24 인 아이피 주소가 있다고 생각해 보자.
 
이 아이피 주소 32bit중에서 네트워크 주소를 표시한 bit는 맨 왼쪽부터 24bit이다.


하나의 구안에 있는 집들의 구 주소를 변경할 수 없는 것과 마찬가지로, 이 네트워크 주소는 해당 네트워크에 속한 모든 호스트에 적용이 된다. 따라서 남아 있는 변경 가능한 8비트를 가지고 비트 패턴을 만들어 보자.
 
00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000110
...
11111000
11111001
11111010
11111011
11111100
11111101
11111110
11111111
 
8비트로 우리가 만들 수 있는 비트패턴의 수는 모두 2^8=256가지이다. 십진수로 바꾸면 0에서 255까지이다. 256가지 중에서 호스트에 할당할 수 없는 주소가 두 개가 있다. 짐작이 되는가?


그렇다. 맨 처음과 맨 마지막 주소이다.
 
맨 처음 주소는 이진수로 00000000 이고 십진수로는 0이다. 맨 마지막 주소는 이진수로 11111111이고 십진수로는 255이다.
 
맨 처음 주소는 네트워크 주소라고 불린다

192.168.10.2/24의 네트워크 주소는 무엇인가? 라는 질문에 대한 답은 


192.168.10.0/24 이다.

192.168.10/24 가 아니다. 

호스트 비트를 가지고 만들 수 있는 첫 번째 패턴이 네트워크 주소가 되는 것이다.


그렇다면 1.2.3.4/8 의 네트워크 주소는 무엇인가?



답은 1.0.0.0/8이다
 

그렇다면 맨 마지막 주소는 무엇이라고 불릴까? 바로 브로드캐스트 주소이다

브로드캐스트 주소는 해당 네트워크에 속한 모든 호스트들에게 메시지를 보낼 때 사용할 수 있는 주소이다.
 
예를 들어 아래 그림과 같은 네트워크에서 A 컴퓨터가 네트워크에 있는 모든 컴퓨터에게 뭔가 물어보고 싶은 것이 있을 때 어떻게 할까?    




정답은 목적지를 192.168.10.255로 해서 메시지를 전송하면 스위치는 해당 메시지를 연결된 모든 호스트들에게 전송하게 된다.
 
따라서 호스트 비트를 가지고 만들 수 있는 비트 패턴 중에 마지막 것은 호스트에게 아이피로 부여할 수 없다.   

이렇게 네트워크 주소와 브로드캐스트 주소는 호스트에게 부여할 수 없는 주소가 된다. 

5. 네트워크 주소와 호스트의 개수

네트워크 주소는 구의 이름과 같은 개념이다

하나의 시에 여러 고유한 이름을 갖는 여러 구가 존재하듯이 인터넷을 시라고 생각했을 때 인터넷에 속한 각 네트워크는 고유한 이름, 곧 네트워크 주소를 갖는다.
 
그리고 하나의 구에 여러 집이 있듯이, 하나의 네트워크에는 여러개의 IP주소가 호스트에 부여된다.
 
예를 들어, 192.168.10 을 네트워크 주소로 사용하는 호스트들은 

IP주소 192.168.10.1 ~ 192.168.10.254 까지 254대가 존재할 수 있다. 

네트워크 장비들은 어떤 호스트에 할당된 IP주소가 주어졌을 때 거기서 네트워크 주소가 무엇인지 알아낼 수 있어야 한다. 

그때 사용하는 것이 네트워크 마스크(Network Mask)이다. 
네트워크 마스크는 어떤 IP주소가 주어졌을 때, IP주소에서 네트워크 주소를 찾아내기 위해 사용된다

예를 들어 IP주소 128.10.0.3/16의 네트워크 마스크는 255.255.0.0 이 된다.

네트워크 마스크 255.255.0.0을 2진수로 표시하면

11111111.11111111.00000000.00000000

이다. 왼쪽에서 부터 16개의 1이 나온다.

192.168.10.10/24의 경우의 네트워크 마스크는 255.255.255.0이 된다.

11111111.11111111.11111111.00000000

역시 2진수로 표시했을 때 왼쪽에서 부터 1이 24개가 나오게 된다.

어떤 호스트의 IP주소와 그 IP주소의 네트워크 마스크를 알고 있으면 아래와 같은 식을 통해 그 호스트가 속해있는 네트워크 주소를 알아낼 수 있다.  


여기서 AND연산이 나오는데, AND연산은 이진수에 사용되는 것으로, 다음 표가 보여주는 바와 같이 AND연산에 사용되는 피연산자가 모두 1일 때 결과가 1이 되고 나머지는 0이 되는 것이다.
 
A
B
A AND B
0
0
0
0
1
0
1
0
0
1
1
1
 
예를 들어보자. 이진수 11001010AND연산하면 결과는 1000이 된다.  

이해되는가? 맨 오른쪽 위에는 0이 있고 그 바로 아래에도 0이 있을 때는 결과는 0이다. 마찬가지로 01이 있을 때와 10이 있을 때도 0이다. 그러나 맨 왼쪽에 있는 것처럼 둘 다 모두 1이 되면 결과도 1이 된다.


그럼 아래 결과는 무엇일까?

AND연산자는 이진수에 사용된다고 하면서 갑자기 십진수와 십진수를 AND하라니 이게 가능한가?라고 생각할 수 있다.
 
답은 가능하다이다. 어떻게 가능할까? 십진수를 이진수로 바꾼 후에 계산하면 된다




이렇게 말이다. 그럼 위의 계산식의 답은 무엇인가?



 
답은 1000000.00001010.00000000.00000000이다

이것을 다시 십진수로 바꾸면 128.10.0.0이 된다.
 
그러니까 아이피 주소 128.10.0.3/16의 네트워크 주소는 128.10.0.0이 되는 것이다.

AND연산의 특징은 아래와 같이 연산자중 하나가 모두 1이면 다른 연산자가 그대로 결과가 된다는 것과, 연산자중 하나가 모두 0이면 다른 연산자의 값과 관계없이 모두 0이 된다.




이런 특성을 이용하여 네트워크장비들은 네트워크마스크를 이용하여 IP주소에서 네트워크 주소를 추출해 낼 수 있게된다.

 
그럼 문제 192.168.10.4/24의 네트워크 주소는 무엇인가?



 
정답은 192.168.10.0이 된다.
 

4. 네트워크 주소, 호스트 주소

아이피 주소에 사용되는 4byte 32bit를 네트워크와 호스트 주소로 어떻게 나눌 수 있을까?
 
울란바토르시의 구의 예처럼, 가장 간단히 생각할 수 있는 방법은 첫 번째 byte를 네트워크 주소로 나머지 세 byte를 해당 네트워크에 속한 호스트에게 부여하는 방법이 있을 수 있다.



이 경우 우리가 생성할 수 있는 네트워크의 수는 모두 몇 개가 될까?
 




정답은 256개이다. (0에서부터 255까지)
 


그렇다면 각 네트워크에 들어갈 호스트의 개수는 모두 몇 개가 될 수 있을까?
 




정답은 256*256*256 2개이다. 2를 뺐을까? 이 이유는 차차 알게 될 것이다. 여기서 256은 2^8이기 때문에 256*256*256은 2^24이 된다.
 
네트워크의 수는 256개이지만, 하나의 네트워크에 들어가는 호스트의 수는 2^24 - 2 = 16,777,216 - 2 = 16,777,214개가 된다

16백만 개가 넘는 컴퓨터가 하나의 네트워크안에 존재하게 된다. 정말 큰 네트워크이다. 앞서 설명한 구를 예로 들면, 하나의 구안에 16백만 개의 집주소가 있는 것과 마찬가지이다.
 
이것이 너무 크다고 생각되면, 네트워크 주소를 2byte, 호스트 주소를 2byte로 하는 것을 어떨까?
 


이렇게 주소를 구성하면 네트워크의 숫자는 2^16 = 65,536개가 되고, 하나의 네트워크안에 들어가는 컴퓨터의 숫자 또한 2^16 - 65,536개가 된다. 65천여개로 여전히 적지 않은 수이다.
 
이제 마지막으로 네트워크 주소를 3byte, 호스트 주소를 1byte로 해보자



이렇게 구성하면 네트워크의 수는 2^24 = 16,777,216 개가 되고, 각 네트워크에 들어가는 컴퓨터의 숫자는 2^8 - 2 = 256-2 = 254 개가 된다.
 
하나의 네트워크안에 254개의 컴퓨터가 들어간다. 왠지 괜찮아 보인다.
 
처음에 아이피 주소를 만든 엔지니어들은 네트워크 주소가 가지는 byte 수에 따라 클래스로 구분하였다. 이는 아이피 주소를 관리하기 편리하도록 하기 위함이었다.
 
클래스
네트워크 주소에 사용되는 byte
호스트 주소에 사용되는 byte
하나의 네트워크안에 들어갈 수 있는 호스트 수
A
1
3
2^24 - 2
B
2
2
2^16 - 2
C
3
1
2^8 - 2

어떤 클래스를 사용하는 것이 적당할까? 그것은 네트워크의 크기에 따라 달라질 것이다.
 
클래스를 만든 사람들은 아이피주소 4byte의 첫 번째 byte의 값에 따라 클래스를 구분했다.
 
첫 번째 byte0부터 255까지 표현할 수 있다.
 
그중에서 0부터 127까지를 A 클래스로 하고, 128부터 191까지를 B클래스, 192부터 223까지 C클래스 하기로 했고 224부터 255까지는 일반 아이피로는 사용하지 않기로 했다


위의 그림처럼 전체 42억개의 아이피 중에 반은 A클래스에 속한다. A클래스에서 사용하고 남은 21억개의 아이피 주소 중에 반인 10.5억개가 B 클래스, 그리고 5.25억개가 C 클래스에 속하게 된다.
 
그럼 여기서 문제
 
아이피 192.168.0.2의 클래스는 무엇인가?



 
정답은 C 클래스. 왜냐하면 첫 번째 byte의 값이 192223사이에 있기 때문에.
 
그렇다면 아이피 192.168.0.2의 네트워크 bit는 몇 bit인가?



정답은 24비트. (C 클래스 이므로)



 

3. 2진수

앞의 구의 예에서는 10진수를 사용하여 설명하였다. 그러나 컴퓨터는 10진수가 아닌 2진수를 사용한다. 10진수는 0에서 9가지 10개의 숫자를 사용하지만, 2진수는 01만을 사용한다.
 
예를 들어, 10진수를 사용하면 한자리에 0에서 9까지 10개의 숫자를 쓸 수 있지만, 2진수를 사용하면 01 오직 두 개의 숫자만을 쓸 수 있다.



만약 두 자리를 사용하면 10진수는 00부터 99까지 100개의 숫자조합을 만들 수 있다. 반면 2진수는 00, 01, 10, 11 이렇게 네 가지의 숫자조합(패턴)을 만들어 낼 수 있다



만약 3자리를 사용한다면 십진수와 이진수는 각각 몇 개의 패턴(숫자조합)을 만들 수 있을까?
 
정답은 십진수는 1000개 (0~999) 이진수는 8개이다.
 
여기서 재미있는 원리를 찾을 수 있다. 자릿수의 개수(x라고 하자)에 따라 만들 수 있는 숫자패턴의 수가 결정되는데, 10진수가 만들 수 있는 패턴의 수는 10^x (10의 x승)개가 된다는 것이다. 즉 자릿수의 개수가 3이면 모두 1000개 (10^3)의 숫자조합을 만들 수 있다. 반면 이진수의 경우에는 2^x개의 패턴을 만들 수 있다.
 
그렇다면 8자리를 이용하면 2진수로 만들 수 있는 패턴의 개수는 몇 개인가?
 
정답은 256개이다. (2^8=256)
 
3자리를 이용하면 2진수로 만들 수 있는 패턴의 수는 모두 8개라고 했다. 8개를 한번 써보라.

정답은





000
001
010
011
100
101
110
111
이다.

2진수 숫자패턴을 쓸 때는 규칙에 맞춰서 써야한다. 가장 오른쪽에 있는 자리는 매번 0에서 1, 1에서 0으로 바뀌어야하고, 오른쪽에서 두번째 자리는 0이 두 번 1이 두 번씩 번갈아 가면서 나와야한다. 그리고 오른쪽 세번째 자리는 0이 네 번 1이 네 번씩 번갈아 가면서 나와야 한다.
 
그럼 4자리가 있을 때 만들 수 있는 패턴의 수는 모두 16가지이다. 16가지를 한번 써보라.
 
정답은





0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
이다

이렇게 사용할 수 있는 자릿수가 하나씩 늘어날 때 마다 만들 수 있는 2진수 패턴의 수는 두배씩 증가한다.
 
우리가 2진수 패턴(비트패턴이라고도 한다)을 숫자로 사용하고자 하면, 각 자리가 가지는 값어치는 모두 다르다. 즉 맨 오른쪽에 있는 1과 맨 왼쪽에 있는 1은 같은 1이 아니다.
 
십진수의 경우에는 왼쪽으로 한자리 옮기게 되면 그 가치가 10배가 높아진다. 아래 그림에서 1을 왼쪽으로 옮기면 열배인 10이 된다. 한 번 더 왼쪽으로 옮기면 다시 그 열배인 100이 된다. 이진수의 경우에는 왼쪽으로 한자리 옮기면 그 가치가 2배 높아진다. 2진수 '10'은 이진수 '01'의 두배의 가치를 가지고, 이진수 '100'은 다시 이진수 '010'보다 두 배의 가치를 가지게 된다.


 그러므로 각 자리는 고유한 가치가 있다.


십진수의 가치 값은 위의 그림과 같다. 십진수 12031*1000 + 2*100 + 0*10 + 3*1의 가치를 가진다.
 
그렇다면 2진수의 경우 각 자리가 갖는 가치 값은 어떻게 될까? 각자의 노트에 써보기 바란다. 


정답은







그러므로 이진수 1111을 십진수로 바꾸면 

1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 1*8 + 1*4 + 1*2 + 1*1 


이 되어 15가 된다.
 
그렇다면 1100은 십진수로 어떻게 될까?
 
 



정답은 12이다. (1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = 1*8 + 1*4 + 0*2 + 0*1 = 12) 



10진수를 2진수로 바꿀 수 있을까?
 
바꾸는 방법은 여러 가지가 있다. 학교에서 배우는 것처럼 10진수를 2로 나눈 후에 각 나머지 값을 거꾸로 읽으면 2진수가 된다.


위와 같은 방법으로 십진수 22를 이진수로 바꾸면 10110이 된다.
 
또는 아래와 같은 방법도 있다.
 
2216(=2^4)보다 크고 32(=2^5)보다 작다. 그러므로 2^4자리에 1을 쓴다. 10000
16을 표시했으므로 22에서 16을 빼면 6이 남는다.
64(=2^6)보다 크고 8(=2^3)보다 작다. 그러므로 2^3자리에 1을 쓴다. 10100
4를 표시했으므로 6에서 4를 빼면 2가 남는다.
22(=2^1)자리에 1을 쓰면 된다. 10110
2를 표시했으므로 2에서 2를 빼면 0이 된다. 더 이상 쓸 것이 없다.
따라서 22의 이진수 표현은 10110이 된다.
 
어떤 방법이든 관계없다. 자신이 편한 방법으로 바꾸면 된다.
 
십진수 130을 이진수로 바꿔보라.
 
 



정답은 10000010이다.
 
 
자 그렇다면 이제 본격적으로 컴퓨터 연산의 기본단위인 바이트(byte) 단위로 계산을 해보자. 1byte8비트(bit)이다. 여기서 bit라는 것은 이진수를 쓸 수 있는 한자리를 의미한다. 8bit이면 모두 8자리 이진수를 쓸 수 있다는 의미이다.

   
이렇게 8자리가 있다고 하면 우리가 만들 수 있는 이진수 패턴(비트패턴)은 모두 몇 개인가?




 
정답은 256개이다. 조금 전에 설명했던 것이다.
 


이러한 패턴을 십진수 숫자와 매치하면
 
00000000 = 0
00000001 = 1
00000010 = 2
00000011 = 3
...
11111100 = 252
11111101 = 253
11111110 = 254
11111111 = 255
 
과 같다.
 
이처럼 8bit 1byte가 있으면 우리가 표시할 수 있는 10진수 숫자의 범위는 0에서부터 255까지 모두 256개가 된다.
 
아이피주소는 4byte로 이뤄져 있다. 4byte를 표시할 때는 각 byte사이에 . 을 찍어 구분한다.
 
1byte.1byte.1byte.1byte
 
그리고 각 byte를 이용해 십진수 0~255까지 표시할 수 있다.
 
0~255.0~255.0~255.0~255
 
따라서 4byte 주소가 있을 때, byte별로 0~255까지 쓸 수 있게 되어 모두 256*256*256*256개의 서로 다른 숫자를 만들어 낼 수 있다.
 
256*256*256*256 = 2^8 * 2^8 * 2^8 * 2^8 = 2^32 = 4,294,967,296

즉 4byte 아이피 주소로 활용하면 42억개가 넘는 주소를 만들 수 있게 된다.


6. 네트워크 주소, 브로드캐스트 주소

아이피 주소를 이해하기 위해서는 네트워크 주소와 브로드캐스트 주소를 이해할 필요가 있다 .   먼저 네트워크 주소부터 살펴보자 .   192.168.10.2/24 인 아이피 주소가 있다고 생각해 보자 .   이 아이피...