남이 읽는 CS/네트워크

[네트워크 2편] IP 주소 체계

배발자 2022. 8. 22.
반응형



안녕하세요!! 배씨입니다~ 😁😁

오늘 저희가 배울 주제는 꼭 알아야 하는 개념 중에 하나랍니다.
글 구성을 간략하게 잡아봤는데 할 얘기가 너무 많아요...ㅠㅠ

암튼! 상당히 많은 내용을 포스팅 해야해서 지루할 수 있으니 예시를 많이 들어가면서 설명해드릴게요 :)

.
.
.

 

스타크래프트 화면



저는 게임을 잘 안하는데 정말 가끔 하는 게임이 초2 때 처음 배웠던 스타크래프트거든요?
스타크래프트에 접속하면 위의 사진처럼 가장 먼저 보이는 것이 근거리 통신망 [LAN] 이라는 것이 있는데 같은 네트워크 대역에서 통신을 하는 거에요. 그러니까 같은 공유기를 사용하는 친형과 저는 부모님께서 잠든 시간에 몰래 LAN에 접속해서 게임을 자주 했었습니다ㅎㅎ

그러면 다른 네트워크를 사용하는 세상 사람들과 통신은 못하겠죠???

위의 사진에서 Battle.net 이라는 곳은 다른 네트워크 대역을 사용하는 사람들과 게임을 할 수 있는 채널인데, LAN (Local Area Network) 의 개념에서 더 넓은 세상의 WAN (Wide Area Network) 의 개념으로 접근해야 한다는 거죠! ㅎㅎ


LAN & WAN

 

출처 : https://velog.io/@roo333/Introduction-to-Networking-Network-Fundamentals-Part-1-2



IP 주소 체계에 들어가기에 앞서 LANWAN에 대한 개념을 알고 가셔야합니다!

먼저 LANLocal Area Network의 줄임말로 근거리 통신망입니다.
간단하게 설명드리면 아까 설명드렸듯이 집에 공유기 하나씩 있죠?? 그 공유기를 통해 여러 기기들이 한정된 공간에서 사용할 수가 있잖아요?? 그것이 LAN 개념인거죠!ㅎㅎ

WANLAN과 LAN 을 연결하는, 즉 서로 멀리 떨어진 지역의 네트워크를 연결해주는 것이죠!
즉, 집과 집, 회사와 회사, 나라와 나라, 대륙과 대륙을 연결해주는 거에요~

우리가 지금 배우고자 하는 네트워크 계층(3계층)멀리 떨어진 곳에 존재하는 네트워크까지 어떻게 데이터를 전달할 지 제어하는 일을 담당합니다ㅎㅎ

그렇다면 우리가 데이터를 주고 받을 때 다른 네트워크의 주소라던지 자신이 속한 네트워크 주소라던지 뭔가 필요하지 않겠어요??

만약 있다면 네트워크 계층에서는 어떠한 주소 체계를 가지고 있을까요?? ㅎㅎ

궁금하시죠???

" [네트워크 2편] IP 주소 체계 " 설명 시작합니다!

 

.
.
.

 




LAN 에서의 통신은 MAC 주소로 통신할 수 있지만 다른 네트워크 대역에는 데이터를 보낼 수 없어요~
그래서 MAC 주소가 아닌 네트워크를 식별할 수 있는 다른 주소가 필요하답니다!

그 주소를 "IP 주소"라고 말을 해요! ㅎㅎ
즉, 다른 네트워크에 속해있는 컴퓨터의 IP 주소를 안다면 그 목적지까지 데이터를 보낼 수가 있다는 거죠. 그리고 데이터를 어떤 경로로 보낼지도 결정해야하는데 이렇게 어떤 경로로 데이터를 보낼지 결정하는 것"라우팅"이라고 해요!

라우팅이 뭐냐구요?? 네트워크 "7번째 주제 [라우팅 알고리즘]" 이니까 다음주에 제 페어분께서 포스팅 해주실겁니다!ㅎㅎ (cs 스터디 분들만 해당 ) 😎😎

 

저번에 제가 [네트워크 1편] OSI 7계층 & TCP/IP 4계층 설명을 하면서 "캡슐화"라는 개념을 언급했어요!
그리고 상위 계층에서 하위 계층으로 캡슐화 과정을 거치면서 데이터 앞에 "헤더"라는 계층의 프로토콜 정보가 붙는다고 했었잖아요?ㅎㅎ

그렇다면 3계층 (네트워크 계층) 에서 붙여지는 헤더가 뭐였죠?? IP 헤더 (IP 프로토콜의 정보) 라고 말씀드렸습니다 ㅎㅎ

상위 계층에서 내려온 데이터 앞에 "IP 헤더"가 붙고 해당 계층의 PDU를 "패킷"이라고 부른다고 했어요~

*모르면 복습하고 오세요 ㅎㅎ


IP 프로토콜에서는 현재 IPv4의 주소 체계를 사용하고 있어요~
또한, IPv4보다 월등히 많은 수의 IP 주소를 할당할 수 있는 IPv6도 존재합니다.

먼저 일반적으로 사용되고 있는 IPv4에 대해 살펴보도록 하겠습니다ㅎㅎ


IPv4

 

출처 : https://docs.microsoft.com/ko-kr/azure/rtos/netx/chapter3



위의 그림을 보시면 IPv4 헤더 정보입니다.
뭐 이것저것 되게 많네요! 비트에 대한 설명을 하나하나 다 하면 포스팅이 너무 길어질 거 같아서 질문해주시면 답변해드리겠습니다! 저기서 중요한 점은 32-bit Source IP Address32-bit Destination IP Address 가 보이시나요???

일단! IP 헤더 정보에는 "출발지 IP 주소""목적지 IP 주소" 정보가 들어가있다!!
그리고 출발지와 목적지 IP 주소는 "32bit로 구성되어있다" 라는 것을 생각하시면 됩니다 ~

그렇다면 32 bits 로 나타낼 수 있는 주소의 수는???

그쵸! 약 43억개입니다! 😎😎


IPv6

 

출처 : https://www.juniper.net/kr/ko/research-topics/what-is-ipv4-vs-ipv6.html


위의 그림은 IPv6의 헤더 정보입니다!

현재 세계 인구가 벌써 77억명 정도 되더라구요!😲😲
그 많은 사람들 속에서 네트워크 통신은 얼마나 활발히 이루어지겠어요~

수많은 IP 주소가 있을 것이고 언젠가는 "IPv4 로 나타낼 수 있는 43억개의 IP 주소는 언젠가는 부족해진다"라는 거죠!
그래서 IPv6 라는 개념이 도입되게 됩니다.

위의 그림을 보시면 IPv6목적지 주소와 출발지 주소가 128비트로 되어져있네요??
즉, IP 주소를 340 '간' 개를 만들 수 있다고 하더라구요.

저는 '조' 단위가 넘어가면 사실 잘 몰라요.. '간' 이라는 단위는 너무 생소한데요..ㅎㅎ
일단 340 '간'은 340조의 1조 배의 1조 배라고 하더라구요. 그냥 거의 무한대겠죠??

사실 십몇년 전부터 IPv4에서 IPv6로 넘어가자는 얘기가 계속 나왔지만 IPv6로 다 바꾸라고 하면 바로 바꿀 수가 있나요?? IPv4 주소체계를 사용하는 장비가 수없이 많고 몇십년동안 써왔던 주소체계를 한번에 뒤엎는건 아무래도 힘들겠죠~

당분간은 IPv4 와 IPv6는 공존해서 사용하게 될거에요ㅎㅎ 그치만 아직까지 일반적으로 쓰는 주소체계는 IPv4라는 점!!

근데 IPv4로 나타낼 수 있는 주소는 43억 밖에 안되는데 좀.. 간당간당한거 아니냐라고 물어볼 수 있겠죠?
지금부터 IP 주소(IPv4) 체계에 대해서 좀 더 깊숙하게 들어갑니다! 조금만 더 화이팅...!

 



* 지금 치킨 먹고있는데 퍽퍽살 좋아하시는 분 계시면 연락주세요..! 저랑 치킨 먹어요.. 퍽퍽살 다 드릴게요

 

1. Classful IP 주소 체계


먼저 Classful IP 주소라는 것은 IP주소의 범위를 각각 클래스별로 나눠가지고 클래스에 맞게 사용하는 IP 주소에요 ㅎㅎ

IPv4 에서 IP 주소의 비트 수는 32개라고 말씀드렸잖아요?? 여기서 32개의 비트를 8개씩 묶어서 4개의 필드를 구성하여 네트워크의 주소호스트 주소를 구분할 수 있어요! 호스트 주소는 PC를 구분할 수 있는 주소라고 생각하세요~

여기서 필드를 옥텟(Octet)이라고도 불리며 각 옥텟은 "." 으로 구분하며 총 4개의 옥텟이 존재하겠네요!

 

클래스 네트워크/호스트 시작 주소 ~ 마지막 주소
A클래스 1번째 / 2,3,4번째 0.0.0.0 (시작) ~ 127.255.255.255 (종료)
B클래스 1,2번째 / 3,4번째 128.0.0.0 (시작) ~ 191.255.255.255 (종료)
C클래스 1,2,3번째 / 4번째 192.0.0.0 (시작) ~ 223.255.255.255 (종료)

 

더보기

A클래스 0.0.0.0 (시작) ~ 127.255.255.255 (종료)

0 0000000.00000000.00000000.00000000 ~ 0 1111111.11111111.11111111.11111111 (2진수)

 

B클래스 128.0.0.0 (시작) ~ 191.255.255.255 (종료)

10 000000.00000000.00000000.00000000 ~ 10 111111.11111111.11111111.11111111 (2진수)

 

C클래스 192.0.0.0 (시작) ~ 223.255.255.255 (종료)

110 00000.00000000.00000000.00000000 ~ 110 11111.11111111.11111111.11111111 (2진수)

 

D클래스 224.0.0.0 (시작) ~ 239.255.255.255 (종료)

1110 0000.00000000.00000000.00000000 ~ 1110 1111.11111111.11111111.11111111 (2진수)

 

E클래스 240.0.0.0 (시작) ~ 255.255.255.255

1111 0000.00000000.00000000.00000000 ~ 1111 1111.11111111.11111111.11111111 (2진수)



일단 A ~ E 클래스가 존재합니다. 위의 표에서는 A~C 클래스만 표시해놨는데 D클래스는 멀티캐스트를 위한것, E 클래스는 실험용으로 남겨둔 것이라고 합니다. 특수 목적을 위한 클래스이기 때문에 그런게 있다 정도만 아시면 됩니다!ㅎㅎ

A 클래스 0.0.0.0 (시작) ~ 127.255.255.255 (종료) 의 범위를 가진다고 적어놨는데 이게 무슨 말이냐!
A 클래스에서는 첫번째 옥텟(맨 앞 8비트) 만 비교해봤을 때 시작: 0 , 종료 : 127 인 것을 알 수 있습니다.

그러면 첫번째 옥텟으로 나타낼 수 있는 주소 128 개가 "네트워크 주소의 개수"라는 뜻입니다. 그리고 나머지 24개의 bits 로 나타낼 수 있는 주소의 수는 2^24인데 해당 영역은 "스트 주소의 개수"라는 뜻이에요!
엄밀히 따지자면 (2^24) -2 개입니다!

(-2 이유는 모두가 1인 경우 브로드캐스트 주소로 사용하고 모두 0인 경우에는 네트워크 주소로 사용하기 때문이라고 합니다! )


다시 말해서 A 클래스는 128개의 네트워크 주소를 구분할 수 있고 각 네트워크마다 16,777,214 ((2^24)-2)대의 PC를 구분할 수 있다는 뜻인거죠ㅎㅎ

B 클래스 128.0.0.0 (시작) ~ 191.255.255.255 (종료)
B클래스는 2개의 옥텟(맨 앞 16비트)이 네트워크의 주소를 의미하고 나머지 2개의 옥텟(뒤 16비트)가 호스트 주소입니다.
즉, (시작) 128.0 ~ (종료) 191.255 의 네트워크 주소를 구분하고 (2^16)-2 만큼 호스트 주소를 구분할 수 있다는 뜻입니다!

위의 규칙을 봤을 때 C 클래스는 어떻게 구분할까요??

앞에 3개의 옥텟(맨 앞 24비트)이 네트워크 주소이고 나머지 8비트가 호스트 주소겠죠?
(시작) 192.0.0 ~ (종료) 223.255.255 의 네트워크 주소를 구분!! (2^8)-2 가 호스트 주소를 구분!!
한 네트워크 당 254 ((2^8)-2)개의 PC를 구분하는 정도면 딱 적당한거 같아요~

보통 많이 쓰는게 C 클래스라고 합니다ㅎㅎ

근데 Classful 방식의 문제점은 클래스에 딱 맞게 쓰다보니 IP 주소가 낭비가 된다는거에요!
그게 무슨말이냐면, C 클래스에서 각 네트워크 대역마다 존재하는 호스트 주소는 254개라고 말씀드렸잖아요?? 만약, 6대의 컴퓨터만 존재하는 PC방이 있다면 6개의  호스트 주소만 할당시키면 되는데 클래스 방식을 사용한다면 200개가 넘는 호스트 주소가 불필요하게 할당된다는 거죠.

그러면 뭔가 변화가 필요하겠죠??

정해진 클래스에 딱 맞게 쓰지 않고!!! "클래스 less하게 써볼까?" 라는 개념에서 나온 것이 "Classless IP 주소체계" 입니다!

 


2. Classless IP 주소 체계


"Classless IP" 주소체계를 배우기에 앞서서 서브넷팅이라는 개념을 알고 가셔야해요!

서브넷팅은 자원을 효율적으로 분배하기 위해 네트워크 영역과 호스트 영역을 분할한다는 것입니다.

서브넷팅을 하기 위해 필요한 것이 서브넷 마스크인데요!
서브넷 마스크는 "IP주소처럼 2진수 32비트로 구성되어있고 10진수로 변환하여 표기"합니다.

2진수로 표기했을 때 1로 시작을 하며 1과 1사이에는 0이 올 수 없다는 규칙을 가지고 있어요!

예를 들어 서브넷 마스크가 255.255.255.248 이라고 가정합시다.

서브넷 마스크 : 255.255.255.248 => 2진수 : 11111111.11111111.11111111.11111000


1로 구성된 부분이 네트워크 주소 영역이고 0으로 구성된 부분이 호스트 주소 영역이라는 뜻입니다!

그러면 한번 적용시켜볼까요?
"IP 주소 : 192.168.0.138" 와 "서브넷 마스크 : 255.255.255.248" 을 가지고 네트워크 영역과 호스트 영역을 나눠볼게요!

IP 주소 3개의 옥텟 192.168.0 을 봤을 때 C 클래스에 해당되는 것을 아시겠죠??

더보기

C클래스 : 192.0.0.0 (시작) ~ 223.255.255.255 (종료)



[2진수로 표현]

11000000. 10101000.00000000.10001010 (IP 주소)
11111111 . 11111111 . 11111111.11111000 (서브넷마스크)
----------------------------------------------------------------------------------

11111111 . 11111111 . 11111111 (기본 C클래스가 가질 수 있는 네트워크 영역)
11111 (사용자가 지정한 네트워크 영역)
000 (사용자가 지정한 호스트 영역)

 

 

 

 


서브넷 마스크를 적용해서 영역을 구분짓는다면 위의 그림처럼 네트워크 주소 영역이 29비트, 호스트 주소 영역은 3비트로 활용될 수 있겠네요!! ㅎㅎ 3비트로 나타낼 수 있는 호스트 주소의 개수는 총 6개가 되겠죠? 그러면 아까처럼 200개가 넘는 호스트 주소를 할당할 필요없이 필요한만큼만 쓸 수 있는거에요!

(아까 네트워크 주소와 브로드캐스트 주소를 써야하기 때문에 -2 를 해줘야한다고 말했죠?? (2^3)-2 = 6개)

 

 

이와 같이 서브넷 마스크는 A클래스, B클래스, C클래스의 네트워크 영역과 호스트 영역을 더 쪼개서 더 효율적으로 서브네팅해주는 것이죠~ 그렇기때문에 C클래스 3옥텟까지만 네트워크를 사용했던 것이 4옥텟 영역의 5자리(2진수)를 네트워크 영역으로 확대시키고 호스트 영역을 3자리(2진수)로 축소하면서 IP 낭비를 어느정도 막을 수 있는 것이죠!

근데 이러한 방식으로 주소를 덜 낭비시킨다하더라도 여전히 IPv4 주소가 부족하다는 문제가 있습니다 ㅠㅠ

예를들어, 14대의 컴퓨터로 운영하는 PC방이 있다고 가정할게요!
그러면 호스트 주소를 14(2^4-2)개를 할당받아서 사용하고 있잖아요?? 근데 컴퓨터 1대를 더 추가하려고 한다면 주소가 부족하니까 네트워크 주소로 쓰던 비트를 하나 끌고와서 호스트 주소에 추가하면 30 (2^5-2) 대의 PC를 구분할 수 있게되죠?? 근데 1대의 PC 주소만 더 추가해주면 되는데 1개의 비트를 더 끌고오기 때문에 기존보다 2배가 많아지잖아요

이것 또한 낭비라는 거에요 ㅎㅎ

그래서 사설 IP 와 공인 IP 개념이 등장하면서 또 한번의 역사가 바뀌게 됩니다

*현재 Classless 한 IP 주소와 사설, 공인 IP를 같이 씁니다.

 


3. 공인 IP & 사설 IP

 

출처 : https://velog.io/@hidaehyunlee/%EA%B3%B5%EC%9D%B8Public-%EC%82%AC%EC%84%A4Private-IP%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90



얼마 전 제 친구 안채는 친구들과 당구장에 놀러갔어요~ 근데 안채는 당구에 관심이 없는지 휴대폰만 하더라구요!
그리고 당구장 사장님께 "와이파이 비밀번호가 뭐에요?" 라고 물어봅니다! 그리고 당구장 와이파이 연결을 성공적으로 했다고 가정해볼게요. 그러면 안채는 던파(?)도 하고 웹툰도 볼 수 있겠죠??

위의 스토리에서 제가 말씀드리고 싶은 개념이 모두 쓰였습니다!

자! 당구장이든 식당이든 보통 인터넷 하나만 신청해서 손님들이 무선으로 와이파이 잡아서 이용하잖아요??
이게 뭔말이냐면 공인 IP 하나를 한달에 몇만원 주고 사는거에요~

그리고 당구장에 있는 안채는 그 공유기랑 연결하는 순간 사설 IP를 할당 받아서 사용하는 거죠 ㅎㅎ
그러면 당구장에 저도 있고 안채도 있고 영훈이도 있는데 3명 다 와이파이를 이용한다면 셋 다 다른 사설 IP 주소를 할당 받게 됩니다~

여기서 중요한 개념은 뭐냐면, 실제 네트워크 세상에는 오로지 공인 IP 주소만 보인다는 거에요.

길거리에 있는 사람들은 당구장 안에 안채가 있는게 보이나요??
아니죠! 당구장이라는 간판은 보일 뿐 당구장 안에 누가 있는지 모르는 것처럼 네트워크 세상에선 당구장의 공인 IP 주소만 보일뿐! 그 내부에 어떤 사설 IP 주소가 있는지는 모른다는 거에요!ㅎㅎ

그러면 여기서 안채가 네이버 웹툰을 볼려고 접속을 하면 어떤 일이 벌어지느냐??!

안채의 사설 IP 주소가 100번지라고 가정하면 먼저 공유기를 찾아가서 말을 해요~
"나 요청 데이터 보낸다~ 사설 ip 주소 100번지 어딘가에 기록해줘" 말을 하고 공인 IP 주소로 변환돼서 네이버 웹툰에 요청을 하게 됩니다! 그러면 네이버 웹툰에서는 "뭐야! 당구장 공인 IP 뭐야뭐야~ 웹툰 보내달라고 ?? 그래그래 알았어 ~ "
그러면 그림 데이터를 다시 당구장 공인 IP 로 전송해주겠죠~~ 아까 외부에서는 공인 IP 주소만 보인다고 했으니까 그 주소까지는 데이터를 보낼 수 있다는 뜻이에요 ㅎㅎ 그러면 네이버 웹툰 측에서는 당구장 공유기한테만 데이터를 보내고 끝내버리는거에요~

그리고나서의 처리는 데이터를 받은 공유기가 하는겁니다! 공유기는 생각하겠죠
"음.. 가만보자~ 아까 사설 IP 100번지 주소를 사용하던놈이... 아!  그  정 없는 안채가 쓰는 휴대폰이구나~ 데이터 받아라~~" 하고 안채 휴대폰으로 데이터를 주는 거죠.

이렇게 공인 IP 하나 당 여러 사설 네트워크 대역이 따로 존재하기 때문에 IP 주소 부족을 어느정도 해소할 수가 있게 된거죠 ㅎㅎ

*사설 IP <-> 공인 IP 로 바꿔주는 것을 NAT이라고 하는데 B팀의 포스팅 내용을 참고해주시면 감사하겠습니다!


 


추가적으로 기본 게이트웨이는 뭐냐면 외부 세상으로 나가는 문이 어딘지를 알려주는 역할을 합니다!
지금 IPv4(사설IP)주소가 192.168.0.138 인 PC에서 다른 네트워크 대역의 데이터를 요청을 한다면 공유기를 거쳐서 가야한다고 말씀드렸잖아요??

그러면 게이트웨이 192.168.0.1 라는 문을 통과해서 WAN의 세상으로 나간다는 거죠ㅎㅎ
즉, 다른 네트워크 대역과 통신하려면 출입구를 통해 나갈 수 있는거고 그 출입구는 192.168.0.1 라고 명시해놓은거죠 :)

만약 게이트웨이가 설정되어 있지 않다면??
같은 네트워크 대역인 LAN에서의 통신은 가능하겠지만 WAN 세상으로 가는 출입구가 없으니까 외부 네트워크와의 통신은 불가능하겠죠! 그냥 인터넷이 안된다는 말이에요~

그래서 기본적으로 IPv4주소, 서브넷 마스크, 게이트웨이! 이 세가지는 네트워크 통신을 하기 위해 필수적으로 설정되어있어야 인터넷이 되는거랍니다ㅎㅎ


포스팅 끝! 😎



다들 도움 되셨나요?? ㅎㅎㅎ
다음 포스팅에서는 면접 단골 질문인 TCP/UDP 에 대해서 자세히 포스팅 할 예정입니다!!


감사합니다!!

 

 

반응형

댓글