일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 리액트
- 자바스크립트
- MySQL
- writeup
- 워게임
- 인공지능
- 회귀 수식
- 어셈블리어
- 웹해킹
- 리버싱 문제
- 리눅스
- 백준
- 웹
- abex crackme
- C언어
- CodeEngn
- html
- 머신러닝
- 컴퓨터 구조
- 해킹
- 리버싱 워게임
- 보안
- sql injection
- 백준 알고리즘
- 알고리즘
- 리버싱
- 넘파이
- webhacking
- php
- webhacking.kr
- Today
- Total
인공지능 개발일지
[Network] MAC/IP 주소와 서브넷 마스크 본문
안녕하십니까~
이번 시간에는 네트워크의
주소체계에 대해 알아봅시다.
1. 통신 방식
IPv4와 IPv6을 이해하기 위해서는 통신 방식의 종류에 대해 알아야 합니다.
통신 방식은 아래와 같이 4종류가 있습니다.
통신 방식 | 출발지:목적지 | 목적지 주소 |
유니캐스트(Unicast) | 1:1 | 고정 |
애니캐스트(Broadcast) | 1:1 | 고정X,효율적인 호스트로 유동 |
브로드캐스트(Multicast) | 1:모든 | 로컬 네트워크 내의 모든 호스트 |
멀티캐스트(Multicast) | 1:그룹 | 다수의 호스트 |
유니캐스트는 목적지가 명확히 정해져 있고 실제 대부분의 통신 방식입니다.
애니캐스트는 유니캐스트와 동일한 1:1이지만 가깝거나 효율적으로 통신 가능한 호스트로
목적지가 정해져 있지 않습니다.
브로드캐스트는 주로 상대방의 위치를 정확히 알기 위해 사용됩니다.
멀티캐스트는 사내 방송 혹은 학교 방송 같이 그룹에 속한 다수의 호스트에게 패킷을 전송하는 통신 방식입니다.
이 중 뒤에 나올 호스트 주소가 필요 이상으로 크면 브로드캐스트 시 많은 호스트에게 모두 패킷을 보내야 해서
트래픽이 증가하고 비효율적입니다.
그래서 나온 게 서브네팅으로 효율적인 멀티캐스트를 할 수 있게 해 줍니다.
2. IP주소 종류
IP 주소는 아래와 같이 나눌 수 있습니다.
사설 IP가 어감이 안 좋지만 일반적으로 쓰이는 그 사설의 의미가 아닌 일반적으로 내부망을 구축할 때 사용되는
IP를 말합니다. 이 사설 IP는 기본적으로 인터넷이 안 되지만 NAT라는 장비를 통해 공인 IP로 변경하여
인터넷에 접속할 수 있습니다.
고정 IP 같은 경우는 쇼핑몰 홈페이지같이 서버를 구축하여 IP가 DNS(Domain Name System)으로 지정되어
변경하면 안 되는 경우를 말합니다.
이 파트는 간단히 이해하고 넘어가면 됩니다.
3. MAC 주소 (MAC Adress)
먼저 IP 주소는 논리적인 주소라고 하고 MAC 주소는 물리적인 주소라고들 합니다.
이 MAC 주소는 OSI 7 계층 중에서 2 계층(데이터 링크)에 해당합니다.
또한 물리적인 주소라는 것은 시리얼 넘버처럼 변경할 수 없게 하드웨어에 고정되어 출하되므로
제조업체에서 할당하는 주소입니다.
그런데 제조업체가 다 주관하는 것은 아니고 국제기구 IEEE에서 주소 풀을 제조사에 할당해주면
제조사는 그 풀 안에서 자체적으로 MAC 주소를 할당해 줍니다.
MAC 주소는 48비트, 16진수 6자리로 표현됩니다. 이 6자리는 앞의 세 자리(OUI)와
뒤의 세 자리(UAA)로 나뉩니다.
- OUI: 앞의 세 자리, 국제기구 => 제조사에 할당
- UAA: 뒤의 세 자리, 제조사=> 호스트에 할당
4. IP 주소의 클래스
MAC 주소는 16진수 6자리였는데 IP주소는 10진수 4자리 32비트로 구성되어 있습니다.
IP 주소는 네트워크 주소와 호스트 주소로 나뉩니다.
위 네트워크와 호스트 주소를 나눌 때
클래스를 기준으로(클래스 풀) 나누면 클래스 기반이고 과거에 사용되던 방식입니다.
서브넷 마스크를 기준으로 나누는 것이 현재 방식입니다. (클래스 리스)
네트워크 주소는 좀 더 큰 범위이고 호스트 주소는 작은(?) 범위입니다.
예를 들어 부산광역시 XX구 XX동 100동 200호라는 주소가 있을 때 XX구부터 100동까지가 네트워크 주소이고
200호 같이 고유하게 식별 가능한 것이 호스트 주소입니다.
예를 들어 아래와 같이 현재 나의 IP주소가 192.168.123.103일 때
네트워크 주소가 192.168.123이고 호스트 주소가 103이 됩니다.
그래서 이때 와이파이에 연결된 기기들의 네트워크 주소는 동일하고 호스트 주소만 다릅니다.
위와 같이 네트워크 주소를 아는 상황에서 1-255까지 nmap을 이용하여 ping을 날려보면
현재 네트워크에 연결된 호스트들을 확인할 수 있습니다.
여기까지가 네트워크와 호스트 주소의 간단한 개념이고
다시 근본으로 돌아와서 IP 주소는 OSI에서 3 계층에 해당합니다.
일반적으로 알고 있는 4자리의 IP주소는 10진수로 8비트씩 32비트입니다.(IPv4)
그리고 이 네 자리 각각을 "옥텟"이라고 합니다.
4.1 클래스 풀
클래스를 기반으로 호스트와 네트워크 주소를 구분하는 데에는 클래스라는 개념이 도입됩니다.
이때 클래스는 C언어에서의 클래스와는 다른 개념으로 A, B, C, D, E클래스가 있는데
일반적으로 A, B, C클래스만 알면 됩니다.
클래스 | 구분 방법 | 맨 앞 옥탯 |
A클래스 | 첫 번째 자리만 네트워크 나머지 세 자리는 호스트(1:3) | 1~127 |
B클래스 | 두 번째 자리까지 네트워크 나머지 두 자리 호스트(2:2) | 128~191 |
C클래스 | 세 번째 자리까지 네트워크 나머지 한 자리 호스트(3:1) | 192~223 |
참고로 맨 앞 옥텟이 224~239까지면 D클래스입니다.
위의 표에서 보이다시피 클래스 기반의 네트워크는 제일 앞자리만 보고 클래스를 알 수 있고
클래스를 통해 네트워크와 호스트를 구분할 수 있습니다.
이 중에서 가장 많이 사용되는 것은 네트워크 한 개당 256(2^6) 개의 호스트를 가질 수 있는 C클래스입니다.
위와 같이 자리수를 기준으로 주소를 구분하는 클래스 기반(풀)의 주소체계가 있었는데,
클래스 개념 대신 서브넷 마스크로 주소를 구분하는 클래스리스 주소체계가 나왔습니다.
참고로 IPv4는 IP version 4로 이전에 쓰이던 주소체계입니다.
그런데 인터넷이 상용화되면서 IP주소가 부족해져서 나온게
현재 쓰이고 있는 IPv6(IP version 6)입니다.
4.2 클래스리스
결론적으로 말하면 클래스 기반은 클래스를 보고
클래스 리스 주소체계는 서브넷 마스크를 보고
호스트 주소와 네트워크 주소를 구분할 수 있습니다.
예를 들어 192.168.123.1이라는 ip주소와 255.255.255.0이라는 서브넷 마스크가 있으면
세 번째 자리까지(192.168.123)가 네트워크 주소이고 1이 호스트 주소입니다.
다른 예시로는 같은 192.168.123.1이라는 주소에 서브넷 마스크가 255.255.0.0이면
네트워크 주소는 192.168이고 123.1이 호스트 주소입니다.
서브넷 마스크의 역할은 필요 이상으로 큰 클래스를 부여받았을 때
서브넷 마스크를 씌움으로써 필요한 크기로 쪼개는 것입니다.
이를 서브네팅이라고 합니다.
예를 들어 C클래스인 201.222.10.60이라는 ip주소를 부여받았을 때
기본은 2^16 개의 호스트를 가질 수 있는데 이는 일반 네트워크 환경에서는
필요 이상으로 큰 크기이므로 255.255.255.0으로 서브네팅하여
호스트의 규모를 줄여 브로드캐스트 시 트래픽 과부하를 방지해 줍니다.
5. 서브넷 마스크 계산
서브네팅 방법은 책에는 복잡하게 쓰여 있는데 사실 간단합니다.
아래 세 가지 과정을 거쳐 IP주소와 서브넷 마스크가 있을 때 서브넷을 구할 수 있습니다.
(1) 10진수인 IP주소와 서브넷 마스크를 2진수로 바꾸기
(2) IP주소와 서브넷 마스크를 AND연산
(3) AND 연산 한 2진수를 다시 10진수로 바꾸기
위 계산을 하기 위해 세 가지만 알면 됩니다.
바로 AND연산과 2진수와 10진수를 변환하는 방법입니다.
5.1 AND연산
AND 연산은 별게 아니고, 확률과 통계에서 and, or 할 때 그 and입니다.
즉 두 명제에서 둘 다 참이어야 참인 것이죠.
이를 비트에 적용하면 아래와 같습니다.
1&1=1
1&0=0
0&1=0
0&0=0
다 아시겠지만 참고로 1은 참이고 0은 거짓이라는 뜻입니다.
5.2 2진수 <=> 10진수
2진수와 10진수인 수를 변환하는 것은 간단합니다.
먼저 2진수를 10진수(2 => 10)로 변환하려면 각 자리에 2의 거듭제곱을 앞자리부터 내림차순으로 곱해주면
됩니다.
예를 들어 1001 0110이라는 8비트가 있을 때 이를 10진수로 변환하는 과정은 아래와 같습니다.
다음으로 10진수를 2진수(10 => 2)로 변환하는 방법은 10진수의 나머지를 몫이 0일 때까지 구해서
거꾸로 나열하면 된다.(각각 자리와 대응되도록)
아래 예제와 같이 말이다.
이때 60과 같이 8자리에 모자라면 앞에 0을 붙여주면 된다.
5.3 계산 예제
그래서 결론적으로 위의 원리를 이용하여 아래와 같이 서브넷을 계산할 수 있습니다.
Ex)
IP주소: 201.222.10.60
서브넷 마스크: 255.255.255.248
이상으로 IP와 MAC 주소에 대해 알아보았습니다.
혹시 이해가 되지 않는 부분이 있다면 댓글 남겨 주세요!
오늘도 감사합니다:)
'개발 지식 > 네트워크' 카테고리의 다른 글
[Network] 네트워크 첫 걸음(TCP/IP 모델, OSI모델, 프로토콜 등등) (0) | 2021.07.02 |
---|