IPv4 Addresses

손하은·2024년 5월 13일
0

컴퓨터네트워크

목록 보기
2/2

1. Introduction

  • IPv4 address는 32 bits의 하나의 숫자임 => 약 40억개
  • IPv4 addresses는 전세계로 유일하며 ID로 쓰임
    (사설망 구축 시 사용하는 주소 제외)
  • 32 bits으로 읽고 쓰기 불편해서 byte 단위로 끊어 10진법으로 표현함
  • 두 주소 사이에 있는 주소 개수 : 큰 주소 - 작은 주소 + 1
  • 시작 주소로부터 32개의 주소가 있을 때 마지막 주소
    : 시작 주소 + 32 - 1
  • 0.0.0.255 + 1 = 0.0.1.0
  • 0.0.0.255 + 10 = 0.0.1.9
    => 14.11.45.96 + 200 = 14.11.46.40

2. Classful Addressing

1. Occupation of address space

2. Finding the class of address

: 시작 주소로 class 구분

  • Class A : 시작 주소가 0 (=class A의 ID), 0~127
  • Class B : 시작 주소가 10 (=class B의 ID), 128~191
  • Class C : 시작 주소가 110 (=class C의 ID), 192~223
  • Class D : 시작 주소가 1110 (=class D의 ID), 224~239
  • Class E : 시작 주소가 1111 (=class E의 ID), 240~255

3. Netid and Hostid

  • IP 주소는 netid + hostid로 2개로 끊어 읽음 -> two-level addressing
  • class A = 1 : 3, class B = 2 : 2, class C = 3 : 1
  • 시작 주소로 class 구분 후 비율에 맞게 끊어읽기

4. Blocks in each class

(= classful addressing, 뒤로 갈수록 block 크기 작아짐)
: block 종류를 class별로 나눈 이유
=> block 하나를 사와서 관리자가 computer나 router에 부여하는데, 적게 필요한 곳도 있고 많이 필요한 곳도 있기 때문에 3종류로 분류함

  • 문제점 : 주소가 300개 정도 필요할 때, class B의 block을 사와야 하는데 B의 block 하나 당 주소 개수는 약 65000개이기 때문에 낭비가 심함
  • 해결 : subnet, supernet mask
  • 그래도 부족해서 classless addressing 사용

1) Bolcks in Class A

  • block 개수 : 2^(8-1) = 2^7개, 128개
    • netid인 8 bits 중 상위 1 bit 0으로 고정
  • block 하나 당 할당 가능한 주소 개수 : 2^(32-8) = 2^24개, 약 1600만개 (block size 큰 편)

2) Bolcks in Class B

  • block 개수 : 2^(16-2) = 2^14개, 약 16000개
    • netid인 16 bits 중 상위 2 bits 10으로 고정
  • block 하나 당 할당 가능한 주소 개수 : 2^(32-16) = 2^16개, 약 65000개 (block size 큰 편)

3) Bolcks in Class C

  • block 개수 : 2^(24-3) = 2^21개, 약 200만개
    • netid인 24 bits 중 상위 3 bits 110으로 고정
  • block 하나 당 할당 가능한 주소 개수 : 2^(32-24) = 2^8개, 128개 (block size 작은 편)

3. Sample Internet

  • LAN: 220.3.6.0/24 => network address, id처럼 쓰임
    • /24 : netid로 쓰이는 bit 수
  • R1, R2의 IP 주소 : router의 IP 주소는 network마다 하나씩 부여

4. Network addresses

  • network address : hostid가 모두 0인 것
  • 언제 쓰는가?
    • 약 40억개의 IP를 routing table에 저장하려면 40억개의 line이 필요 -> 거의 불가능
    • 따라서, 어떤 network가 class A의 block에 속한다고 가정했을 때, 약 1600만개의 주소를 table에서 다 관리하지 않고 network address로 즉, netid만 보고 관리하는 것
      => 1600만개가 한줄로 관리 가능
  • router는 목적지 IP 주소가 속한 network address를 뽑아낼 수 있어야 함
    • 다시 말해, hostid 부분을 다 0으로 만들 수 있어야 함 (mask를 알고 있어야 함)
      => network mask 와 AND 연산

1. Network mask

  • netid 부분 = 1, hostid 부분 = 0

2. Subnetwork

  • 왜 필요한가?
    • class B의 block이라고 가정했을 때 65000개의 주소를 하나의 switch에 다 연결하려면 switch가 엄청 커야함
    • 또한 141.14.0.1이 router에게 보내려고 할 때 router의 주소를 모르면 broadcast를 해야해서 약 65000명에게 다 보내야 함으로 비효율적임
      => 관리 부담이 큼
  • subnetwork 예시
    • 하나의 network를 4개의 subnet으로 구성
    • 141.14.90.27를 밖에서 받았다고 가정
    1. class 찾기 => class B
    2. Internet router가 141.14.0.0으로 routing table 찾아봄
      = class B의 mask인 255.255.0.0과 AND한 결과
    3. Site router가 141.14.64.0으로 routing table 찾아보고 해당 interface 번호로 전달
      = subnetwork mask와 AND한 결과
    4. 141.14.64.0을 관리하는 switch가 141.14.90.27의 MAC 주소를 알고 있다면 해당 주소에만 전송하고 모르면 broadcast 진행

3. Subnetwork Mask

  • netid + log(subnet 개수)가 모두 1이고 나머지는 모두 0인 것
  • 위의 예시에서 subnet mask는?
    • class B이므로 netid = 16 bits
    • 4개의 subnet으로 구성되어있으므로 log4 = 2
    • 16+2=18이므로 18 bits는 1, 14 bits는 0 => 255.255.192.0

4. Supernet Mask

  • class A, B, C끼리 gap이 너무 커서 제안된 방식
  • 예시) class C의 block 4개를 하나로 묶는 경우
    • 200.3.128.0 => 200.3.10000000.0
    • 200.3.129.0 => 200.3.10000001.0
    • 200.3.130.0 => 200.3.10000010.0
    • 200.3.131.0 => 200.3.10000011.0
    • 22 bits까지 동일 => 하나의 network처럼 보임
    • 주의) 00으로 끝나는 것부터 4개를 사와야 함

5. Classless Addressing

  • 뒤로 가도 block 크기 커질 수 있음, 규칙성 x
  • bit 단위로 끊어읽음
  • two-level : prefix(=netid), suffix(=hostid)
    • 개념적으로 동일, 용어만 다름
    • 끊어읽기 위해 주소 뒤에 '/' + prefix 길이 추가로 작성 필수
  • prefix가 커지면 block 크기가 작아짐 (=한 block 당 할당 가능한 주소 개수가 줄어듬)

6. 문제 유형

1. Classful Addressing

2. Classless Addressing

  • Internet이 4,294,967,296개의 주소를 가진 한개의 block으로 이루어졌을 때 prefix와 suffix 길이
    • block 한개 = 2^0 => prefix : 0
    • 주소 4,294,967,296개 = 2^32 => suffix : 32
      • 32-0으로 계산해도 됨 (전체 bit 수 - prefix 길이)
  • Internet이 block 하나 당 1개의 주소를 가진 4,294,967,296개의 block으로 이루어졌을 때 prefix와 suffix 길이
    • block 4,294,967,296개 = 2^32 => prefix : 32
    • block 하나 당 주소 1개 = 2^0 => suffix : 0
      • 32-32로 계산해도 됨 (전체 bit 수 - prefix 길이)
  • 임의의 주소가 주어졌을 때 시작 주소, 마지막 주소, 해당 주소가 속한 block의 주소 개수, network mask, prefix와 suffix 길이 구하기
    • 예) 12.23.24.78/8
    • 시작 주소 : 8 bits 이후로 모두 0 => 12.0.0.0/8
    • 끝 주소 : 8 bits 이후로 모두 1 => 12.255.255.255/8
    • 속한 block의 주소 개수 : 2^(32-8) = 2^24개
    • network mask : 8 bits까지 모두 1, 나머지 0 => 255.0.0.0
    • prefix length : 8, suffix length : 24
  • 한 기관이 block 130.34.12.64/26을 가지고 있을 때, 이를 4개의 subnet으로 구현하라 (각 subnet의 IP 주소 개수는 동일)
    • 방법 1)
    1. 4개의 subnet => log 4 = 2, 추가로 2 bits 필요
    2. 26 + 2 = 28이므로 28 bits 기준으로 끊어읽어야함
    3. 각 subnet의 시작 주소 :
      130.34.12.01000000/28 => 130.34.12.64/28
      130.34.12.01010000/28 => 130.34.12.80/28
      130.34.12.01100000/28 => 130.34.12.96/28
      130.34.12.01110000/28 => 130.34.12.112/28
    • 방법 2)
    1. 주어진 block의 suffix = 32-26 = 6이므로 block의 주소 개수 : 2^6=64
    2. 64개의 주소를 4개로 나눠야하므로 subnet 하나 당 주소 개수는 64/4=16
    3. 16개의 주소를 나타내려면 4 bits가 필요하므로
      1st block : 130.34.12.01000000/28 ~ 130.34.12.01001111/28
      2nd block : 130.34.12.01010000/28 ~ 130.34.12.01011111/28
      3rd block : 130.34.12.01100000/28 ~ 130.34.12.01101111/28
      4th bolck : 130.34.12.01110000/28 ~ 130.34.12.01111111/28
      ( 다음 block의 시작 주소는 이전 block의 마지막 주소의 바로 다음 주소 )
  • 한 기관이 14.24.74.0/24로 시작하는 block을 가지고 있을 때, 이를 다음을 만족하는 3개의 subnet으로 구현하라 => subnet 크기가 큰 것부터 구현
    • 1st block : 120개의 주소가 필요하므로 2^7=128, 7 bits 필요
      => 14.24.74.00000000/25 ~ 14.24.74.01111111/25 (25 = 32-7)
    • 2nd block : 60개의 주소가 필요하므로 2^6=64, 6 bits 필요
      => 14.24.74.10000000/26 ~ 14.24.74.10111111/26
    • 3rd block : 10개의 주소가 필요하므로 2^4=16, 4 bits 필요
      => 14.24.74.11000000/28 ~ 14.24.74.11001111/28
  • 한 기관이 190.100.0.0/16으로 시작하는 block을 가지고 있을 때, 이를 다음을 만족하는 3개의 subnet으로 구현하라
    • 1st group 크기: 64x256=2^14, 14 bits 필요
      => 190.100.00000000.00000000/18 ~ 190.100.00111111.11111111/18
    • 2nd group 크기: 128x128=2^14, 14 bits 필요
      => 190.100.01000000.00000000/18 ~ 190.100.01111111.11111111/18
    • 3rd group 크기: 128x64=2^13, 13bits 필요
      => 190.100.10000000.00000000/19 ~ 190.100.100111111.11111111/19
    • 1st block은 64개의 subblock, subblock 하나 당 256개의 주소를 가지고 잇는 거랑 다른게 없음 그러니까 알아서 풀수잇갯지?
      => 190.100.00000000.0/24, 190.100.00000001.0/24, ..., 190.100.00111111.0/24

7. Special Addresses

1. all-zero address

: 모두 0으로 된 주소

  • 언제 사용하는가?
    • 처음 컴퓨터를 켰을 때, DHCP server에게 IP 주소 할당을 요청할 때 Source IP 주소를 모두 0으로 해서 보냄
    • DHCP server에게 IP 주소를 할당 받기 전에는 자신의 IP 주소가 어떤 것인지 모르기 때문
  • DHCP server란?
    • IP 주소를 할당해주는 역할을 함
    • 예를 들어, 보통 어떤 MAC 주소를 쓰는 애는 221.14.52.1이라는 IP 주소를 써라 라고 packet을 보내줌
    • 공유기(swtich)가 이 역할을 함 (안에 포함되어 있음)

2. boradcast address

  • limited broadcast address
    • 모두 1로 된 주소
    • 모두에게 전송되는데, control message를 주고 받거나 보낼 대상이 많을 때 사용
    • DHCP server에게 IP 주소 할당 요청할 때, 목적지 주소를 이 주소로 보냄
      => 처음 컴퓨터를 킨 상황이니까 당연히 DHCP 주소를 모르기 때문
    • router가 packet을 block하기 때문에 limited가 붙음
      => block하지 않으면 전세계 모두에게 보내는 상황 발생
  • directed boradcast address
    • suffix가 모두 1인 주소
    • 대부분 router가 보냄
    • 한 network 상의 모든 device에게 data를 보낼 때 사용

3. loopback address

: 127로 시작하는 주소

  • 한 컴퓨터에서 server랑 client를 test하고 싶을 때 사용

4. addresses for private networks

  • 가장 흔한 사설망 주소 : 192.168.0.0/16 block
  • Internet과 연결하지 않고 내부적으로만 사용하려고 IP 주소를 할당해놨을 때, Internet 연결이 필요해지는 경우가 있음. 이때 새 주소를 할당 받는데, 임의의 IP 주소가 새로 할당 받은 IP 주소인지, 내부적으로 관리자가 할당한 IP인지 구분이 불가능함 => 따라서, 사설망 IP 주소를 따로 분리한 것

8. NAT (network address translation)

  • 사설망 내부의 컴퓨터가 외부의 server로 접근하려고 할 때, 자동으로 port forwarding을 해주는 장치
  • port forwarding이란?
    • 예) 사용자가 공유기로 들어가서 port 번호 8001번을 192.108.0.1, 3456을 위해 할당해주는 방식 (manual)
  • NAT 예시
    • 10.0.0.1의 사설망 IP 주소를 가진 컴퓨터가 외부의 특정 서버로 접속하고 싶은 경우
    • 1번의 packet대로 server에 도착 시, 사설망 주소를 사용하여 보냈기 때문에 해당 computer로 응답이 돌아오지 않음
      => 따라서, 10.0.0.1을 router가 자신의 public IP로 바꿔줘야 함
      (router는 public IP, 즉 고유한, 전세계에서 하나인 IP 주소와 사설망 내부에서 사용하는 IP를 가짐)
    • 2번 packet의 Source port number는 쓰고 있지 않은 port number 중 하나를 할당해준 것
    • 이후, server로부터 응답이 오면 (목적지는 router), router는 NAT translation table에서 5001번을 찾아봄
    • 5001번은 10.0.0.1, 3345를 위해 할당한 port number임을 확인하고 Destination을 10.0.0.1, 3345로 바꾸어 해당 IP 주소로 전송
  • NAT translation table
    • 한 사설망에서 특정 목적지로 가는 traffic이 여러개일 경우를 대비하여 각각에 port 번호를 부여하여 table로 관리하는 것
  • traffic 양 증가 시, router가 할 일이 아주 많아짐 => 고가 router 사용 필요

9. Hole punching

  • P2P 통신 시 사용하는 기법
  • clinet 역할을 하는 컴퓨터가 server 역할을 하는 사설망 내의 컴퓨터로 접속하려고 할 때, Destination에 해당 server의 사설망 IP 주소를 적으면 보내면 다른 곳으로 전송되기 때문에 전송에 어려움이 있음
  • 따라서, 사설망 IP 주소가 router를 거칠 때 (사설망 IP 주소에서 외부 특정 서버로 접속하려고 할 때) router가 해당 사설망 IP 주소에 부여한 port 번호 정보를 랑데뷰 서버에 저장하고
  • 나중에 누군가가 해당 사설망 IP 주소의 server로 접속하려고 할 때 랑데뷰 서버에 물어봐서 port 번호를 알아내는 것이다.

0개의 댓글