IP 주소

Violet_Evgadn·2023년 4월 26일
0

네트워크

목록 보기
6/37

IP

IP 주소란?

브라우저는 URL을 분석하여 클라이언트의 니즈를 파악하고 Request Message를 만들었다.

이후 브라우저는 메시지를 네트워크에 송출하는 기능을 가지고 있지 않기 때문에 OS에 네트워크를 통해 메시지를 송신해 달라고 의뢰한다.

그리고 이 의뢰 과정에서 도메인 명에 해당하는 IP 주소를 조사한 뒤 OS에 전달해주어야 OS 측에서 Request Message를 어디에 보내야 할지 알게 된다.

그렇다면 IP 주소란 무엇일까?

인터넷이나 LAN은 TCP/IP 개념에 기초하여 만들어졌기 때문에 TCP/IP 네트워크가 어떻게 동작하는지에 대한 먼저 알 필요가 있다.

위 이미지를 보면 알 수 있겠지만 TCP/IP는 "서브넷"이라는 작은 네트워크가 라우터에 메시지를 전달하는 구조로 전체 네트워크가 만들어진다.

서브넷이란 "허브"라고 부르는 기계에 다수의 기기가 접속된 소규모 네트워크라고 보면 된다.

클라이언트가 메시지를 보내면 서브넷 안에 존재하는 허브가 서브넷과 연결되어 있는 라우터까지 이를 패킷 형태로 운반한다.

라우터는 메시지의 목적지를 확인하고 다음에 데이터를 받아야 할 라우터를 판단하여 그 곳에 메시지를 송신하도록 지시한다.

그럼 다시 서브넷의 허브가 메시지를 수신하도록 결정된 다음 라우터에 메시지를 보낸다.

이런 과정이 반복되어 목적지인 웹 서버까지 Message가 전달될 수 있다.

이런 TCP/IP 구조에서 가장 중요한 것은 모든 서브넷에 고유한 주소를 할당하는 것이다.

고유한 주소를 모든 서브넷에 할당함으로써 라우터는 어떤 서브넷에서 메시지가 전달되었는지 확인할 수 있고 동시에 어떤 허브에 메시지를 전달해야 하는지도 알 수 있다.

이때 서브넷에 할당된 고유번호를 "네트워크 번호"라고 하며 서브넷의 허브와 연결되어 있는 기기에 할당되는 번호를 "호스트 번호"라고 한다.

그리고 이 "네트워크 번호"와 "호스트 번호"를 합친 것을 "IP 주소"라고 한다.

아파트 주소로 생각해 보자면 "네트워크 번호"는 "OO 아파트"가 될 것이며 "호스트 번호"는 "OO동 OO호"가 될 것이다.

그리고 IP 주소는 "OO 아파트 OO동 OO호"로써 고유한 값이 될 것이다.

IP 주소 형태

IP 주소는 기본적으로 32 Bit 디지털 데이터로 8 비트씩 점(.)으로 구분하여 10진수로 표기한다.

여기에서 "기본적으로"라고 덧붙인 이유가 있는데, 위 설명은 IPv4에 대한 설명이기 때문이다.

최근에는 IPv4 주소가 고갈되는 문제 때문에 새로 개발된 IPv6 프로토콜을 활용하기도 한다.

(이는 아래서 좀 더 자세히 알아보자)

IP 주소 규칙은 단순히 네트워크 번호와 호스트 번호가 합쳐져 32 Bit를 구성해야 된다는 것만 결정되어 있을 뿐 사용자가 어디까지를 호스트 번호로 간주할지는 정해져 있지 않다.

따라서 호스트 번호로 지정하는 영역에 대한 정보를 IP 주소에 덧붙이는데 이를 "넷마스크"라고 한다.

넷마스크는 네트워크 번호 영역을 1, 호스트 번호 영역을 0으로 나타냄으로써 표기한다.

호스트 번호 값이 모두 0이거나 모두 1일 때는 특별한 의미를 가지게 된다.

호스트 번호 부분 값이 모두 0일 경우 서브넷 자체를 나타내며 모두 1일 경우 기기 전체에 패킷을 보내는 브로드 캐스트를 나타낸다.

그렇다면 몇 가지 예시를 통해 IP 주소 구조를 파악해 보자.

10.11.12.13

먼저 넷마스크 없이 IP 주소 본체부터 확인해 보자.

10.11.12.13으로 표기된 것을 볼 수 있는데 말했듯 IP 주소는 32 Bit 데이터를 8 Bit씩 쪼갠 뒤 점을 통해 구분한 뒤 10진법으로 변환한 것이다.

즉, 위 IP 주소의 원래 값은 아래와 같다.

10.11.12.13 → 00001010.00001011.00001100.00001101 → 00001010000010110000110000001101

10.11.12.13/255.255.255.0

IP 주소 본체에 슬래시 구분자(/)와 동시에 새로운 데이터가 생겼음을 확인할 수 있다.

바로 이 새로운 데이터(255.255.255.0)가 넷 마스크이다.

255.255.255.0을 이진법으로 바꾸면 11111111.11111111.11111111.00000000 임을 알 수 있다.

위에서 말했듯 Netmask의 1은 네트워크 번호, 0은 호스트 번호의 영역이다.
즉, 이 IP는 마지막 8 Bit 영역이 호스트 번호의 영역인 것이다.

이를 좀 더 해석해 보자면 이 PC가 속한 서브넷의 모든 PC는 "10.11.12"라는 네트워크 주소를 가질 것이며 각각의 PC는 "10.11.12.1" ~ "10.11.12.254"까지의 IP 주소를 할당받을 수 있는 것이다.

(10.11.12.0은 Subnet 자체를 나타내고 10.11.12.255는 브로드캐스트를 나타내므로 PC IP 주소로 할당될 수 없음)

그런데 이렇게 "255.255.255.0"으로 나타내니 보기도 불편하고 쓰기도 불편하다.

따라서 이를 좀 더 쉽게 표현할 수 있는데 바로 네트워크 번호 영역의 비트 수를 넷마스크로 표현하는 방법이다.

10.11.12.13/24

네트워크 번호와 호스트 번호를 잘 공부했다면 바로 이해가 가겠지만 네트워크 번호는 항상 IP 주소 앞쪽에 존재하며 호스트 번호는 항상 뒤쪽에 존재한다. 그리고 2개의 영역은 섞이지 않는다.

따라서 네트워크 번호 영역의 비트 수를 알 수 있다면 넷마스크 또한 쉽게 알 수 있다.

11111111.11111111.11111111.00000000(255.255.255.0)을 보면 1의 개수가 24개, 0의 개수가 8개임을 알 수 있다.

네트워크 번호 영역의 비트수는 총 24개이므로 10.11.12.13/255.255.255.0은 곧 10.11.12.13/24로도 표현할 수 있는 것이다.

도메인명과 IP 주소를 구분한 이유

TCP/IP 네트워크 구조에서는 IP 주소를 모르면 상대에게 메시지를 전달할 수 없다.

URL은 IP 주소를 나타내고 있지 않으므로 브라우저가 OS에 메시지 송신을 의뢰할 때 IP 주소를 조사하는 추가적인 단계가 필요하다.

그렇다면 왜 도메인명을 사용하는 걸까?

이는 편의성 문제 때문이다.

사실 URL에 도메인명 대신 IP 주소를 입력해도 정상적으로 서버에 접근할 수 있다.

(단, 웹 서버가 가상 호스트를 사용하거나 IP 주소를 통한 접근을 막았다면 액세스 불가하다)

하지만 "http://123.456.789.123"으로 접근하는 것보다는 "http://www.sample.com"으로 접근하는 게 더 편하며 외우기도 쉽다.

그렇다면 아예 IP 주소 대신 도메인 명을 사용해 목적지로 가는 네트워크 구조를 만들면 되지 않을까?

실제로 윈도우 네트워크 원형인 PC-Networks라는 네트워크는 이름으로 통신 상대를 지정했다.

하지만 이는 효율면에서 매우 비효율적인 방법이다.

IP주소는 32bit(4 Byte)로 주소 크기가 고정되어 있지만 도메인명은 수십 바이트 ~ 255Byte까지 다양한 주소 크기가 존재할 것이다.

일단 길이가 결정되어 있지 않은 데이터를 취급하는 것은 고정되어 있는 데이터를 취급하는 것보다 훨씬 복잡하므로 효율성이 떨어진다.

그렇다고 255 Byte로 주소 크기를 고정시킨다면 메시지 운반 시 낭비되는 공간이 너무 많아질 것이다.

또한 운반하는 데이터 자체가 많아지기 때문에 라우터에 부하가 갈 수 있고 데이터를 운반하는 과정에 더 많은 시간이 소요되며 이는 네트워크 속도를 감소시킬 것이다.

이런 문제를 해결하기 위해 고성능 라우터를 활용하면 된다고 생각할 수 있다.

하지만 조금의 편의성 때문에 성능 향상에 한계가 존재하는 HW 성능을 낭비하는 것은 그다지 좋은 선택이 아니다.

물론 HW 기술은 계속해서 증가하겠지만 그만큼 운반하는 데이터도 커지고 다양해지기 때문에 기술의 발전은 상쇄될 것이다.

결국 도메인 명으로 IP 주소를 찾는 과정이 추가되더라도 도메인 명을 그대로 활용하는 것보다 성능이 훨씬 좋기 때문에 도메인명과 IP주소를 구분하여 활용하는 것이다.

IPv4 VS IPv6

IPv6는 IPv4(현재 인터넷 프로토콜. 위에서 설명한 IP 주소 체계)의 고갈되고 있는 주소 문제와 멀티미디어 서비스 대응 미약 등을 해결하기 위해 나온 차세대 인터넷 프로토콜이다.

IPv6는 총 128 Bit를 사용하는 주소 체계이다.

128 Bit를 각 16 Bit로 나누어 8자리로 만든 뒤 각 자리를 콜론(:)을 통해 구분한다.

또한 1개 구역이 총 16Bit로 되어 있기 때문에 10진법으로는 표현하기에 한계가 존재한다. 따라서 16진법을 사용한다.

IPv4와는 다르게 IP Sec을 자체 지원하여 보안적으로 더 안전하고 Plug & Play가 가능하며 브로드캐스트 주소가 없고 헤더 크기가 고정되어 있는 등 IPv4와 비교했을 때 다양한 차이점 및 개선점이 존재하지만 지금 단계에선 그렇게 중요하지 않으므로 넘어가겠다.

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글