인터넷에 연결된 각 장치를 구별하기 위해 TCP/IP 프로토콜 모음의 IP계층에서 사용하는 식별자를 인터넷 주소 또는 IP주소라고 한다.
IPv4주소는 32비트 주소로서 인터넷에 있는 호스트나 라우터연결을 전세계적으로 유일하게 나타낸다.
[IP 주소는 전세계적으로 유일하다.]
인터넷상에서 오직 한개의 연결만 지정한다는 것을 의미한다. 인터넷상에서는 두개의 장치가 절대로 같은 주소를 가질수 없다.
[주소 공간]
IPv4 주소 공간은 2^32 또는 4,294,967,296 개이다. (=약 40억개 이상)
[표기법]
1) 2진 표기법 (기수 2)
2) 점 10진 표기법 (기수 256)
3) 16진 표기법 (기수 16)
이중 가장 많이 사용되는 방법은 기수(base) 256 표기법이다.
1) 2진표기법
IPv4 주소는 32비트로 나타낸다. 주소를 보다 읽기 쉽도록 각 옥텟(8비트) 사이에 하나이상의 공백을 둔다.
-> 01110101 10010101 00011101 11101010
각 옥텟은 바이트(byte)=8bit=1byte 라고도 한다.
그래서 32비트 주소를 == 4옥텟 주소 == 4바이트 주소 라고 부른다.
2) 점 10진 표기법 :기수 256
IPvr4 주소를 보다 간결하고 읽기 쉽게 하려고 IPv4 주소를 보통 바이트를 구분하는 소수점을 이용하여 10진 형식으로 표기한다. 이 형식은 점 10진 표기법이라고 불린다.
점 10진 표기법에서 표현되는 각숫자는 0과 256 사이의 값을 가진다.
-> 128.11.3.31
16진수 표기법: 기수 16
IPv4 주소를 가끔 16진 표기법으로 표현할 수 가 있다. 각 16진수 숫자는 4비트에 해당한다.
이것은 32비트 주소는 8개의 16진 숫자로 구성된다는 것을 의미한다.
16진 표기법은 주로 네트워크 프로그래밍에서 사용되고 있다.
[주소의 범위]
경우에 따라 한개의 주소 대신에 주소의 범위를 다루는 것이 필요할 때가 있다. 처음 주소와 마지막 주소를 알면, 이 범위 내 주소이 개수를 찾는 것이 필요하다. 또는 처음 주소와 범위 내 주소의 수를 알면 마지막 주소를 찾을 수 있다.
이 경우 해당하는 기수 (2, 256 또는 16)에서 뺄셈이나 덧셈 연산을 수행한다.
[연산]
간혹 2진법이나 점10진법을 사용하여 32비트 수에 대해 연산을 수행하는 경우가 있다.
이러한 수는 IPv4 주소나 (이후에 설명될 마스크와 같이) IPv4 주소와 연관된 수를 나타낸다.
이 절에서는 NOT, AND, OR 연산을 소개한다.
비트 단위 NOT 연산
비트 단위의 NOT 연산은 일항 연산으로 한개의 입력을 받는다. 수에 NOT 연산을 적용하면 그 수에 대한 보수를 계산하는 것이다. 0은 1로 변환되고 1은 0으로 변환된다.
32비트 수에 NOT 연산을 직접 사용할 수 있지만, 수가 4바이트 점 10진법으로 표기되어 있다면 더 빠른 방법이 있다.
이는 각 바이트를 255에서 빼는 것이다.
비트 단위 AND 연산
-비트 단위 AND 연산은 이항연산으로 두개의 입력을 취한다.
AND 연산은 두개의 입력에서 해당하는 두비트를 서로 비교하여 둘중에서 작은 비트 값을 취한다. 두 비트의 값이 같은 경우 둘 중 하나의 값을 취한다.
1) 숫자들이 점 10진법으로 표기된 경우 두 가지 빠른 방법이 있다.
- 수중에서 적어도 하나가 0또는 255 이면 AND 연산은 작은 비트 값을 취한다.
만약 같은 경우 둘중의 하나를 취한다. (121 , 255 라면 121을 취한다.)
2) 두 바이트가 0도 아니고 255도 아니면 각 바이트를 (각 항이 2의 거듭제곱인)8항의 합으로 쓸수가 있다.
각 쌍중에서 작은 항을 취하고 결과를 구하기 위하여 모두를 더한다.
비트 단위 OR 연산
비트 단위 or 연산은 이항 연산으로 두개의 입력을 취한다.
OR 연산은 두수에 해당하는 비트들을 비교하여 둘중에서 큰 값을 취한다. 같은 경우에는 둘중의 하나를 취한다.
점10진 표기법으로 표기된 경우 두개의 빠른 방법을 사용할 수 있다.
1) 수 중의 적어도 하나가 0 또는 255라면 or 연산은 큰 바이트 값을 취한다.
2) 두 바이트가 0도 아니고 255도 아니라면 각 바이트를 8항의 합으로 쓸수가 있다. 각 쌍중에서 큰항을 취하고 or 연산의 결과를 구하기 위하여 모두를 더한다.
클래스 기반 주소지정
-처음부터 IP주소는 클래스(class)개념을 사용하였다. 이러한 구조를 클래스 기반 주소 지정(classful addressing)이라고 부른다.
1990년대 중반에 새로운 구조가 등장하였다.이를 클래스 없는 주소지정(classless addressing)이라고 하며, 원래의 구조를 대체할 것으로 소개 되었다.
[클래스]
클래스 기반 주소지정에서 IP주소 공간은 다섯개의 클래스(a,b,c,d,e)로 나누어 진다.
각 클래스는 전체 주소 공간의 일부분을 차지한다. 주소공간에 대한 각 클래스의 점유율을 보여주고 있다.
[클래스 찾기]
주소가 2진 표기법, 또는 10진 표기법으로 주어졌을 때, 주소의 클래스를 알 수 있다.
만약 주소가 2진 표기법으로 주어졌다면, 맨 앞의 몇개 비트를 보고 주소의 클래스를 즉시 알 수 있으며,
주소가 점 10진법으로 표기된 경우 주소의 클래스를 결정하기 위해서 첫 번째 바이트를 살펴보면 된다.
0..... => 클래스 A
10...=> 클래스 B
110 => 클래스 C
1110 => 클래스 D
1111 => 클래스 E
<2진 표현>
0-127 => 클래스 A
128-191 => 클래스 B
192-223 => 클래스 C
224-239 => 클래스 D
240-255 => 클래스 E
<점 10진 표현>
A , E 클래스에는 특수 주소가 존재한다. 특수 주소는 클래스 분류에서 예외 주소이다.
컴퓨터는 종종 IPv4 주소를 2진법 표기를 사용하여 저장한다. 이 경우 연속적인 확인 절차에 기반한 알고리즘을 사용하는것이 편리하다.
[Netid 와 Hostid]
클래스 기반 주소지정에서 클래스 A,B,C의 IP주소는 네트워크를 구분하는 netid와 호스트를 구분하는 hostid로 나누어진다. 각 부분은 주소의 클래스에 따라 길이가 서로 다르다.
클래스 A는 1바이트의 netid와 3바이트의 hostid를 갖는다.
클래스 B는 2바이트의 netid와 2바이트의 hostid
클래스 C는 3바이트의 netid와 1바이트의 hostid로 나타낸다.
[클래스와 블록]
클래스 기반 주소지정에서 발생하는 한 가지 문제점은 각 클래스가 정해진 수의 블록[Block]으로 나뉘고 각 블록의 크기는 고정되어 있다는 것이다.
수백만의 클래스 A주소는 이미 소진되었다.
많은 클래스 B 주소가 소진되었다.
C 클래스 블록이 충분할 만큼 작은 기관은 많지 않다.
클래스 D 주소는 한 블록만을 가지며 멀티캐스팅을 위해 사용된다.
클래스 E 주소는 한 블록만을 가지며 향후 사용을 위해 예약되어 있다.
[2계층 주소지정]
IPv4주소 지정의 목적은 인터넷 패킷을 위한 목적지를 지정하는 것이다.
클래스 기반 주소지정이 처음 설계되었을때 전체 인터넷은 많은 네트워크로 나누어지고 각 네트워크에는 많은 호스트가 연결되는것으로 가정하였다.
즉, 인터넷은 네트워크들의 네트워크로 간주되었다.
- 클래스 기반 주소지정에서 조직에 할당되는 주소 범위는 A,B,C 클래스 단위의 주소 블록이다.
첫번째 주소는 네트워크 주소로서 호스트에 할당되지 않는다. 이주소는 네트워크를 지정하는데 사용된다.
마지막 주소는 특별한 목적을 위해 사용된다.
네트워크 주소는 네트워크의 식별자이다.
[네트워크 마스크]
네트워크 주소를 추출하기 위하여 인터넷 내의 라우터는 패킷의 목적지 주소에서 네트워크 주소를 추출하기 위하여 보통 알고리즘을 사용한다. 이를 위하여 네트워크 마스크를 사용한다.
클래스 기반 주소지정에서 네트워크 마스크 또는 디폴트 마스크는 n개의 왼쪽 비트는 1이고 (32-n)개의 오른쪽 비트는 0인 32비트 수이다.
클래스 기반 주소지정에서 n 값은 클래스에 따라 다르므로 3개(클래스 A,B,C)의 디폴트 마스크가 있다.
목적지 주소 가 디폴트마스크(기본마스크) 와 AND 연산을 하면 결과가 네트워크 주소가 된다.
[3계층 주소지정 : 서브넷팅]
IP주소지정은 2계층 주소지정으로 설계되었다. 인터넷 내의 호스트에 도달하기 위하여 먼저 네트워크에 도달해야하고, 그다음 호스트에 도달해야하 한다.
다음의 두가지 이유로 인해 두계층 보다 많은 계층이 필요함을 알게 되었다.
1) 클래스 A 나 B 블록을 받은 조직은 보안과 관리를 잘 할 수 있도록 네트워크 몇개의 서브네트워크로 나눌 필요가 있었다.
2) 클래스 A와 B 블록은 이미 거의 소진되었으나 클래스 C 블록은 대부분의 조직이 필요로 하는 크기보다 작으므로 클래스 A나 B블록을 받은 조직은 블록을 더 작은 서브 블록으로 나누어 다른 조직 들과 공유할 수 가 있었다.
블록을 작은 블록으로 나누는 개념을 서브넷팅(Subnetting)이라고 부른다.
서브넷팅에서 네트워크는 몇개이 작은 서브네트워크로 나뉘고 각 서브넷은 자신의 서브넷 주소를 가진다.
[서브넷 마스크]
서브넷팅은 netid 의 길이는 증가시키고 hostid의 길이는 감소시킨다. 네트워크를 같은 수의 호스트를 가지는 s개의 서브넷으로 나누면 다음과 같이 각 서브넷의 subnetid를 구할수 있다.
[슈퍼넷팅]
대부분 기관은 할당 받은 블록을 다른 조직과 공유하지 않으므로 서브넷팅은 클래스 기반 주소지정에서 생기는 주소 고갈문제를 완전히 해결 할 수 없다.
클래스 C 블록은 남아있지만 클래스 C 블록의 크기는 인터넷에 연결하기 원하는 기관의 요구 사항을 만족하게 하기에는 충분히 크지 않으므로 슈퍼넷팅이라는 해결책이 도입되었다.
슈퍼넷팅을 사용함으로써, 기관은 큰 범위의 주소를 생성하기 위해 몇개의 클래스C블록을 결합할 수 있다.
이를 통해 조직은 한개의 주소 블록을 신청하는 대신 여러개의 클래스 C블록을 신청할 수 있다. 예를 들어 1,000개의 주소가 필요한 기관은 4개의 클래스 C블록을 부여 받을 수 있다.
[슈퍼넷 마스크]
슈퍼넷 마스크는 서브넷 마스크의 반대이다. 클래스 C에서 서브넷 마스크는 이 클래스의 디폴트 마스크보다 1의 개수가 더 많다. 클래스 C의 슈퍼넷 마스크는 이 클래스의 디폴트 마스크 보다 1의 개수가 더 적다..
3. 클래스 없는 주소지정
클래스 기반 주소지정 방식에서 서브넷팅과 슈퍼넷팅은 주소고갈 문제를 해결하지 못하였으며 주소의 배분이나 경로 설정 과정이 훨씬 더 복잡하게 되었다.
인터넷이 성장함에 따라 좀 더 긴 주소 공간을 확보하는것이 장기적인 해결책이라 할 수 있다. 그렇지만 이를 위해서는 IP주소의 길이가 증가해야하므로 IP패킷의 형식이 변경되어야 한다.
비록 IPv6라는 장기적인 해결책이 이미 고안되었지만, 동일한 주소 공간을 사용하면서도 기관들에게 균등하게 주소를 배분할 수 있도록 하기 위한 단기적인 해결책도 역시 제시되었다.
단기적인 해결책은 IPv4주소를 그대로 사용하며 클래스 없는 주소지정(classless addressing)이라고 한다.
다시 말하면 주소의 고갈 문제를 완화하기 위하여 주소를 배분할 때 클라스라는 개념을 없앴다.
클래스 없는 주소 지정 방식이 필요한 또 다른 이유가 있다. 1990년대에 인터넷 서비스 제공자 (ISP:internet service provider)가 주목을 받게되었다. ISP는 개인, 작은 회사 그리고 인터넷 사이트를 운영하지는 않지만, 구성원들에게 전자우편과 같은 인터넷 서비스를 제공하고자 하는 중간 규모의 기관에 인터넷 접속서비스를 제공하는 기관이다.
isp는 큰 주소 범위를 할당받고, 이러한 주소를 1,2,4,8,16 등의 그룹으로 다시 나눈후에 가정이나 소규모 회사에 주소를 할당한다.
고객들은 모뎀이나 ADSL 또는 케이블 모뎀등을 이용하여 ISP에 접속한다. 이러한 고객들이 인터넷에 접속하기 위해서는 IPv4 주소가 필요하다.
1996년에 인터넷 관리 기구는 클래스가 없는 주소 지정이라는 새로운 구조를 발표.
클래스 없는 주소지정방식에서는 어떤 클래스에도 포함되지 않는 가변길이의 블록이 사용된다.
즉, 기관은 1, 2, 4, ... , 128 등의 주소를 포함하는 블록을 할당 받을 수 있다.
[가변 길이 블록]
클래스 기반 주소지정방식에서 전체 주소 공간은 다섯개의 클래스로 나누어진다.
클래스 A,B,C 에 속하는 하나의 블록이 한 기관에 할당되며, 이 블록의 크기는 이미 정해져있다.
클래스 D와E에 속하는 블록은 특수 목적을 위하여 예약된 블록이다.
클래스 없는 주소지정 방식에서 전체 주소 공간은 가변길이 블록으로 나누어진다.
이론적으로 2^0,2^1,2^2..2^32 개의 주소를 갖는 블록이 기관에 할당될 수 있다.
단, 블록에 포함되는 주소의 개수는 2의 거듭제곱이 되어야 한다는 제약조건이 있다.
한 기관은 하나의 주소 블록을 할당받을 수 있다.
[2단계 주소체계]
클래스 기반 주소지정 방식에서는 주소를 netid 와 hostid부분으로 나누는 2단계 주소 체계가 사용된다.
여기에서 netid는 네트워크를 나타내며, hostid는 네트워크 내에 속하는 host를 나타낸다.
동일한 개념이 클래스 없는 주소지정방식에도 적용될 수 있다.
기관에는 하나의 주소 블록이 할당될 수 있으며, 블록은 프리픽스(prefix)와 서픽스(suffix)로 나누어진다.
프리픽스는 netid와 같은 기능을, 서픽스는 hostid 와 같은 기능을 담당한다.
블록 내에 있는 모든 주소는 같은 프리픽스를 가지며, 각 주소는 서로 다른 서픽스를 가진다.
=> 클래스 없는 주소지정방식에서, 프리픽스는 네트워크를 지정하고, 서픽스는 호스트를 지정한다.
클래스 기반 주소지정방식에서, netid길이인 n은 주소의 클래스에 따라 다르며, 8,16, 또는 24 중 하나의 값을 가진다.
클래스 없는 주소 지정방식에서 프리픽스 길이인 n은 블록의 크기에 따라 다르며 0,1,2,3...32 중에서 하나의 값이 될 수 있다.
클래스 없는 주소지정 방식에서 n 의 값은 프리픽스 길이를 나타내며,32-n의 값은 서픽스 길이를 나타낸다.
->클래스 없는 주소지정 방식에서 프리픽스의 길이는 0~32까지이다.
-> 클래스 없는 주소지정 방식에서, 블록 정보를 알기 위해서는 블록 내의 주소와 프리픽스를 알아야 한다.
[슬래스 / 표기법]
클래스 기반 주소 지정방식에서 정의된 netid 길이 또는 클래스 없는 주소지정방식에서 정의되는 프리픽스 길이는 블록에 속하는 주소에서 블록에 대한 정보를 추출하기 위한 중요한 역할을 담당한다.
그렇지만 클래스 기반 방식과 클래스 없는 방식은 다음과 같은 차이점이 있다.
- 클래스 주소 지정방식에서 netid 길이는 주소자체로부터 얻어질 수 있다. 주소 가 주어지면 주소의 클래스가 정해지며, 따라서 netid 길이 (즉, 8,16,24) 도 알수 있다.
-클래스 없는 주소 지정방식에서는 블록내의 주소만 가지고는 프리픽스 길이를 알 수 없다. 주소는 임의의 프리픽스 길이를 갖는 블록에 속한다.
'Cumputer Science > 컴퓨터 네트워크🍋' 카테고리의 다른 글
wireshark로 배우는 컴퓨터 네트워크 연습문제 10장 (0) | 2022.06.01 |
---|---|
wireshark로 배우는 컴퓨터 네트워크 연습문제 9장 (3) | 2022.06.01 |
컴퓨터네트워크 : IP패킷 전달과 포워딩 (1) | 2022.05.29 |
컴퓨터 네트워크 : 네트워크층 개요 (0) | 2022.05.27 |