IP_주소 클래스
모든 IP_주소는 두 부분으로 나뉘는데 첫 번째 부분은 네트워크 부분으로 호스트가 어느 네트워크에 위치하고 있는지를 결정해주는 역할을 하며 Net ID로 부른다. 우편번호에서 앞의 세 자리, 즉 지역번호와 같은 의미이다. 그리고 두 번째 부분은 호스트 자신을 가리키며 Host ID라고 하는데 우편번호에서 번지수와 같은 의미이다. 지역번호와 번지수만 알면 우편물을 보낼 수 있듯이 Net ID와 Host ID만 알면 데이터를 어디든지 보낼 수 있다.
이렇게 IP_주소(192. 168.100.100) 체계는 Net ID(192.168.100.0)와 Host ID(0.0.0.100)로 구분할 수 있기 때문에 ‘계층적 주소체계’(Hierarchical Addressing Scheme)를 이룬다. 주소에 체계가 있으므로 체계적인 관리가 가능하다.
하지만 MAC_주소(00:00:30:A4:56:FE)는 00:00:30:A4:56:FE라는 주소가 어디에 있는지 어떻게 구성되어 있는지 체계를 알 수 없으므로 ‘평면적 주소체계’(Plane Addressing Scheme)라고 하고 주소를 체계적으로 관리할 수 없다.
▪ IP_주소는 네트워크 부분과 호스트 부분으로 구별한다고 했는데 네트워크 부분을 구별하기 위해서 5개의 클래스를 정의해 두었다.
a. 192.168.100.32는 전형적인 class C인 IP_주소(네트워크_주소+호스트_주소)
b. 192.168.100.0은 네트워크_주소
c. 0.0.0.32는 호스트 주소
d. 192.168.100.255는 192.168.100.0 네트워크에만 뿌리는 멀티캐스트(다이렉티브 브로드캐스트) 주소
e. 255.255.255.255(모두 1)는 모든 네트워크에 뿌리는 브로드캐스트 주소
f. 0.0.0.0(모두 0)은 모든(Any) 네트워크_주소 자체이다.
▪ 호스트 비트나 네트워크 비트를 이용한 문제를 풀 때에는 ‘2^n-2=호스트/네트워크 수’로 계산하는데 모두 0과 모두 1인 두 가지 경우를 미리 빼는 것이다. 요즘엔 IP_주소가 모자라서 'subnet 0'식으로 첫 번째 네트워크 ID(0 범위)주소의 호스트들도 사용한다고 선언하고 그 네트워크에 딸린 호스트 IP 들을 모두 사용하는 추세이다.
IP_주소는 일반적으로 시작 주소가
Class A : 1~126
Class B : 128.0~191.255
Class C : 192.0.0~223.255.255
Class D : 224~239 <= Multicast
Class E : 240~253 <= Labs
그리고 기타 특수 목적용으로 주소를 나누는데,
사설 IP 주소는 공적 IP_주소로 지정되지 못하고 내부에서만 사용된다.
① Class A는 10.0.0.0~10.255.255.255.255 이고
② Class B는 172.16.0.0~172.31.255.255 이며
③ Class C는 192.168.0.0~192.168.255.255로써
예약된 ID(Internet Draft) 주소
④ 0.0.0.0 ~ 0.255.255.255는 제한된 용도로 사용되는 특수한 예약주소이고,
⑤ 192.0.2.0는 TEST-NET이라고 불리는 문서화 및 예제 코드를 위한 예약주소이며,
⑥ 169.254.0.0 ~ 169.254.255.255는 DHCP 서버가 존재하지 않을 경우 운영체제가 자동으로 할당해주는 예약주소이다.
⑦ 127.0.0.1은 loopback 주소로 네트워크 테스트용으로만 사용한다.
=>일반적으로 조직은 IP_주소의
▪ 처음 20%는 서버에게
▪ 그다음 50%는 워크스테이션에게
▪ 그다음 10%는 프린터
▪ 마지막 20%는 라우터나 그 밖의 네트워크 장비에게 할당한다는 암묵적 룰이 있다.
서브넷 마스크(Subnet Mask)
서브넷 마스크는 넷 마스크로도 불리는데 동일한 네트워크에서 서로 어떻게 네트워크가 구분되어 있는지 알려준다.
두 개의 호스트가 동일한 네트워크에 들어있는 여부를 팥다할 때 호스트의 IP_주소와 서브넷을 2진수로 ANDing(1과1만 1, 0과 1, 0과 0, 1과 0은 모두 0) 해서 처리한다.
모든 호스트는 이 서브넷마스크로 자신이 어느 네트워크에 속해 있는지 알게 된다. 즉, 호스트 A는 호스트 B가 자신과 동일한 네트워크에 들어있는지 아닌지를 서브넷마스크로 판단한다. 라우터도 이것으로 판단한다.
▪ 192.168.100.23 255.255.255.0과
192.168.101.24 255.255.255.0은 서로 다른 네트워크에 존재한다.
▪ 192.168.100.23 255.255.255.0과
192.168.100.24 255.255.255.0은 서로 같은 네트워크에 존재한다.
▪ 192.168.100.23 255.255.255.0과
192.168.100.24 255.255.255.240도 서로 다른 네트워크에 존재한다.
호스트 A는 자신의 IP_주소와 서브넷마스크를 ANDing 연산하는데,
192.168.17.19 = 11000000.10101000.00010001.00010011
255.255.255.0 = 11111111.11111111.11111111.00000000
ANDing = 11000000.10101000.00010001.00000000 => 192.168.17.0
호스트 B도 자신의 IP_주소와 서브넷마스크를 같은 방식으로 ANDing으로 계산하는데,
192.168.17.20 = 11000000.10101000.00010001.00010100
255.255.255.0 = 11111111.11111111.11111111.00000000
ANDing = 11000000.10101000.00010001.00000000 => 192.168.17.0
=>위에서 보는 바와 같이 호스트 A와 호스트 B는 네트워크_주소가 같아서 같은 네트워크 세그먼트에 있기 때문에 라우터를 거치지 않고 직접 브로드캐스트로 통신한다.
호스트 E는
192.168.17.19 = 11000000.10101000.00010001.00010011
255.255.255.0 = 11111111.11111111.11111111.00000000
ANDing 11000000.10101000.00010001.00000000 =>192.168.17.0
호스트 F는
192.168.17.20 = 11000000.10101000.00010001.00010100
255.255.255.240=11111111.11111111.11111111.11110000
ANDing 11000000.10101000.00010001.00010000 =>192.168.17.16(IP_주소가 아니라 네트웤크 주소!!!!)
=>두 노드는 네트워크_주소(192.168.17.0)는 같지만 서브네팅되어 있어서 서로 다른 네트워크이다. 따라서 호스트 E는 호스트 F에게 라우터에게 데이터를 보내서 라우터가 적절한 경로로 호스트 F에게 데이터를 보내게 된다. 위에서 192.168.17.16은 호스트 주소가 아니라 서브네팅된 네트워크 주소중 하나이다.
=>완전히 다른 네트워크, 서브네팅된 네트워크와 다른 VLAN에 속한 노드들은 서로 다른 네트워크에 존재하므로 이들은 반드시 라우터를 통해서만 통신이 된다.
Route Summary(경로요약)
Route Summary는 Route Aggregation(경로집합)으로도 불리는데 뒤에서 알아볼 슈퍼네팅(Supernetting)도 이와 유사한 기법으로 만들어 준다. IP 네트워크에서 도메인 내부가 복잡하게 서브네팅(Subnetting)되어 있을 때 이들 경로를 하나의 경로로 모으는 기법이다.
이렇게 해주면 내부 네트워크의 상태를 외부에 알리지 않게 되어서 보안이 좋아지고, 라우팅 테이블에 하나의 네트워크만 올라가기 때문에 라우팅 테이블이 가벼워져서 네트워크 트래픽 효율도 좋아지며, 불필요한 업데이트가 없으므로 네트워크가 효과적으로 운영되게 된다.
이에 비해서 도메인 내부의 복잡한 서브네팅 정보가 그대로 라우팅 테이블로 올라가서 내부의 모든 네트워크 정보가 외부로 알려지는 구조를 Flat Routing이라고 부른다.
router(config)#no auto summary 하면 내부의 서브네팅 정보가 그대로 올라가고, auto summary 하면 대표 경로요약 정보로 올라간다.
Route Summary/Supernetting을 만들려면 여러 IP_주소에서 맨 좌측으로부터 서로 공유되는 비트까지의 개수를 계산해서 서브넷마스크를 정하고, 네트워크 주소들 중 가장 큰 범위나 첫 번째 네트워크_주소를 네트워크 ID로 주면 된다.
예를 들어 다음과 같은 내부의 네 개의 네트워크를 하나의 대표 네트워크인 경로요약을 한다면
192.168.10.0 255.255.255.0
192.168.11.0 255.255.255.0
192.168.12.0 255.255.255.0
192.168.13.0 255.255.255.0에서 192.168. ~ .0 까지는 모두 같으므로
11111111.11111111.00001010.00000000
11111111.11111111.00001011.00000000
11111111.11111111.00001100.00000000
11111111.11111111.00001101.00000000이어서
11111111.11111111.11111000.00000000이므로 세 번째 Octet 111110000는 2^7+2^6+2^5+2^4+2^3=248이되어 서브네트는 255.255.248.0이고, 192.168.10.0이 첫 번째 네트워크이므로 192.168.10.0 255.255.248.0 네트워크_주소와 서브넷마스크가 이 네 개의 네트워크를 대신하게 된다.
일반적으로 많이 사용되는 Class C 네트워크에서
▪ /24라면 Default로 24비트가 네트워크 비트이고, 나머지 8비트가 호스트 비트이다. 2^8은 2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7=1+2+4+8+16+32+64+128=255개의 호스트가 가능하다.
▪ /27이면 Subnetting으로 27비트가 네트워크 비트이고, 나머지 5비트만 호스트 비트이다. 2^5은
2^0+2^1+2^2+2^3+2^4=1+2+4+8+16=31개의 호스트가 가능하다. 이 경우에는 몇 개의 네트워크로 나누는지에 따라서 다르겠지만 적어도 255개의 호스트는 못 가지게 된다. 예를 들어서 8개의 서브넷이 있다면, 각 서브넷에는 31개의 호스트가 들어가므로 8x31=248개의 호스트가 가능하지만, 여기서 각 서브넷당 네트워크 주소와 다이렉티브 브로드캐스트 주소를 각각 빼면 248-(8(네트워크 주소)+8(다이렉티브 브로드캐스트 주소))=232개의 호스트 주소만 가능하다.
=>서브네팅에서는 호스트_수 감소, 네트워크_수 증가이다.
▪ /23이면 Supernetting으로 23비트가 네트워크 비트이고, 나머지 9비트가 호스트 비트이다. 2^9은
2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7+2^8=511개의 호스트가 가능하다.
=>슈퍼네팅은 현실적으로 브로드캐스트 영역이 너무 커서 네트워킹되기 어렵다. 슈퍼네팅에서는 호스트_수 증가, 네트워크_수 감소이다.
서브네팅 계산은
1) 2^n -2 = k (네트워크) 이면 n은 네트워크 비트가 된다.
2) 8(Octet) - n = m(호스트 비트)가 된다.
3) 이 2진수를 10진수로 계산 l을 구하고
4) 256-l = x를 구한 뒤 0, x, 2x, 3x, ... 256까지 가고
5) net_id, host_range, broad_id로 계산해서 서브네팅 해주면 된다.
a) Class C인 192.168.100.0에서 6개의 네트워크가 필요하다(서브네팅한다). 서브넷마스크는????
=>255.255.255.224
0, 32, 64, 96, 128, 160, 192, 224(이 경우 각 네트워크당 30개씩 호스트가 들어 갈 수 있는 7개~8개(subnet zero)까지의 네트워크가 가능하다!!!)
b) Class C인 192.168.100.0에서 각 네트워크당(서브네팅한다) 30개의 호스트가 필요하다. 서브넷마스크는????
=>255.255.255.224
0, 32, 64, 96, 128, 160, 192, 224(이 경우 각 네트워크당 30개씩 호스트가 들어 갈 수 있는 7개~8개(subnet zero)까지의 네트워크가 가능하다!!!)
c) Class C인 210.168.121.129 255.255.255.252(서브네팅 되어 있음) 네트워크 주소를 받았을 때 사용할 수 있는 실제 IP는???
210.168.121.129와 210.168.121.130 두 개의 호스트를 이용할 수 있다.
IPv6
현재 우리가 사용하고 있는 IP_주소 체계를 IPv4(IP version 4)라고 하는데 1980년도 초부터 사용해온 것으로 지금의 엄청난 양의 각종 기기에 IP_주소를 할당하기에는 이제 턱없이 부족한 실정이다. IPv4는 32비트이므로 2^32=43억 개 정도지만 실제로 사용할 수 있는 주소는 2억 5천만 개 정도이다. 현재의 네트워크 성장추세와 신흥 IP 수요국가로 떠오른 중국과 얼마 지나지 않아서 떠오를 인도, 그리고 아프리카 인구 등을 고려하면 IP_주소 고갈 문제는 실로 심각한 것이 될 것이다. 또 IPv4 주소를 컴퓨터에게만 할애되는 것은 아니라는 사실도 이런 IP 공급 부족을 부추기고 있다. IP Phone이나 IP TV, 그리고 미들웨어(Embeded System)를 이용한 홈 네트워킹으로 냉장고, 온도 조절기, 세탁기, 밥통 등에도 IP_주소를 줌으로써 생활의 편리를 더욱 도모하는 추세이다. 현재는 거의 IP_주소가 고갈된 상태이다.
=>IPv6는 128비트로써 앞의 64비트는 네트워크 비트이고 뒤의 64비트는 호스트 비트이다.
IPv4의 주소 고갈 문제를 해소하기 위해서
① 내부 LAN에서는 사설 IP_주소를 사용하고 WAN으로 나갈 때에는 공적 IP로 만들어주는 NAT 기법을 사용하거나,
② 서브넷마스크를 이용한 서브네팅(네트워크_수 증가)/슈퍼네팅(호스트_수 증가)을 사용하거나,
③ DHCP(Dynamic Host Configuration Protocol)로 사용하지 않는 IP_주소를 회수해서 다른 노드에게 부여하는 방식 등이 있다. DHCP 서버는 호스트들에게 IP_주소를 임대(leased)하는 방식이다.
=>이렇게 IPv4의 주소 절약에 나름대로 최선의 노력을 하고 있지만 IPv4 자체가 가지고 있는 한계(32비트 중에서도 네트워크와 호스트 주소로 나뉘는 체계) 때문에 IPv4 주소 고갈 문제는 피할 수는 없게 되었다.
IPv4는 또 다른 구조적인 문제를 가지고 있는데
① 데이터 헤더가 OSI 계층을 따라 내려가면서 복잡하게 캡슐화되어서 실제로 네트워크를 흐르는 데이터의 오버헤드(overhead)가 매우 크게 된다.
② 또 주소가 부족하므로 사설 IP_주소를 많이 사용하게 되어서 주소 충돌이라는 주소관리 문제도 있고,
③ iptables나 IPSec로 설정하는 보안에서도 문제가 발견되고 있다.
④ TCP에서의 3-way handshakes 과정에서도 많은 허점이 내재되어 있다.
⑤ 그리고 네트워크 트래픽을 다량으로 발생시키는 필요악과도 같은 브로드캐스트를 없앨 수 없다는 것이 가장 큰 문제라고 할 수 있다. IPv4에는 유니캐스트, 멀티캐스트, 그리고 브로드캐스트가 있는데 IPv6에서는 유니캐스트, 멀티캐스트, 그리고 브로드캐스트가 빠지고 애니캐스트가 생겼다. Windows 콘솔에서 nslookup 하고, www.youtube.com 했을 때 IPv6 주소 4개와 IPv4 주소 16개가 보이는데 www.youtube.com으로 접속하면 이 중에 한가한 서버가 먼저 서비스를 제공하는 방식이 Anycast이다.
IPv6의 장점
① 주소체계가 글로벌하다. 2^128개는 무한 수(∞)이다.
② IP_주소를 유연하고 체계적으로 배정할 수 있다.
③ 한 기기에 여러 IP를 할당할 수 있다.
④ 체크섬 등 부가적인 오버헤드가 줄어든다.
⑤ 현존하는 IPv4를 대체하기 위한 것이 아니라 공존한다.
=>dual stack으로 IPv4와 IPv6 두 가지를 동시에 하나의 기기에 할당할 수 있는데, IPv6를 기존의 IPv4 네트워크로 전송 할 때 tunneling 방식과 encapsulation 방식으로 설정해줄 수 있다.
⑥ 보안이 더욱 강해진다.
⑦ 브로드캐스트가 없어진다. 에니캐스트(anycast)가 생겨났다.
⑧ 네트워크 속도가 빨라진다.
⑨ (호스트의) 주소관리가 편해진다.
⑩ 노드의 IP_주소가 자동으로 설정된다. 노드의 MAC 주소 48비트의 정 중앙에 FF:FE를 추가해서 64비트로 만듦
a) eui-64를 붙여서 2001:1:1:1::/64 eui-64 하면 MAC 주소를 변형한 하드웨어적인 주소가 되고,
b) eui-64를 안 붙이고 2001:1:1:1::1/64식으로 별도로 ~::1식으로 주소를 주면 소프트웨어적인 주소가 된다.
=>하드웨어적인 주소와 포프트웨어적인 주소가 충돌하면 하드웨어적인 주소를 선택하게 된다!!!
eui-64는 예를 들어 노드의 MAC_주소가 AA:BB:CC:DD:EE:FF라면 한 가운데 ~ CC:DD ~ 사이에 FF:FE를 넣어서 AA:BB:CC:FF:FE:DD:EE:FF로 만든다. 그리고 MAC_주소가 유일하면 맨 앞에 02를 붙이고 유일하지 않을 때에는 00을 붙이는데 대부분 MAC_주소는 유일하므로 02가 붙어서 실제로 이 노드의 IPv6에서의 호스트_주소는 02AABB:CCFF:FEDD:EEFF식이 되고, 맨 앞의 0도 생략할 수 있으므로 2AABB:CCFF:FEDD:EEFF도 된다. 하지만 02 ~ 로 인해서 네트워크 비트 64가 늘어난 것은 아니고 표현만 이렇게 하는 것이다.
⑪ 무선 네트워크에서도 안전한 통신과 보안이 증가된다.
⑫ 네트워크 효율이 매우 좋아진다.
⑬ 새로운 IT 세계의 재도약 기회
⑭ 단점이라면
a. 초 절전모드에서 실행되는 특수 기기와 IoT 기기들에게는 IPv6의 늘어난 주소비트의 연산이 복잡해져서 시스템 리소스에 부담이 되고
b. 이로 인해서 특히 전력소모와 열 발생으로 인한 성능 저하가 있을 수 있다는 점과
c. 현존하는 모든 IPv4 장비와의 완전한 호환에서 어느 정도의 트러블 발생 정도를 생각할 수 있다.
IPv6의 중요 설정
2000::/3 글로벌 유니캐스트 주소로 외부와 연결될 때 사용된다. 네트워크 부분에서 글로벌 라우팅의 prefix는 48비트이고, 서브넷 ID는 16비트며, 호스트 인터페이스 ID는 64비트이다.
FE80::/64 로컬 네트워크에서의 주소로 link-local로 불리며, 게이트웨이나 호스트 주소에 사용된다. local -link 주소의 Prefix는 항상 FE80::/64로 시 작된다.
::1/128 IPv4의 127.0.0.1와 같은 IPv6의 loopback이다. ping ::1 -6으로 확인 가능하다.
IPv6 주소 표기와 설정법
Pv6의 주소는 ‘네트워크 64비트+호스트 64비트=총 128비트’이다. IPv4의 32비트처럼 10진법(decimal) 192.168.100.10식으로 표시하지 않고 16진수(hexadecimal)로 0~9,A,B,C,D,E,F로 표시한다. : 과 : 사이에 16비트(숫자나 문자 4개)를 8개 써야 한다.
IPv6의 주소는 020001:0DB8:010F:0001(네트워크_64비트):0000:00FF:FE00:0D0C(호스트_64비트)식으로 표시되는데
① 16진수 4자리 숫자와 문자를 :과 : 사이에 넣어서 총 8번 써주면 된다.
② 대소문자 구별은 없지만 모두 대문자 OR 모두 소문자로 쓰면 된다. 대소문자를 섞어 쓰면 안 된다. Aa3F:ef1C:34AC:a5ef ......식은 불가
③ : 대신 -로 써도 되기는 하지만 주로 : 을 쓴다.
④ 모두 0과 숫자와 문자 앞에 있는 0은 몇 개가 되어도 생략할 수 있지만, 중간이나 맨 뒤 의 0은 생략할 수 없다.
a. 연속으로 0이 나오는 것을 줄이면 어디서 0이 생략되었는지 불분명하므로 ::로 표시한다.
b. 하지만 ::::식으로 ::을 두 번 연속해서 쓸 수 없다. 따라서
020001:0DB8:010F:0001:0000:0000:0000:0D0C는
=>20001:db8:10f:1:0:0:0:d0c OR
=>20001:db8:10f:1::d0c로 쓸 수 있다. ::에는 전체가 8묶음이어야 하는데 표시된 것은 5 묶음이므로 ::에 3개의 0의 묶음 0000:0000:0000이 생략된 것을 알 수 있다.
따라서 20001:1::1은 2001:0001:0000:0000:0000:0000:0000:0001이 된다. 0이 5 묶음이다.
⑤ / 뒤의 숫자(CIDR)는 네트워크 비트인데 이 숫자가 작을수록 더 상위 네트워크이다. /32 가 /48 보다 더 많은 네트워크를 가지고 있는 상위 네트워크이다. 네트워크가 64비트로 고정되어 있어서 /32=>64-32=32개의 네트워크, /48=>64-48=16개의 네트워크를 가진다.
=>그리고 /80처럼 /64보다 더 큰 수는 호스트 비트가 64비트로 고정되어 있으므로 절대 네트워크 주소로 나올 수 없다. 즉, 서브네팅이나 슈퍼네팅이 필요 없어서 이런 네트워크는 없다!!!
IPv6에서 호스트_주소를 줄 때
a. 별도로 지정할 필요가 없는 하드웨어적인 주소(/64 뒤에 eui-64 표기)와
b. 관리자가 임의로 지정하는 소프트웨어적인 주소(/64 뒤에 eui-64 표기 안 함)가 있는데
c. 소프트웨어적인 주소를 주었어도 해당 인터페이스에 하드웨어_주소를 겹쳐주면 하드웨어_주소로 최종 설정된다.
여러 라우터가 있으면 라우팅 프로토콜을 써 주어야 한다.
▪ RIP은
Router(config)#ipv6 router rip ABC 해주는데 ABC는 rip의 프로세스 이름이다.
Router(config-rtr)#int fa0/0 네트워크를 써주지 않고 각 인터페이스로 들어가서
Router(config-if)#ipv6 rip ABC enable 식으로 해주면 된다.
▪ EIGRP는
Router(config)#ipv6 router eigrp 12
Router(config-rtr)# int fa0/0
Router(config-if)#ipv6 eigrp 12
▪ OSPF는
Router(config)#ipv6 router ospf 10
Router(config-router)#router-id 1.1.1.1
Router(config-router)#int fa0/0
Router(config-if)#ipv6 ospf 10 area 0식으로 해준다.