본문 바로가기

네트워크/네트워크 기초이론

network Layer(3계층)-IP(네트워크와 호스트/서브넷마스크/클래스/서브넷팅/IP헤더)

전에 배웠던 2계층을 생각해보자. 각 네트워크가 토큰링, 이더넷, PPP등 여러가지 방식으로 구성되어있다. 그렇다면 각 네트워크 간에는 통신을 어떻게 할까? 처음 네트워크 시간에 internetwork라는 것을 배웠다. internetwork(줄여서 internet)는 서로 다른 네트워크 망을 하나의 망으로 합치는 개념. 그렇다면 서로 다른 망에서 통신을 위해 사용하는 프로토콜은? 바로 internet protocol 즉, ip이다. 해당 시간은 ip를 배우는 것에 집중하겠다.


ip란 32bit의 이진수로 이루어져있으며, 여덞 비트 마다 .을 찍어 구분한다. 이 여뎖비트를 옥텟이라 지칭하며, 옥텟의 몇개가 네트워크 ID냐에 따라 class를 나눌 수 있다.



네트워크 ID/호스트 ID

class는 나중이 배우고 네트워크 ID와 호스트 ID에 관해 먼저 알아보자. ip는 네트워크 ID와 호스트 ID로 나누어 진다. 여기서 네트워크 ID란 각 네트워크마다 고유하게 할당하는 부분이다. 즉 네트워크마다 네트워크  ID가 다르다. 호스트 ID란 네트워크 안의 호스트마다 고유한 부분이라고 생각하면 된다. 각 호스트마다 호스트 ID가 다르며 같은 네트워크에서 호스트 ID는 유일하다.


예시를 하나 들어보자.

저번 2계층에서 배운 것과 같이 이더넷으로 구축한 네트워크가 2개가 있다.

각각을 이더넷1, 이더넷2라고 생각해보자.

그리고 이더넷 1에는 2대의 컴퓨터가 이더넷 2에는 3대의 컴퓨터가 있다고 가정하면

IP는 이와 같이 할당 할 수 있다.

이더넷 1과 이더넷 2는 서로 다른 네트워크 즉 네트워크  ID가 달라야한다.

세번째 옥텟까지가 네트워크 ID라는 가정 하에 이더넷 1에는 192.168.1.0, 이더넷 2에는 192.168.2.0 대역의 IP를 할당해줄 수 있다.

이더넷 1에는 2대의 컴퓨터 즉 호스트가 있다. 같은 네트워크에서 각 호스트들은 호스트 ID가 달라야 한다.

그렇다면 이더넷 1의 컴퓨터 두 대는 192.168.1.1, 192.168.1.2 두 가지 IP를 할당 할 수 있다.

이더넷 2에는 192.168.2.1, 192.168.2.2, 192.168.2.3 두 가지 네트워크를 할당 할 수 있다.(참고로 호스트 ID는 0부터가 아닌 1부터 시작한다.)



*호스트 ID가 0이면 해당 IP는 네트워크 대역을 나타낸다. 

 반대로 호스트 ID가 모두 255이면 해당 IP는 브로드캐스트를 나타낸다. 브로드 캐스트는 해당 네트워크 대역의 모든 호스트에게 메시지를 보낼   때  사용한다.

 결국 호스트 ID가 모두 0인 부분과 호스트 ID가 모두 255인 부분은 IP 할당에서 제외한다.


 Ex) 세번째 옥텟까지 네트워크 ID라 가정했을 때 192.168.100.0은 192.168.100으로 시작하는 모든 IP를 대표하는 대역이다. 

      192.168.100.255는 192.168.100으로 시작하는 모든 IP에게 메시지를 보낼 때 사용한다. 


서브넷 마스크

그렇다면 IP에서 어디까지가 네트워크인지 어떻게 알 수 있을까? 바로 서브넷마스크를 통해 알 수 있다.

서브넷 마스크란 어디까지가 네트워크 ID를 나타내는 비트이다. 네트워크 부분을 1, 호스트 부분을 0으로 나타낸다.

1.1.1.1 이라는 네트워크를 이진수로 나타내면

0000 0001 . 0000 0001 . 0000 0001 . 0000 0001 나타 낼 수 있다. 여기서 세번째 옥텟까지를 네트워크 ID로 나타내고 싶으면

1111 1111 . 1111 1111 . 1111 1111 . 0000 0000 으로 나타 낼 수 있다. 만약 두번째 옥텟까지를 네트워크 ID로 나타내고 싶다면

1111 1111 . 1111 1111 . 0000 0000 . 0000 0000 으로 나타 낼 수 있다. 보통 IP는 가독성을 위해 십진수로 나타낸다. 그렇다면

     255     .     255      .     0         ,       0       로 바꿀 수 있다.


서브넷 마스크를 더 간편하게 표기하기위해 prefix 방식을 쓰기도 한다.

해당 방식은 ip 뒤에 네트워크가 몇 비트인지 /십진수 형식으로 써주면 된다.

1.1.1.1 255.255.0.0   ------->    1.1.1.1/16 으로 나타 낼 수 있다.

1.1.1.1 255.255.0.0   ------->    1.1.1.1/24  로 나타 낼 수 있다.




클래스

ip는 전 세계적으로 사용하는 유한한 자원이다. 그렇기에 해당 자원의 관리 효율성을 높이기 위해 각 클래스로 나눈다.


A class: 1.0.0.0 ~ 127.255.255.255 까지를 나타내며, 첫번째 옥텟까지만 네트워크 ID이다. 즉 1 ~ 127로 시작하는 IP는 모두 서브넷 마스크가 255.0.0.0 이라고 생각하면 된다.

 

A class 주소 범위(이진수) -> (0000 0000 . 0000 0000 . 0000 0000 . 0000 0000   ~  0111 1111 . 1111 1111 . 1111 1111 . 1111 1111)        

 


B class: 128.0.0.0 ~ 191.255.255.255 까지를 나타내며, 두번째 옥텟까지가 네트워크 ID이다. 즉 128 부터 191로 시작하는 IP는 모두 서브넷 마스크가 255.255.0.0 이라고 생각하면 된다.


B class 주소 범위(이진수) -> (1000 0000 . 00000 0000 . 00000 0000 . 00000 0000  ~  1011 1111 . 1111 1111 . 1111 1111 . 1111 1111) 



C class: 192.0.0.0 ~ 223.255.255.255. 까지를 나타내며, 세번째 옥텟까지가 네트워크 ID이다. 즉 192 부터 223으로 시작하는 IP는 모두 서브넷 마스크가 255.255.255.0 이라고 생각하면 된다.


C class 주소 범위(이진수) -> (1100 0000 . 0000 0000 . 0000 0000 . 0000 0000  ~  1101 1111 . 1111 1111 . 1111 1111 . 1111 1111)



해당 클래스들은 일반 유저에게 할당해주는 주소이다. A class는 가장 많은 호스트를 할당 할 수 있어 보통 규모가 큰 국가기관에 할당한다. B 클래스는 중간규모  C class는 소규모 기관에게 할당해준다.


그러나 반대로 A class는 네트워크 수가 적어 많은 기관에게 할당해줄 수 없지만 C class는 네트워크 수가 많아 많은 기관에게 할당해 줄 수 있다.


D class는 앞 자리 수가 224~239에 해당하며 멀티캐스트 주소로 사용된다.


* 캐스트 방식

- 유니캐스트: 특정 호스트 한명을 선택해 통신 할 떄 (가장 대중적인 방식)

- 브로드캐스트: 해당 네트워크 대역 전체에 메시지를 보내고 싶을 때  (ex.  192.168.100.0 대역 모두에게 )

- 멀티 캐스트: 해당 네트워크의 일부분에게만 메시지를 보내고 싶을 떼


E class는 앞 자리 수가 240 ~ 255에 해당하며 연구용 주소로 사용된다.



그 외에 특수 목적 네트워크


0.0.0.0/8 -> 첫번째 옥텟이 0으로 시작하는 네트워크는 전 세계 네트워크 전체를 뜻한다.

127.0.0.0/8 -> 첫번째 옥텟이 127로 시작하는 네트워크는 loopback 주소를 뜻한다.

* loopback 주소는 자기 자신의 주소를 뜻한다. 즉 내가 나를 부르고 싶을 때 사용하는 주소이다.

169.254.0.0/16 -> 168.254로 시작하는 주소는 IP주소를 할당받지 못했을 때 사용하는 주소이다. 즉 ip가 없어 통신이 불가능한 장비들끼리는                         169.254 대역을 받으므로 서로 통신이 가능하다.

10.0.0.0/8 -> A class에서의 사설 ip주소이다. 사설 IP주소는 내부 망에서만 사용하는 주소를 뜻한다. 공인 ip주소는 다른 네트워크 대역에서 사용하는                   주소를 뜻한다. 만약 내부망에서 인터넷과 같은 외부망으로 나가야한다면 NAT라는 기술을 사용해 사설 ip를 공인 ip로 변환시킨다.

172.16.0.0/12 -> B class에서의 사설 ip주소이다.

192.168.0.0/16 -> C class에서의 사설 ip주소이다.




서브넷팅

ip는 유한한 자원이기에 절약할 필요가 있다. 만약 내가 가지고 있는 ip는 하나의 대역인데 망 두개에 ip를 할당해주고 싶으면 어떡할까? 바로 서브넷팅을 사용허면 된다. 서브넷팅이란 호스트 ID의 일정 부분을 네트워크 ID로 전환시켜 네트워크 대역 수를 늘리는 것이다.

서브넷팅이 처음 접할 때 어려운 이유는 ip를 십진수로 나타내기 때문이다. 따라서 서브넷팅을 할 때는 이진수로 바꿔서 생각해주자.


서브넷팅의 예를 들어보자.

만약 내가 1.1.1.0/24 대역의 ip를 갖고있다고 가정하자. 그렇다면 내가 할당할 수 있는 ip는 1.1.1.1 ~ 1.1.1.254 까지이다.

충분한 수의 호스트를 만들 수 있지만 네트워크는 단 하나 1.1.1.0 대역만 만들 수 있다.


1.1.1.0 /24

0000 0001 . 0000 0001 . 0000 0001 . 0000 0000 (ip)  

1111 1111 . 1111 1111 . 1111 1111 . 0000 0000 (서브넷 마스크)        


내가 임의로 할당 할 수 있는 수는 마지막 옥텟의 0000 0000이다. 해당 옥텟을 0000 0000 ~ 1111 1111 사이의 숫자로 바꿀 수 있다.


여기서 서브넷 마스크를 한자리 더 늘려보자.(네트워크 ID 한 자리 증가)


1.1.1.0 /25

0000 0001 . 0000 0001 . 0000 0001 . 0000 0000 (ip)  

1111 1111 . 1111 1111 . 1111 1111 . 1000 0000 (서브넷 마스크)


맨 마지막 옥텟은 내 임의로 바꿀 수 있다. 그렇다는 것은 마지막 옥텟의 첫 자리를 1로 바꿀 수도 있다는 것이다.


1.1.1.0 /25

0000 0001 . 0000 0001 . 0000 0001 . 1000 0000 (ip)  

1111 1111 . 1111 1111 . 1111 1111 . 1000 0000 (서브넷 마스크)


그렇다면 마지막 옥텟의 맨 앞자리를 0 혹은 1로 사용 할 수 있다. 마지막 옥텟의 첫번째 자리까지가 네트워크 ID이므로 두개의 네트워크 대역이 생긴다.


0000 0001 . 0000 0001 . 0000 0001 . 0(네트워크 ID)        +        000 0000(호스트 ID)

0000 0001 . 0000 0001 . 0000 0001 . 1(네트워크 ID)        +        000 0000(호스트 ID)


이것을 십진수로 바꾸면

1.1.1.0000 0000 /25

1.1.1.1000 0000 /25


즉,

1.1.1.0 /25와

1.1.1.128 /25 두가지 대역이 생긴다고 할 수 있다.

(십진수로 생각하면 헷갈린다. 이때는 이진수 0000 0000 -> 0, 1000 0000 -> 128 이라고 생각하자!!)

호스트 ID 한 자리를 네트워크 ID로 할당해줬다. 

따라서 호스트 ID는 8bit -> 7bit

네트워크 ID는 24 bit -> 25bit

해당 ip는 당연히 8+24=32 , 7+25 =32 모두 32bit로 일치한다.

즉 제한된 32bit 안에서 네트워크 ID를 늘리고 그만큼 호스트 ID 부분을 줄이는 것을 서브넷팅이라고 정의 할 수 있다.


그렇다면 호스트 수를 살펴보자

본래 0000 0000 ~ 1111 1111 총 255개 중 맨 앞 0은 네트워크 대역, 맨 뒤 255는 브로드캐스트 주소로 사용한다고 했다.

서브넷팅 한 ip도 역시 이 규칙을 따른다.

즉 첫번째 주소는

1.1.1.0 이 네트워크 대역, 1.1.1.127이 브로드캐스트 대역

그리고 그 사이인 1부터 126까지가 할당 할 수 있는 주소라 할 수 있다.


두번째 주소는

1.1.1.128이 네트워크 대역, 1.1.1.255가 브로드캐스트 대역

그리고 그 사이인 129부터 254까지가 할당 할 수 있는 주소라 할 수 있다.


서브넷 마스크는 종류에 따라 크게 두 종류로 나눌 수 있다. 앞서 배운 서브넷 마스크를 FLSM(Fixed Length Subnet Mask)이라 한다.


간단하게 VLSM(Variable Length Subnet Mask)를 알아보자

VLSM은 서브넷을 한 번이 아닌 여러번을 하는 것이다.


예를 들어, 3개의 네트워크 대역이 필요하다.

그렇다면 간단하게 서브넷 마스크를 /24에서 /26 으로 올리면 호스트의 두 비트를 사용 할 수 있으니 네개의 네트워크 대역을 생성 할 수있다.

0000 0000  -> 0(십진수)

0100 0000  -> 64(십진수)

1000 0000  -> 128(십진수)

1100 0000  -> 192(십진수)

해당 네트워크를 순서대로 할당해주면 세개의 네트워크에 아이피를 할당해 줄 수 있다.


그렇다면 여기서 조건을 추가해보자. 3개의 네트워크 대역을 사용해야하는데 한 네트워크 대역은 호스트 수가 120개이다.

이럴 때는 위와 같이 나누면 문제가 생긴다.

/26 대역의 경우 호스트 수가 62개이다.

0 ~ 63(맨 앞 0과 맨 뒤 63 제외)

64 ~ 127(맨 앞 64와 맨 뒤 127 제외) 

128 ~ 191(맨 앞 128과 맨 뒤 191 제외)

192 ~ 255(맨 앞 192와 맨 뒤 255 제외)

 

그렇다면 120개의 호스트 수를 만족시켜 줄 수 없다.


이럴 땐 한번에 네트워크 대역을 분할하는 것이 아닌 두 번의 서브넷 마스크를 통해 해결한다.



처음에 /25로 서브넷팅한다

그러면 두개의 네트워크 대역이 나온다.


0~127

128~255


그러면 앞에 0 ~ 127 대역을 호스트 수가 120개 네트워크에 할당해준다.


나머지 128 255를 또 서브넷팅 해준다. 그렇다면

1000 0000 /25 대역을

1000 0000 /26

1100 0000 /26 두 가지로 나누어 할당해 줄 수 있다.


이처럼 여러 번의 서브넷팅을 통해 가변적인 서브넷 마스크로 할당해주는 것을 VLSM이라 한다.



IP 헤더

앞에 이더넷 헤더처럼 ip 헤더에도 여러가지를 나타낸다.

아이피 헤더는 이와 같이 생겼다.


ip 헤더에 대한 이미지 검색결과 


Version: ip는 ipv4, ipv6 두가지 버전이 존재한다. 그 중 어떤 버전인지를 나타낸다.

Header Length: 헤더가 어느정도 길이 인가를 나타낸다.

Total Length: 헤더와 데이터 전체 길이를 나타낸다.

Identification: 각 패킷의 식별자를 나타낸다. ip에서 식별자가 필요한 이유는 ip를 분할해서 보내기 떄문이다. 이 때 각 ip가 어느 부분에 속하는지를                   식별자를 통해 알 수 있다.

Flag: 패킷의 분할 여부, 만약 분할되었다면 어느 패킷이 분할된 부분의 마지막에 해당하는 지 등을 나타낸다.

Fragment Offset: 분할된 패킷의 순서를 나타낸다.

TTL(time to live): 패킷의 life time을 나타낸다. 해당 패킷은 일정 숫자의 TTL을 부여 받으며 라우터(네트워크 장비)를 지날 때 마다 1씩 숫자가 떨                           어진다. 숫자가 0이되면 해당 패킷을 폐기한다. 패킷이 무한대로 네트워크 망에서 도는 것을 방지한다.

Protocol: 상위 계층의 프로토콜(TCP or UDP)을 나타낸다. 마치 이더넷의 type과 비슷하다.

Header Checksum: 헤더의 에러를 체크해주는 역할을 한다.


Source/Destination IP Address: 출발지/목적지 주소를 나타낸다.