📑 IP4v 주소
32비트 Long타입으로 주소는 유일해야한다.


앞자리만 보고 어느 클래스인지 알기!

Netid가 학교라면 Hostid가 고유번호라 생각하면 된다.
한 네트워크당 전체 주소의 갯수는 2의 32-n(netid가 속한 bit)승이다.
-
한 네트워크의 첫 주소는 hostid가 모두 0일 때고, 마지막 주소는 hostid가 모두 1일때이다.
- A class : 17.0.0.0 ~ 17.225.225.225
- B class : 181.16.0.0 ~ 181.16.225.225
-
첫주소(Network Address)와 마지막 주소(special)는 일반적인 기기에게 부여되는 주소가 아니다.
class | blocks의 개수 | block당 주소의 개수 |
---|
A | 16,384 | 65,536 |
B | 2,097,152 | 256 |
C | 1 | 268,435,456 |
CLASS당 주소의 수 = 2(32−n)
router, switch, 기계들이 한 네트워크 안에 있는 단위가 LAN인 듯 하다.
🖥️ Network Mask
만약 라우팅 테이블에 IP 주소를 넣는다면 A class 기준 1,600만개의 행이 필요하다. 그러므로 routing table을 적은 데이터로 구분하기 위하여 Routing Table엔 network address와 interface가 매핑되어있는데 가야할 주소의 네트워크 주소만 추출한다면 table을 통하여 알맞은 네트워크로 보내줄 수 있다.
그러면 어떻게 네트워크 주소만 추출할 것인가? network mask를 이용하면 된다.
- 각 클래스에 따라서 netid만 1로 설정한 후 목적지 주소와 and(&)연산하여 네트워크 주소를 추출할 수 있다.
- A Class : 11111111.00000000.00000000.00000000
- B Class : 11111111.11111111.00000000.00000000
🖥️ 서브넷
네트워크의 시작주소를 이용하여 어느 네트워크에 해당 packet이 존재하는지 알 수 있다. 그 속의 네트워크도 많으므로 네트워크 속에서 또 그룹화를 하는 것 서브넷이라한다.
- Destination 주소를 서브넷의 비트까지 포함하여 subnet mask를 이용하면 그 주소가 있는 서브넷의 주소를 알 수 있다.
만약 4개의 주소가 필요하다? 4<=22 따라서 2개의 비트가 필요하다.
만약 10개의 주소가 필요하다? 10<=24이므로 4개의 bit가 필요하다.
- 141.14.0.0/16인 네트워크가 4개의 서브넷으로 구성된다면 구분을 위해서는 2개의 비트가 더 필요하고 총 구분을 위한 비트는 18비트가 필요하게 된다.
- 만약 destination 주소가 141.14.90.27일 때 해당 서브넷의 주소는 141.14.01011010.27 & 256.256.11000000.0(18bit짜리 subnet mask) 연산을 진행한다. 이 연산을 통하여 해당 서브넷의 주소는 141.14.64.0/18임을 알 수 있다.
🖥️ Classless Addressing
그냥 subnet만 이용하는 것은 주소고갈문제의 궁금적인 해결방식이 되지 못한다. 단기적으로 봤을 때의 해결방안이 classless addressing이다.
- Variable-Length Blocks
- Two-level Addressing
- Block Allocation
- Subnetting

byte ⋅ byte ⋅byte ⋅byte / n
✏️exam 5.25
230.8.24.56이 속한 네트워크의 block
- 230.8.00011000.00111000
- Prefix length : 16
- 230.8.0.0 - 230.8.255.255
- Prefix length : 20
- 230.8.0001 1000.0 - 230.8.0001 1111.1111 1111
- 첫주소 : Prefix제외 주소 모두 0
- 마지막주소 Prefix제외 주소 모두 1
✏️ exam 5.27
167.199.170.82/27가 속해있는 네트워크의 주소의 수와 첫번째주소, 마지막 주소를 구하여라
- 167.199.170.01010010
- 255.255.255.11100000
- 네트워크 속 주소의 수 : 2(32−27)=25=32
- &연산 : 167.199.170.01000000(64)
- 마지막 주소 : 167.199.170.01011111(95)
✏️ exam 5.32
130.34.12.64/26이 4개의 서브넷을 구성하고 있다.
- 4개의 서브넷 → 2개의 비트 - 총 비트 28 비트
- 130.34.12.0100 0000 / 28 - 130.34.12.0100 1111 / 28
- 130.32.12.0101 0000 / 28 - 130.34.12.0101 1111 / 28
- 130.32.12.0110 0000 / 28 - 130.34.12.0110 1111 / 28
- 130.32.12.0111 0000 / 28 - 130.34.12.0111 1111 / 28
✏️ exam 5.33
- 이 문제가 다른점. 그동안은 몇개의 subnet으로 이루어졌는가가 기준이었지만 이번에는 한 블럭당 몇개의 주소로 이루어져야하는가로 이루어짐 → 오른쪽에서부터 부여
14.24.74.0/24를 2개의 subnet으로 나누는데 120, 60개의 주소로 나누어야한다.
- 120개의 주소 - 7bit가 필요하다.
- Prefix Length = 32 - 7 = 25
- 14.24.74.00000000 / 25 - 14.24.74.01111111 / 25
- 60개의 주소 - 6bit가 필요하다.
- 14.24.74.10000000 / 26 - 14.24.74.10111111 / 25
✏️ exam 5.35
190.100.0.0/16으로 시작하는 네트워크가 있다. 이때 다음과같이 세개의 그룹으로 나누려한다.
- 첫번째 그룹 : 64명의 고객이 각각 256개의 주소를 원한다.
- 두번째 그룹 : 128명의 고객이 각각 128개의 주소를 원한다.
- 세번째 그룹 : 128명의 고객이 각각 64개의 주소를 원한다.
- 첫번째 그룹 : 64명의 고객 + 256개의 주소 = 26 + 28 → 총 14개의 비트를 할당해 주어야한다. (그룹화)
190.100.0000 0000. 0000 0000 / 16에서 14비트를 할당하면
190.100.0000 0000. 0000 0000 / 18이고 subnet이 64개 필요하므로 해당 비트에서 왼쪽으로부터 6비트가 할당되어야한다.
- 190.100.0000 0000.00000000/24가 서브넷의 첫 주소가 된다. (subnet 분할)
190.100.0000 0000.0000 0000/24 - 190.100.0000 0000.1111 1111/24
190.100.0000 0001.0000 0000/24 - 190.100.0000 0001.1111 1111/24
...
190.100.0011 1111.0000 0000/24 - 190.100.0011 1111.1111 1111/24이 된다.
이런 식으로 진행하면 된다...
Special address
all-zero address
- 클라이언트는 네트워크 부팅과정에서 DHCP 서버를 이용하여 IP주소를 할당받을 수 있다.
- 할당받기 전에는 주소가 없기에 이때 해당 기기의 IP주소 즉, Source는 0.0.0.0으로 할당한다.
limited-broadcast address
- Destination 주소를 모두 1로 설정하여 수신자가 다수이거나 수신자를 모를때 모두에게 packet을 전송하여 맞는 주소는 이 packet을 송신하게된다.
loopback address
- Destination의 주소가 127.x.y.z와 같이 127로 시작하는 주소로 모두 잘 실행되고 있는지 테스트하기 위하여 이용된다.
사설망 주소
- 10.0.0.0/8 , 192.168.0.0/16
directed broadcast address
- Suffix의 비트를 모두 1로 설정하여 브로드캐스트용이다.
- 221.45.71.255/24 → 221.45.71.0/24의 모든 기기들에게 packet이 전송된다.
🖥️ NAT (Network Address Translation)
- Problem : 사설망에서 서버로 packet을 보낼때, 사설망의 주소는 해당 네트워크의 내부에서만 구분이 가능한데 외부 네트워크에서는 사설망의 주소만으로는 어느 네트워크에서 왔는지 다른 네트워크에서는 알 수 없다.
- 이때 이용하는 것이 NAT이다. NAT는 NAT translation table을 가지고 있는데 이는 WAN 쪽의 주소와 LAN 쪽의 주소를 매핑하여 저장하고있어 packet의 전송이 원할하게 이루어질 수 있다.
- 사설망 PC 10.0.0.1이 128.119.40.18, 80에게 packet을 보낸다.
- S : 10.0.0.1, 3345
- D : 128.119.40.186, 80
- NAT translation table에서 사설망에게 WAN쪽 주소를 부여한다.
WAN | LAN |
---|
138.76.29.7, 5001 | 10.0.0.1, 3345 |
NAT를 통과하면 datagram의 source address가 변환된다.
- S : 138.76.29.7, 5001
- D : 128.119.40.186, 80
- destination으로부터의 응답이 전달된다.
- S : 128.119.40.186, 80
- D : 138.76.29.7, 5001
- NAT을 통과하며 다시 WAN쪽 주소는 사설망 주소로 변환된다.
- S : 128.119.40.186, 80
- D : 10.0.0.1, 3345