CS/네트워크

[네트워크] Network Layer - (2) IP가 뭔데요

sunwoo0111 2025. 5. 26. 20:11

항공대학교 최차봉 교수님의 강의를 참고하여 작성하였습니다.

 

<Internet Protocol Datagram format>

 

지금부터는 Internet Protocol의 주소체계에 대해 알아보자

 

Internet Protocol은 크게 3가지 기능이 있다.

Network Layer - Internet Network Layer

 

인터넷을 활용할적의 Network Layer 구조도이다.

 

1. 라우팅 프로토콜 -> 경로를 결정 ( RIP, OSPF, BGP )

 

2. IP 프로토콜 -> 실제 데이터 전달을 관리

 

3. ICMP 프로토콜 -> Internet Control Message Protocol ( Ping )

=> 네트워크에 디바이스가 여러개가 있을 텐데, 그 디바이스(라우터) 끼리 데이터를 주고 받는 것에 대해 이를 제어하는 Protocol 임.

소통을 할 적에, 네트워크의 어떤 경로로 왔는지, 또 얼마나 걸렸는지, 그 서버가 죽었는지 살았는지 등의 여러가지 entity들을 제어할 수 있음.

 

 

IP 데이터그램 구조

이는 Datagram format이 32bit = 4byte 로 표현되어있는 것을 보아, IPv4임을 알 수 있다.위에 version(IPv4, IPv6, ICMP) 을 확인할 수 있는 공간이 있고, 그 뒤로 데이터(패킷)의 길이와 관련된 데이터들이 저장된다.16-bit identifier 에는 잘린 데이터, 즉 fragement의 ID가 들어가있다. 이를 확인해서 지금 오고가는 패킷들이 동일한 데이터가 잘려서 전송되는 패킷인건지 (한 식구인지), 아니면 아예 다른 데이터인지를 확인할 수 있다. 

flag는 총 3bit로 표현되며, 이는 지금 오가는 패킷의 말단인지를 판단한다. ( 현재 A라는 데이터를 fragmentation 해서 보내고 있는 중이라고 가정할 때, 캡쳐본 상 패킷의 flag가 1일때는 아직 전송중인 패킷... 그러다가 flag가 0인 패킷이 오면 아! 이게 저 A라는 데이터의 마지막 패킷이 도착했구나! 를 알 수 있는 것이다.)

fragement offset은 자른 조각의 순서로써, 이게 몇번째 패킷인지 알 수가 있다. (offset=0이면 그 데이터의 첫 패킷이 왔다는 의미)

TTL(time to live)는 한번 주어진 이후 홉을 지날때마다 계속 1씩 감소한다.

Upper layer 는 이 패킷이 TCP(6) 방식인건지, UDP(17) 방식인건지, 혹은 ICMP(1) 인지를 나타낸다. (network layer의 upper layer니까 Transport layer의 종류를 나타내겠지)

header checksum 은 데이터가 누락되지 않고 잘 오고 있는지를 판단하는 정보.

 

그 아래로 Source IP & Destination IP가 주어진다. 결국 Network Layer는 Host 끼리의 정보 교환이므로 각각의 집주소라고 할 수 있겠다. 이도 IPv4 기준 32bit로 설정되어있는 모습을 확인할 수 있다.

 

그 아래로는 Data가 담겨있는데, 여기서 Overhead의 개념을 좀 더 짚고 넘어가자.

 

만약 IP header 가 20bytes, TCP header가 20bytes 이고, 실제 Data가 100byte라면..?

총 140byte의 데이터가 전송이 되고, 여기서 오버헤드는 40byte이라고 할 수 있다. 결국 오버헤드는 순수한 데이터 위로 각 계층을 지날때마다 붙는 Header 길이의 총합이라고 할 수 있다.

 

Fragmentation

 

근데 데이터를 쪼갠다는게 무슨말일까? 

 

Network link는 정해진 MTU 라는 게 있다. 이 수치를 넘어서면 데이터를 한 번에 와라락 보내는게 불가능하다. (냉장고에 코끼리를 한번에 넣을 수 없는 것 처럼..) 이 MTU는 link layer에 의해서 결정이 된다.

 

처음 데이터가 출발할 때 fragmentation 화 되었던 datagram들이 목적지에 도착해서 offset + identifier에 의해 다시 조합된다. (reaseembled) 절대 중간에 합쳐지는게 아니다..!

 

잘 이해가 안된다면, 이를 좀 가시적으로 도식화해서 보는 절차를 밟아보자.

IP fragmnetation reassemble

위에서 설명했던 Datagram format과 fragmentation 개념을 숙지한 채로 이 그림을 보자.일단 우리는 현재 4000 byte의 데이터를 보내야 하는데, MTU가 1500 byte라 한번에 데이터를 보낼 수가 없는 상황이다. 그러므로 이를 fragmentation 해야한다.

 

MTU가 1500 이므로 length를 1500으로 두고, Datagram format에 있던 16-bit identifier를 임의의 x로 두고, flag와 offset데이터를 활용해 데이터의 순서를 표현한다.

 

좀 더 자세한 그림이 있다.

이런식으로 총 4000 Bytes의 데이터가 MTU만큼 잘려서 전송되는 것이다.길이는 Header와 데이터길이 일 것이고, 아까 설명했듯이 flag = 1일땐 전송중, flag=0일땐 마지막 frag라는 뜻이다.ID도 같은 데이터 그램이 잘려서 오는 것이므로 다 같은 것을 확인 할 수 있다.

 

그런데 여기서 Offset은 8로 나누어진 숫자로 계산을 해야한다.

 

첫 패킷은 offset = 0두번째 패킷은 총 1480(헤더를 뺀 데이터 길이)byte가 전송되었으므로 그 시작점인 1480을 8로 나눈 offset = 185.세번째 패킷은 지금까지 총 1480 + 1480 = 2960 byte 가 전송되었으므로 이를 8로 나누면 offset = 370.

 

로 표현할 수 있다.

 

 

<IPv4 addressing>

이번엔 network layer의 한 종류인 IPv4 를 알아보자.

 

IPv4

IPv4 방식의 IP주소는 32-bit ( 4byte ) 이다. 호스트와 라우터의 주소를 의미한다.

 

그림에서 보면 알 수 있듯이, 라우터는 2개 이상의 인터페이스가 존재하지만, 나머지 호스트들은 단 하나 혹은 두개(무선/유선 인터넷)의 인터페이스만 가지고 있는 것을 알 수 있다.그리고 각각의 IP주소는 각 인터페이스 주소와 연동되어있는 것을 확인할 수 있다.223.1.1.1, 223.1.1.2, 223.1.1.3 -> 223.1.1.4 에 연결되어있음. 

 

이 인터페이스들이 어떻게 이렇게 연결이 되어있느냐 하면..

Switch 포함 그림

저 Host들이 묶여 있는 X 표시 디바이스가 바로 Switch이다. 이에 대해서 MAC 주소라는 개념이 있는데, 이는 뒷 chapter에서 다룬다고 하니 알고만 있자.

 

또 무선으로 연결된 WIFI 인터페이스도 존재한다.

 

<IP address Class>

처음 IP주소가 도입이 되었을 때, 미군에서부터 시작되어 군사적 통신을 위해 이 IP주소가 만들어졌다고 한다. ( 지금은 일반인들도 모두 사용 )

IP 주소는 결국

Network ID + Host ID

로 이루어져 있다. 예를 들어 172.217.24.196 을 보면, Network ID는 172.217 이고 24.196은 Host ID 이다.

IP address Class 표

이 표를 살펴보도록 하자. 처음에는 IP주소를 5가지 클래스로 나누어서 표현했다.

A 클래스 부터 살펴보면, 첫 비트가 0 으로 시작하는 모든 IP주소는 A Class에 해당한다고 정의한 것이다. 그럼 0~8까지의 bit 들중 첫번째 비트는 0으로 고정이므로 나머지 7비트로 Network ID를 표현할 수 있는데, 2^7 = 128 이므로 0~127 까지의 범위를 표현할 수 있는 것이다. 그 뒤로 10, 110, 1110 순차적으로 비트를 늘려가며 클래스를 나눈결과 위 표와 같이 범위를 알맞게 나눌 수 있게 되었다. 나누게 된 이유라 함은, 전 세계에 수많은 미군부대가 있을텐데, Class A 가지고는 128개의 NetworkID 밖에 줄 수 없음에 저런식으로 범위를 늘려 더 많은 IP 주소를 할당할 수 있게끔 늘려나간 것이다.

 

<Subnets>

IP 주소를 할당할 때, 이 IP 주소 자원을 효율적으로 분배하는 방법이다. 만약 나라에서 우리 항공대학교에 대표 IP주소를 부여했다고 했을 때, 이를 단과별 IP주소 -> 학과별 IP주소 -> ... 이런식으로 네트워크를 더 잘라 제한적인 자원을 낭비 없이 아껴 쓸 수 있도록 네트워크를 자르는 개념인 것이다.

Subent

결국 그림에서 Subnet1의 Subnet ID는 "223.1.1" 이 되고, Subnet2의 Subnet ID는 "223.1.2"가 되는 것이다.

이렇게 IP주소를 잘라서 효율적으로 사용함으로써, 라우터의 간섭을 줄이고, 유지보수를 쉽게 하도록 설계되어있다.

 

Subnet 기준으로 IP주소를 자른 모습

기존 Subnetting을 하지 않은 IP주소를 보면, 저런식으로 Network + Host ID로만 주소를 표현했던 방면, subnetting 이 이루어지고 나서는 

Network ID + Subnet ID + Host ID

로 표현한다.

Subent ID가 도입이 되면, 그저 Network ID 산하에 모든 호스트에게 무작위적으로 IP주소를 할당해주는게 아니라, 어떤 조직에게 이만큼의 범위의 IP주소를, 또 어떤 조직에는 이만큼의 범위의 IP주소를 할당하는 식으로 구조화 할 수 있어 체계적으로 IP주소를 할당할 수 있게 된다.

 

위의 172.217.24.196을 예로 들자면, 저 IP주소의 Subnet mask가 255.255.255.0 이고, 이 Subnet Mask와 IP주소를 AND 연산하게 되면 255 와 연산되는 부분은 모두 살아남고, 0인 부분은 0처리 된다. 따라서 이 IP주소의 Network ID는 

172.217.24.0 이 되는 것이다.

 

반대로 Subnet Mask에 1의 보수를 취하면 0.0.0.255 (=0.0.0.FF) 이고, 이를 똑같이 IP주소와 AND 연산을 하면, 그 결과값은 Host ID로써

196이 되는 것이다 ( Netwokr ID 이후의 비트 ).

결국 172.217.24.0 ~ 172.217.24.255 까지의 범위 안에서 Host에게 IP 주소를 할당해줄 수 있다는 것이다.

그런데 여기서 특별한 점이, 구한 범위의 첫 ~.0 IP는 Network의 고유 ID 이고, 마지막 주소 (~.255) 는 Broadcast 주소용으로 남겨놓기 때문에 사실상 Host에게 할당해줄 수 있는 범위는 1~254 까지인 것이다.

 

https://1000hg.tistory.com/31 <- 서브네팅 관련 블로그 참고

 

 

하지만 이렇게 클래스를 나누어 IP주소를 할당하다보니, 슬슬 할당할 IP address의 고갈문제가 초래되었다. 이를 해결하기 위한 방법으로, 4가지를 배울 것인데.

1. CIDR

2. DHCP

3. NAT

4. IPv6

CIDR 까지만 알아보고 다음 포스팅으로 넘어가도록 하자..

 

<CIDR>

Class Inter Domain Routing 으로, 이는 클래스 별로 나누는 것이 아니라 비트별로 나눈다.  

CIDR

IPv4 기준 총 32bit 짜리 IP 주소를 보았을 때, Subnet part와 host part로 나누어 IP주소를 할당하는 것이다.

 

위 그림처럼 파란색으로 주어진 파트가 Subnet part이고, 총 bit수는 23이기 때문에 200.23.16.0/23 으로 표현한다.

여기서 23은 Network ID의 크기라고 할 수 있다.

 

아래 문제를 살펴보자. 만약 300 명의 호스트에게 IP주소를 할당하기에 가장 적합한 Subnet portion은 무엇일까?

-> 2^8 < 300 < 2^9 이므로 총 9비트만큼을 남겨야 하므로, 32-9 = 23 이다. 따라서 Subnet portion은 23으로 설정할 수 있다.

 

위 그림을 보면 MCI 서버에 11010000.100 까지 Subnet part가 할당된 것을 볼 수 있다. 이는

11010000.10000000 (208.128.~) ~ 11010000.10011111 (208.159.~) 까지의 범위가 MCI 서버의 포함 범위라고 할 수 있다.

나머지 아래 할당된 서버들도 이런식으로 구조화가 되어있는 것을 볼 수 있다!

 

다음 포스팅에서는 IP 고갈문제를 해결하기 위한 방법 DHCP와 NAT, 그리고 IPv6에 대해서 써보겠습니다

 

다들 화이팅 용용용용용용용용용용용용용용