IP주소
개요
- 인터넷에 연결된 각 장치 식별자:IP주소
- IPv4주소 : 32비트 길이
- 주소 공간 : \(2^{32}\) 또는 4294967296
- 인터넷에서 유일한 식별자
- 인터넷상에 두 개의 장치가 같은 주소를 가질 수 없음
- 2진 표기법(기수 2), 16진 표기법(기수 16), 점 10진 표기법(기수 256) 사용
표기법
- 2진 표기법, 16진 표기법, 점 10진 표기법
- 2진과 점 10진(Dotted-decimal) 표기법
- 2진 10000000 00001011 00000011 00011111
- 점 10진 128.11.3.31
주소의 범위
- 주소의 범위를 다루는 것이 필요한 경우가 있음
- 처음 주소와 마지막 주소가 주어지면 이 범위 내 주소의 개수를 찾는 것이 필요
- 처음 주소와 범위 내 주소의 수가 주어지면 마지막 주소를 찾을 필요
- 해당하는 기수에서 뺄셈이나 덧셈 연산 수행
- 주소를 10진수 값으로 변환한 후 10진수에서 연산을 수행
연산
- 2진법, 10진법을 사용하여 32비트 수에 대한 연산을 수행하는 경우가 있음
- 비트 단위의 NOT 연산(일항 연산, unary operation)
- Bit 단위의 AND 연산
- 비트 단위의 AND 연산은 이항 연산(binary operation)으로 두 개의 입력을 취한다
- Bit단위의 OR 연산
- 비트 단위의 OR 연산은 이항 연산(binary operation)으로 두 개의 입력을 취함
클래스 기반 주소 지정
- IP주소는 시작할 때 클래스 개념 이용
- 90년대 중반에 새로운 구조인 클래스 없는 주소지정 방법 등장
클래스
- 5개(A, B, C, D, E)의 클래스로 구분
클래스 찾기
- 첫번째 비트가 0이면 A, 10이면 B, 110은 C, 1110은 D, 1111은 E
- 연속적인 비트 확인을 통해 클래스 알아냄
Netid와 hostid
- 클래스에 따라 netid와 hostid 길이가 다름
클래스와 블록
- 클래스 A
- 1바이트만 netid지정
- 가장 왼쪽 비트 0
- 7바이트로 나타내는 블록의 수 = 128
- 블록에 속한 주소 수 = 16777216
- 클래스 A 주소는 거의 소진
- 클래스 B
- 처음 두 바이트가 클래스 지정
- 처음 두 비트는 10
- 14비트로 지정할 수 있는 블록 수 = 16384
- 각 블록에 속한 주소 수 = 65536
- 클래스B 주소도 거의 소진
- 클래스 C
- 처음 세 바이트가 클래스 지정
- 처음 세 비트는 110
- 21비트로 지정할 수 있는 블록 수 = 2097152
- 각 블록에 속한 주소 수 = 256
- C클래스 블록이 충분할 만큼 작은 기간이 많지 않음
- 클래스 D
- 클래스 D는 한 블록만 있으며 멀티캐스팅을 위해 설계
- 인터넷상에 호스트들의 그룹을 지정하는데 사용
- 클래스 E
- 한 블록만 있으며 예비용
2계층 주소 지정
- 조직에 할당되는 주소 범위는 A, B, C 클래스 단위의 주소 블록
- 네트워크 내의 모든 주소는 한 블록에 속함
- 클래스 기반 주소지정에서 각 주소는 netid와 hostid 부분을 포함
- netid는 네트워크를 정의하고 hostid는 네트워크에 연결된 특정 호스트를 정의
- 블록에서 정보 추출하기
- 주소의 수
- 첫 번째 주소
- 마지막 주소
- 네트워크 주소
- 블록의 첫 번째 주소는 네트워크 주소
- 목적지로 패킷을 전송하는데 사용
- 네크워크 주소는 네트워크의 식별자
- 네크워크 마스크
- 목적지 주소를 이용하여 네트워크 주소를 찾아내는데 사용
- 디폴트 마스크라고도 함
- 마스크를 이용하여 네트워크 주소 찾아내기
- 목적지 주소와 디폴트 마스크를 AND연산
3계층 주소 지정 : 서브넷팅
- 클래스 A나 B를 받은 조직이 보안과 관리를 더 잘하기 위해 몇 개의 작은 서브네트워크로 나눌 필요
- 서브넷팅에서 각 서브네트워크는 자신의 서브네트워크 주소를 갖는다
- 서브넷 마스크
- 네트워크 마스크
- 네트워크가 서브넷팅 되지 않을 경우 사용
- 서브넷 마스크
- 네트워크가 서브넷으로 나누어질 경우 사용
- 네트워크 마스크
- 서브넷팅
- netid의 길이는 증가시키고 hostid의 길이는 감소시킨다
- 네트워크를 같은 수의 호스트를 가지는 s개의 서브넷으로 나누면 다음과 같이 각 서브넷의 subnetid를 구할 수 있다
- n은 netid의 길이고 n_sub는 각 subnetid의 길이이며 s는 2의 거듭제곱인 서브넷의 개수
슈퍼넷팅
- 여러개의 C클래스 결합
- 1000개의 주소가 필요한 기관이 4개의 C클래스 신청
- 슈퍼넷 마스크는 서브넷 마스크의 반대
- 인터넷의 폭발적 증가로 문제점 발생
- 클래스 A와 클래스 B 네트워크의 주소 공간이 고갈
- 클래스 C주소 사용으로 인터넷의 라우팅 테이블 규모 증대
- 32비트 IPv4 주소의 궁극적인 고갈
- 주소의 고갈을 막기 위해 IPv6주소 제안
- 전환 시기의 과도적인 사용
- 슈퍼넷 마스크
클래스 없는 주소 지정
클래스 없는 주소 지정
- 클래스 기반 주소 지정에서 서브넷팅과 슈퍼넷팅은 실제로 주소 고갈 문제를 해결하지 못함
- 인터넷이 성장함에 따라 장기적으로 보다 큰 주소 공간을 확보하는 것이 필요
- 장기적 해결책으로 IPv6가 개발
- 그러나 동일한 주소 공간을 사용하면서 각 기관에 대해 주소를 분배하는 방법이 필요
- 단기 해결책은 IPv4주소를 사용하면서 클래스 없는 주소지정이다.
가변길이 블록
- 각 기관은 가변길이 블록으로 2^32개 까지의 주소를 갖는 블록을 지정 가능
2단계 주소 체계
- 프리픽스(prefix) : netid와 동일 기능
- 서픽스(suffix) : hostid와 동일 가능
- 클래스 없는 주소 지정 방식에서 프리픽스의 길이는 0 ~ 32
- 슬래시 표기법
- 프리픽스 길이를 주소에 포함하여 표현
- 클래스 없는 주소 지정 방식에서, 블록 정보를 알기 위해서는 블록 내의 주소와 프리픽스를 알아야 한다
- 네트워크 마스크
- 클래스 기반 주소지정 방식에서 정의된 것과 같은 개념
- 네트워크 마스크는 32비트 숫자
- 왼쪽부터 n개의 연속적인 비트는 1로 설정
- 그 나머지 비트는 0으로 설정
- 블록 정보 추출
- 슬래시 표기법으로 표시된 주소는 첫번째 주소(네트워크 주소), 주소의 개수, 그리고 마지막 주소 등과 같은 블록에 포함된 모든 정보를 포함
- 블록에 속하는 주소의 개수는 다음과 같다
- 첫번째 주소는 주소에 네트워크 마스크를 AND연산하여 구한다
- 마지막 줏는 첫번째 주소의 개수를 더하거나 주소에 네트워크 마스크의 보수(NOT연산)값을 OR연산하여 구한다
블록 할당
- 국제 관리기구인 ICANN담당
- ISP에 할당
- 블록 할당 제약 조건(CIDR)
- 요구 주소 N은 2의 거듭제곱이어야 한다
- 블록에 속한 주소의 수(N)로 프리픽스 길이를 알 수 있다
-
할당하는 블록에 속한 주소는 연속적이어야 한다
-
클래스 기반 주소지정과의 관계
-
A 프리픽스 길이 : /8 -
B 프리픽스 길이 : /16 -
C 프리픽스 길이 : /24 -
D 프리픽스 길이 : /4 -
E 프리픽스 길이 : /4
-
서브넷팅
- 3단계 계층은 서브넷팅을 이용하여 구성
- 하나의 블록을 할당 받은 기관(또는 ISP)은 블록을 여러개의 서브 블록으로 나눈 후에 각 서브 블록을 서브넷에 할당
- 서브넷은 여러 개의 서브-서브넷으로 나누어질 수 있다
- 서브-서브넷은 다시 서브-서브-서브넷으로 나누어질 수 있다
- 서브넷 설계
- 기관이 할당 받은 주소의 총 개수는 N이고, 프리픽스 길이가 n이며, 각 서브넷에게 할당된 주소의 개수는 Nsub, 각 서브넷의 프리픽스 길이는 nsub, 그리고 서브넷의 총 개수는 s
- 각 서브넷에 속하는 주소의 개수는 2의 거듭제곱이어야 함
- 각 서브넷을 위한 프리픽스 길이는 다음과 같다 \(n_{sub} = n + \log_2(N/N_{sub})\)
- 각 서브넷에 속하는 시작 주소는 해당 서브넷에 속하는 주소의 개수로 나누어질 수 있어야 한다.
- 먼저 큰 네트워크에 주소를 설정하고 크기가 작은 네트워크의 주소는 그 다음에 설정하는 등의 단계로 주소 설정
- 각 서브넷에서 정보 찾기
- 첫 번째 주소와 마지막 주소 등과 같은 각 서브넷에 대한 정보를 찾는 방법은 인터넷의 각 네트워크에 대한 정보를 찾는 방법과 동일
- 주소 결합
- CIDR구조의 한 가지 장점은 주소 결합
- ICANN은 ISP에게 큰 주소 블록을 할당한다
- ISP는 할당된 블록을 여러 개의 서브-블록으로 나눈 후에 각 서브-블록을 고객들에게 할당
- 여러 개의 주소 블록이 하나의 블록으로 결합될 수 있으면 ISP에 할당될 수 있다.
특수 주소
클래스 기반 주소지정에서 일부 주소는 특수 목적을 위해 예약되어있다
클래스 없는 주소지정에서도 동일하게 클래스 기반 주소지정 방식과 동일한 특수 주소가 있다
특수 블록
- 모두-0인 주소
- 패킷을 전송하고자 하는 호스트가 자신의 IPv4 주소를 모르는 경우에 통신을 위하여 사용
- 자신의 IPv4 주소를 모르는 호스트는 부트스트랩 시간에 이 주소를 사용
- 발신지 주소로만 사용
- 목적지 주소는 제한된 브로드캐스트 주소 이용
- 모두-1인 주소 : 제한된 브로드캐스트 주소
- limited broadcast address
- 모두가 1인 주소
- 네트워크 내의 모든 호스트에게 메시지 전달 시 목적지 주소로 사용
- 라우터는 브로드캐스팅을 로컬 네트워크로 제한하기 위하여 이런 유형의 주소를 가지고 있는 패킷의 포워딩을 막는다
- 루프백 주소
- loopback address
- 127.0.0.0/8 블록
- 컴퓨터에 설치된 소프트웨어를 시험하기 위해 사용되는 주소
- 클라이언트 프로세스가 동일한 시스템상에 있는 서버 프로세스에게 메시지 전송 시 사용
- 패킷의 목적지 주소로만 사용
- 사설 주소(private address)
- 사설 용도를 위하여 할당
- 전역 네트워크에서 인식되지 않음
- 네트워크가 분리되어 있거나 주소 변환 기술(NAT : network address translation)을 사용하여 사설망을 인터넷에 연결하는데 사용
- 멀티캐스트 주소
- 224.0.0.0/4 블록
- 멀티캐스트 통신을 위해 예약된 블록
블록에 속하는 특수 주소
- 블록에 속하는 일부 주소를 특수 주소로 사용
- 권고사항(호스트에 할당 불가)
- 네트워크 주소
- 블록에 속하는 첫 번째 주소
- 직접 브로드캐스트 주소
- suffix가 모두 1로 설정된 블록의 마지막 주소
- 라우터가 특정 네트워크에 있는 모든 호스트에 패킷 전송 시 사용
- 네트워크 주소
- 클래스 주소에서 hostid가 모두 0인 주소
- 직접 브로드캐스트 주소
- direct broadcast address
- 서픽스가 모두 1인 주소
- 라우터가 특정 네트워크에 있는 모든 호스트에 패킷을 보낼 때 사용
- 패킷에서 목적지 주소로만 사용
IPv6 주소
IPv6 주소 등장 배경
- IPv4의 주소 공간의 한계
- IPv4는 최소 지연과 자원의 예약 불가
- IPv4에서는 암호화와 인증이 제공되지 않음
- IPv6 주소 길이 : 16바이트(128비트)
표기법
- 점 10진 표기법 -> 221.14.65.11.105.45.170.34.12.234.18.0.14.0.115.255
- 콜론 16진 표기법 -> FDEC : BA98 : 7654 : 3210 : ADBF : BBFF : 2922 : FFFF
- 제로 압축
- 원래의 주소 -> FDEC:0:0:0:0:BBFF:0:FFFF
- 제로 압축 -> FDEC::BBFF:0:FFFF
- 혼합 표기법
- 콜론 16진 표기법과 점 10진 표기법을 혼합하여 표기
- FDEC:14AB:2311:BBFF:AAAA:BBBB:130.24.24.18
- 가장 왼쪽이 모두 0인 주소의 압축 표현
- ::130.24.24.18
- 콜론 16진 표기법과 점 10진 표기법을 혼합하여 표기
- CIDR 표기법
- FDEC::BBFF:0:FFFF/60
주소 공간
- IPv6의 주소 공간은 \(2^{128}\) 이다.
- IPv4 주소의 \(2^{96}\)배.
세가지 주소 유형
- 유니캐스트(unicast) : 단일 인터페이스(컴퓨터 또는 라우터)를 정의
- 애니캐스트(anycast) : 단일 주소를 모두 공유하는 컴퓨터 그룹을 정의
- 멀티캐스트(multicast) : 컴퓨터 그룹을 정의
IPv6 주소 공간 할당
- 전체 주소 공간을 8등분으로 나누어 사용
- 현재 1/8만 사용자 주소 공간으로 사용