Earn this, Earn it.

TIL - [OSI 7계층] IP 주소에 대해서 (네트워크 계층) 본문

[개발 공부]

TIL - [OSI 7계층] IP 주소에 대해서 (네트워크 계층)

Narastro 2021. 11. 13. 23:52

OSI 7계층 중 다른 계층에 대한 포스팅은 아래 링크를 참고해주세요! :)

 

물리, 데이터 링크 계층 : https://hanastro.tistory.com/51

네트워크 계층 : https://hanastro.tistory.com/45

전송 계층 : https://hanastro.tistory.com/54

 

 

 

네트워크 계층의 역할과 네트워크간의 연결에 대해 알아보겠습니다!

 

 

OSI 7계층이란?




 

네트워크계층의 역할은?

 

네트워크 간의 통신을 가능하게 하는 것을 말합니다.

추가로 서로 다른 네트워크 간에 데이터를 전송하려면 라우터가 필요합니다.

 

 

 

 

라우터란?

간단한 기능만 알아보면, 데이터의 목적지가 정해지면 해당 목적지까지 어떤 경로로 가는 것이 좋은지 알려주는 기능을 합니다.

여기서 필요한게 바로 IP주소인데요

IP주소란 어떤 네트워크의 어떤 컴퓨터인지 구분할 수 있도록 하는 주소라고 말할 수 있으며

이는 인터넷 서비스 제공자(ISP)에게 받을 수 있습니다.

 

 

IP의 버전?

익히 아시는대로 IPv4와 IPv6가 있죠?

IPv4는 32비트로 이루어져 있으며 총 43억개,

IPv6는 128비트로 이루어져 있으며 340간 개(340조의 1조배)를 가질 수 있다고 하네요.(ㅎㄷㄷ)

 

 

공인IP와 사설IP

IP주소에는 공인IP 주소와 사설 IP 주소가 있습니다. (ISP가 제공하는 것이 바로 공인 IP)

IPv4 주소의 수는 고갈될 수 있으니, 인터넷에 직접 연결되는 컴퓨터나 라우터에는 공인 IP 주소를 할당하고

회사나 가정의 랜에 있는 컴퓨터는 사설 IP 주소를 할당하는 정책이 있습니다. (NAT)

 

따라서 인터넷 서비스 공급자가 제공하는 공인 IP 주소는 라우터에만 할당하고

랜 안에 있는 컴퓨터에는 랜의 네트워크 관리자가 자유롭게 사설 IP 주소를 할당하거나

라우터의 DHCP 기능을 사용하여 자동으로 할당하게 됩니다.

 

 

DHCP란?

Dynamic Host Configuration Protocol로서, IP 주소를 자동으로 할당하는 프로토콜을 말합니다.

 

이미지 출처 : https://math-coding.tistory.com/140

 

IP 주소에 대해서

아까 말씀드린대로 IPv4의 경우 32비트로 이루어져 있는데, 이를 구분하기 쉽도록 10진수로 표시합니다.

또한 8비트(옥텟) 단위로 나눠서 표시하게 되는데

 

2진수로 표현하면, 11000000 10101000 00000001 00001010이라는 주소가

10진수로는 192.168.1.10 라고 표현할 수 있습니다.

 

 

 

 

 

IPv6 기타지식

현재 주로 사용되는 Ipv4는 32비트입니다.

처음에는 이런 주소만으로도 충분했지만 인터넷이 보급되면서 급속도로 고갈되었습니다.

이 대책으로 생겨난 것이 IPv6입니다.

128비트로 확장하여 2의 128제곱이라는 사실상 무제한 ip 주소를 사용 가능하게 되었습니다.

이는 60억 전세계 사람들에게 균등하게 할당해도 1인당 5.6양개를 할당 가능합니다.

이로써 IPv6 네트워크 보급으로 가정에 있는 TV나 에어컨에서도 인터넷을 연결하여 통신할 수 있게 되었습니다.

 

IP주소 클래스

이번에는 IP주소 클래스에 대해 알아보겠습니다.

네트워크 ID를 크게 만들거나 호스트ID를 작게 만드는 등 네트워크 크기를 조정하여 구분 한 것을 말합니다.

아직 이해가 잘 안되죠?

각 클래스를 일단 살펴보겠습니다.

 

A클래스 : 대규모 네트워크

B클래스 : 중형 네트워크

C클래스 : 소규모 네트워크

D클래스 : 멀티캐스트 주소

E클래스 : 연구 및 특수용도

 

A클래스는 처음 8비트가 네트워크ID로 쓰이고 24비트가 호스트ID로 쓰입니다.

그리고 앞선비트는 0으로 시작합니다. (이는 과거 각 클래스를 IP만 보고 구분짓기 위함이었습니다.)

B클래스는 처음 16비트가 네트워크ID로 쓰이고 다음 16비트가 호스트ID로 쓰입니다.

앞선비트는 10으로 시작하며

C클래스는 24, 8비트 / 앞선비트 110으로 시작합니다

 

이미지 출처 : https://devlog-wjdrbs96.tistory.com/287

 

 

네트워크 ID란 네트워크를 구분하는 단위를 말하며

호스트 ID란, 각 네트워크 안에서 장비를 구분하기 위한 주소를 말합니다.

 

 

 

 

 

공인IP와 사설IP

이미지 출처 : https://devlog-wjdrbs96.tistory.com/287

 

 

따라서 가정에서 ipconfig로 확인해보면 주로 192.168.땡.땡을 씁니다.

 

 

 

 

 

 

네트워크 주소와 브로드캐스트 주소

이 두 주소는 특별한 주소로 컴퓨터나 라우터가 자신의 IP로 사용하면 안되는 주소입니다.

네트워크 주소는 호스트ID가 10진수로 0이고

브로드캐스트 주소는 호스트 ID가 10진수로 255입니다. 

이미지 출처 : https://devlog-wjdrbs96.tistory.com/287

 

이미지 출처 : https://devlog-wjdrbs96.tistory.com/287

 

네트워크 주소는 전체 네트워크에서 작은 네트워크를 식별하는데 사용하는 주소입니다.

즉 0이면 그 네트워크 전체를 대표하는 주소가 되는 것이지요

따라서, 192.168.1.1~192.168.1.6 주소를 가진 컴퓨터는 192.168.1.0 네트워크에 있다고 말할 수 있습니다.

 

브로드캐스트 주소네트워크에 있는 컴퓨터나 장비 모두에게 한번에 데이터를 전송하는데 사용되는 전용 IP 주소입니다. 즉, 255로 전송하면 네트워크 안에 있는 모든 컴퓨터가 데이터를 받게 됩니다.

 

그래서 이들을 자신의 IP 주소로 설정하면 안됩니다!

 

 

 

서브넷

 

A클래스는 네트워크 ID가 8비트고 호스트 ID가 24비트이므로 IP 주소를 24비트만큼 (1677만개) 사용할 수 있습니다.

만약 이 네트워크에서 브로드캐스트 패킷을 전송하면 네트워크가 혼잡해질 우려가 있습니다.

이런 대규모 네트워크를 작은 네트워크로 분할하여 브로드캐스트로 전송되는 패킷의 범위 좁힐 수 있는 것이 바로 서브넷팅이라고 합니다. 이로인해 분할된 네트워크를 서브넷이라고 합니다.

 

서브넷팅을 하면 기존에서 네트워크아이디, 서브넷아이디, 호스트 아이디로 구분됨

(호스트id를 서브넷 id로 묶음화?한다는 개념 또는 호스트id를 빌린다는 개념입니다.)

 

 

 

서브넷 마스크란?

네트워크 id와 호스트id를 식별하기 위한 값입니다.

A클래스의 경우는 8비트를 네트워크ID로 쓴다고 했었죠?

만약 서브넷마스크가 255.0.0.0이면 어떨까요?

이말은 즉슨 8비트를 네트워크id, 24비트를 호스트ID로 쓰겠다는 말이므로 A클래스를 그대로 쓰겠다는 말입니다.

B클래스는 255.255.0.0 ...이 기본 서브넷마스크겟죠?

 

 

 

255.0.0.0은 프리픽스 표기법으로 /8  로 쓰기도 합니다. 아래의 예시를 보고 이해해봅시다.

 

 

이미지 출처 : https://code-lab1.tistory.com/34

 

네트워크 주소가 192.168.32.0인 것을 볼 수 있네요

IP주소를 보시면 C클래스인 것 같죠?

서브넷 마스크가 /25입니다. 즉 255.255.255.128이겠네요. 

이것은 비트로 하면 11111111.11111111.11111111.10000000 이 되고

그럼 서브넷으로 1비트를 빌려쓰고 있습니다.

위와 같이 두 개의 서브 네트워크로 나눠서 쓸 수 있겠네요.

 

 

 

 

 

C클래스에서 서브넷 id를 4비트를 쓰게 된다면 서브넷 마스크는 얼마일까요?

 

 

 

그리고 이를 프리픽스 표기법으로 하면?



 

 

라우터에 대해

이미지 출처 : https://yohanpro.com/posts/%EB%9D%BC%EC%9A%B0%ED%84%B0%EC%9D%98%20%EA%B5%AC%EC%A1%B0/

서로 다른 네트워크와 통신하려면 라우터가 필요합니다.

라우터는 네트워크를 분리할 수 있습니다.

192.168.1.0 /24 네트워크와

192.168.2.0 /24 

가 라우터로 연결되어 있다고 하면 위의 그림과 같습니다.

 

 

이미지 출처 : https://yohanpro.com/posts/%EB%9D%BC%EC%9A%B0%ED%84%B0%EC%9D%98%20%EA%B5%AC%EC%A1%B0/

만약 네트워크1에서 2로 데이터를 전송하려면 어떻게 해야할까요?

라우터의 IP주소를 설정해야 합니다. 이것은 네트워크의 출입구를 설정하는 것으로 기본 게이트웨이라고 합니다.

컴퓨터1은 다른 네트워크로 데이터를 보낼 때 어디로 전송해야 하는지 알지 못합니다.

그래서 네트워크 출입구를 지정하고 일단 라우터로 데이터를 전송합니다.

네트워크 1의 출입구는 192.168.1.1로 설정하였네요

네트워크 설정 탭에서 '자동으로 IP 주소 받기' 옵션을 본 적있나요?

이걸  체크하면 네트워크 외부에 접속할 때 사용되는 기본 게이트웨이가 자동으로 설정된다고 하네요 ㅎㅎ

 

 

라우팅

이렇게 기본 게이트웨이가 설정되었다 하더라도 그것만으로는 컴퓨터6에게 데이터를 보낼 수 없습니다. 여기서 필요한 것이 라우팅입니다. 경로 정보가 등록되어 있는 테이블을 라우팅 테이블이라고 하는데 각 라우터의 라우팅 테이블에 경로 정보가 등록되어 있으면 컴퓨터1에서 컴퓨터 6로 데이터를 보낼 수 있습니다.

라우팅 테이블을 등록하는 방법은 수동으로 등록하거나 자동으로 등록하게 됩니다.

라우터 간에 라우팅 정보를 교환하기 위한 프로토콜을 라우팅 프로토콜이라고 합니다. 즉 이 프로토콜은 라우터 간에 경로 정보를 서로 교환하고 그것을 라우팅 테이블에 등록해 나가는 것을 말합니다. 대표적으로 RIP, OSPF, BGP등이 있습니다.

 

 

 

출처 

모두의 네트워크, 길벗

 

출처: https://rcsecurity.tistory.com/4 [리크의보안이야기]