[웹] IP Address

IP Address

본 TIL에 쓰인 책 내용 사진은 제가 구매하여 갖고 있는 책을 찍은 것입니다…! 저작권 문제가 걱정되니 책 사진은 여기서만 봐주세요ㅠ.ㅠ 감사합니다~

1. IP and IP Address

IP 란 통신을 할 때 지켜야할 규약이라는 뜻의 ‘프로토콜’의 종류 중 하나로, Internet Protocol의 줄임말이다.
TCP/IP계층의 관점에서 네트워크 구조를 보았을 때 인터넷 계층에서 쓰이는 프로토콜로, 전송하고자 하는 패킷을 목적지 (서버컴퓨터/클라이언트컴퓨터) 까지 전달할 때 쓰이는 프로토콜이다.

IP와 IP주소에 대해 알아보기 전 먼저 프로토콜이 무엇인지에 대해 간단히 살펴보자.

통신규약과 프로토콜

선생님-학생 간의 커뮤니케이션을 기반으로 하는 학원 수업을 예로 들어보자.
한 강의당 60분짜리 수업을 진행한다고 했을 때 일반적인 수업 진행 방식은 다음과 같다. 우선 선생님이 5분간 학생들 출석을 부른다. 출석을 부른 후 전 수업시간에 내준 숙제를 검사하고 학생들에게 숙제에 대한 질문을 15분가량 받는다. 그리고 40분간 정규 수업을 진행하면 한 수업이 끝난다.

이처럼 서로 (위의 예시로는 선생과 학생) 가 이해할 수 있는 수행 절차가 있을 때 커뮤니케이션은 더욱 원활하고 효과적으로 이뤄질 수 있다. 컴퓨터와 컴퓨터가 통신할 때도 이와 같은 방식을 사용하는데, 이 때 지켜나가야 할 절차나 규약을 프로토콜(protocol) 이라고 부른다.

컴퓨터끼리 통신을 하려면 ‘‘어떤 절차에 따라, 무엇을 보낼 것인가’’ 에 대한 규칙이 필요하다. 또한 전송이 잘 되지 않았을 때 어떻게 대응해야 하는지에 대한 정의도 필요하다.

프로토콜은 눈에 보이지 않는다.

프로토콜은 통신 과정에서의 절차나 규칙이 기술된 ‘안내서’에 불과하다. 그래서 프로토콜 자체는 통신 기능을 구현하고 있다거나 통신 장비처럼 눈에 보이는 형태가 있는 것이 아니다!!
그저 프로토콜(규칙)에 맞게 동작하도록 만들어진 프로그램이나 통신장비, 그리고 데이터 포맷 등이 존재하는 것 뿐이다. 이들이 서로 약속된 방식으로 잘 동작해줄 때 원활한 통신이 가능해진다.

이미지 출처 : 책 - TCP/IP 쉽게, 더 쉽게 (책 너무 좋네요!! 정말!! 🙂)

https://68.media.tumblr.com/372c50dcb4cbbe1314215a38058c0e24/tumblr_ond3lpEzOc1w8w3y8o1_1280.png

(사진으로 찍으니 빨간글씨가 잘 안보여서 다시 덧그렸습니다..)
TCP/IP 계층별로 사용되는 구체적인 대표적인 프로토콜은 추후에 네트워크 계층을 다루며 다시 설명하겠다.

왜 ‘IP Address’이라고 불리는가?

위의 사진에서 보이는 대로 TCP/IP계층은 크게 애플리케이션 계층 / 트랜스포트 계층 / 인터넷 계층 / 네트워크 인터페이스 계층으로 나뉘며, IP는 ‘인터넷 계층’ 에서 사용되는 프로토콜이다.
이 인터넷 계층에서 IP를 준수하며 하는 역할은 바로 통신하는 컴퓨터들을 식별할 수 있도록 어드레스 정보를 덧붙이는 것이다. 이 어드레스 정보를 보고 목적지로 데이터가 전달이 된다. 따라서 IP주소라는 이름을 갖게 되는 것이다.

Request : 클라이언트 컴퓨터(192.168.219.120)에서 웹 서버 컴퓨터(121.78.223.102)로 데이터를 요청한다.
Response : 웹 서버 컴퓨터(121.78.223.102)에서 클라이언트 컴퓨터(192.168.219.120)로 데이터를 보낸다.

그래서 IP Address는…

컴퓨터들이 통신을 하기 위해서 꼭 필요한 컴퓨터의 고유 주소이다.(인터넷이 연결 된 서로 다른 컴퓨터를 구분하는 식별자…) 따라서 인터넷을 할 수 있는 컴퓨터(혹은 모바일 디바이스들)은 모두 고유의 IP주소를 부여받는다. 당연히, 통신을 하기 위해서는 서버 및 클라이언트 컴퓨터 모두 IP주소가 필요하다. (물론 서버도 컴퓨터다!)

https://68.media.tumblr.com/67d2ffc4018d7185ec4d5f4312642e1a/tumblr_onh95tjCBr1w8w3y8o1_1280.png

참고 : 도메인의 IP주소를 알고싶을땐 콘솔창에 ping 주소명 명령어를 쓰면 된다.

https://68.media.tumblr.com/5f51411724773289cb6bf224f3519b8c/tumblr_onh9mdRS5b1w8w3y8o1_1280.png

IP주소의 구조를 보면 느끼겠지만 IP주소는 기억하기 어려운 구조로 이루어져 있다. 네이버에 접속하기 위해 IP주소를 일일이 기억하고 검색해야 했다면 지금처럼 인터넷이 발달하기 어려웠을 것이다. 이러한 바탕이 바로 현재 www.naver.com과 같은 도메인 네임이 생성되는 이유이다. (당연히 주소창에 IP주소를 직접 입력해도 접속이 가능하다.)

여기서 한 가지 유의해야하는 점은, 우리가 도메인을 통해 접속을 하지만, 도메인만으로는 실질적인 접속이 이루어지지 않는다. 도메인을 입력하면 이 도메인이 본래 도메인이 가지는 IP주소로 변환이 되어야 하고, 변환이 된 뒤에야 비로소 IP주소가 실질적인 접속을 가능하게 하다. 마치 핸드폰 전화번호부에 입력된 이름만으로는 전화를 걸 수 없다는 것과 같은 이치이다.

이러한 역할을 가능하게 해주는 것이 바로 DNS(Domain Name System)이다.

DNS를 설명하기 앞서, 위에서 설명한 내용을 그림으로 표현하자면 다음과 같다.

https://68.media.tumblr.com/58020550f39f85bdc65e9afab0517f51/tumblr_onisxwvUHE1w8w3y8o1_540.png

생활코딩 강좌 를 보고 제가 이해한 내용을 바탕으로 다시 재구성하여 그렸습니다.이고잉님 감사합니다 ( _ _)

DNS, DNS서버, DHCP

1. DNS

DNS는 Domain Name System의 약자로, 도메인 이름과 IP주소를 서로 변환하는 프로토콜이다. (@애플리케이션 계층)

2. DNS서버

클라이언트로부터 도메인의 IP주소를 알려달라는 request를 받았을 때 이에 맞는 IP주소를 response하는 서버이다.

[ DNS서버의 계층 구조 - 출처 ]

[DNS서버가 클라이언트의 Request에 질의하는 처리 과정 - 출처]

한 번 Request를 보낸 도메인은 캐시서버에 캐시로 보관되기 때문에 이후 같은 Request가 들어오면 루트 네임 서버로 가지 않고 바로 IP주소를 알려줄 수 있다.

3. DHCP (Dynamic Host Configuration Protocol)

DHCP의 뜻 그대로 LAN 내의 컴퓨터에게 IP주소를 할당할 때 사용되는 프로토콜. 즉, DHCP는 네트워크 내에 속한 호스트(인터넷에 연결된 컴퓨터)들에게 IP주소를 자동으로 부여하여 사람이 직접 IP를 설정하고 관리하는 수고를 덜어준다.

TCP/IP가 제대로 동작하기 위해서는 네트워크 안에 속한 각 호스트들이 고유한 IP를 가지고 있어야 한다. 네트워크 호스트들에 대해 IP주소를 할당하고, 중복되지 않게! 관리하는 작업을 사람이 할 경우 아주 번거롭기 때문에, 이것을 자동으로 해주는 것이 바로 DHCP 서버의 역할이다. 새로운 호스트가 네트워크에 연결되면 사용하고 있지 않은 IP주소를 자동으로 할당한다.

우리가 가정, 회사, 공공장소 등에서 흔히 쓰는 초고속 인터넷 라우터(공유기, 공공장소의 무료와이파이 서비스 등)는 대부분 DHCP서버를 내장하고 있다. 따라서 해당 공유기와 호스트(컴퓨터, 모바일 디바이스 등)를 연결하면 바로 사설IP 를 할당해준다.

IP주소 할당 방법

네트워크에 새로운 호스트가 연결된 직후에는 본인의 IP는 물론이고 DHCP서버의 IP주소 조차도 알지 못하는 상황이다.
따라서 신규 호스트는 브로드캐스팅 방식 을 통하여 네트워크 내의 모든 호스트(DHCP서버 포함)에게 브로드캐스트 방식으로 DHCP 발견 패킷을 보낸다. 그리고 이 패킷을 전달받은 DHCP서버는 신규호스트에게 할당할 IP주소를 알려준다.
단, 이 때의 신규호스트는 아직 IP주소가 할당된 상태가 아니므로 신규호스트에게만 선택적으로 알려줄 수가 없다. 따라서 DHCP서버 역시 브로드캐스팅 방식으로 네트워크내의 모든 호스트에게 사용 가능한 IP를 알려주게 된다.

그림으로 구성된 모습은 다음과 같다. (출처)


공인IP vs 사설IP

우리가 흔히 알고 있는 IP주소 (IPv4 기준)는 다음과 같은 구조를 가지고 있다.

0.0.0.0 ~ 255.255.55.255

이러한 구조는 약 42억개 가량의 IP주소를 가질 수 있다. 하지만 현재 전 세계의 인구가 60명이 훌쩍 넘고, 한 사람이 가지고 있는 디바이스의 갯수가 늘어남에 따라 이 42억개의 IP주소는 턱없이 부족하다. IP주소라는 개념을 처음 도입할 때 까지만 해도 현재와 같이 수많은 디바이스를 통해 인터넷을 이용할 것이라고는 가늠하기 어려웠기 때문이다.

이러한 IP주소의 부족 현상을 해결하기 위해 크게 두 가지 방법이 쓰이고 있다.

방법 1 : IPv6의 도입

IP주소를 늘리자는 근본적인 해결책으로, 기존의 IP주소(8bit. IPv4)형식에서 벗어나 IPv6라는 새로운 형식의 아이피 주소 형태를 만들었다. IPv6과 IPv4 사이의 가장 큰 차이점은 바로 IP 주소의 길이가 128비트로 늘어났다는 점이다. 다음과 같은 구조를 가진다.

s:t:u:v:w:x:y:z

기존 IPv4의 구조와는 달리 각 부분은 16bit로 0부터 65535까지 가질 수 있다. 또한 숫자가 길어질수록 가독성이 떨어지니 주로 16진수를 쓴다. [0,65535] -> [0,ffff] 길이가 늘어난 만큼 더 많은 개수의 IP주소를 사용할 수 있다.

방법 2 : 사설IP의 도입

현재 우리 집에 컴퓨터 세 대를 사용한다고 가정해보자. 세 대의 컴퓨터 모두 인터넷을 사용할 수 있게 하려면 다음과 같은 두 가지 방법을 생각해볼 수 있을 것이다.

생활코딩 강좌 를 보고 제가 이해한 내용을 바탕으로 다시 재구성하여 그렸습니다.

공인IP 주소 (Public IP Address) 는 우리가 흔히 아는 IP주소의 개념대로, 전 세계에서 유일무이하게 독립적인 IP주소를 말한다.

사설IP 주소 (Private IP Address) 가정이나 사내에서 자유롭게 사용 가능한 어드레스로, 하나의 공인IP로 여러 개의 IP를 사용할 수 있다는 것이 사설IP의 핵심 개념이다.
인터넷이나 다른 네트워크에 직접적인 연결이 일어나지는 않아서 (직접적인 연결은 공유기까지만.), 공유기가 닿는 네트워크 안에서 중복으로 인한 주소 충돌만 나지 않으면, 다른 네트워크에서 사용 중인 어드레스와 주소가 중복된다 해도 큰 문제가 없다.
대신, 사설IP주소는 인터넷에 연결 되도 외부에서 접근할 수 없기 때문에 (공인IP를 가진 공유기가 먼저 데이터를 받고, 해당 공유기가 관리하고 있는 호스트들 중 알맞는 호스트에게 대신 전달해주는 과정을 거침) NAT(Network Address Tranlation)와 같은 어드레스 변환 기술을 사용해서 퍼블릭IP주소로 변환해주는 기법이 필요하다. NAT는 대부분의 공유기 안에 이미 포함되어있으므로 공유기가 해당 기능을 수행해주기 때문에 사용할 수 있는 것이다.

Case 1의 경우는 통신사에서 제공하는 케이블선을 컴퓨터 하나 하나에 모두 연결하는 것이다. 세 컴퓨터 모두 독립적인 공인IP를 가지고 있다. 이렇게 바로 통신사 회선을 통해 공인IP를 부여받으면 내 컴퓨터를 서버컴퓨터로 사용할 수도 있다는 장점이 있다. (개발자 기준의 장점이지만요..^^;) 하지만 대부분의 가정은 이런 방식을 사용하지 않는다. 왜냐하면 비용이 공유기 사용에 비해 아주 비싸기 때문이다. 보통 한 회선을 사용하는 데에 한 달에 3~5만원을 지불해야한다고 하고, 3대를 사용한다면 매 달 최대 15만원을 지불해야 하는 비용적인 면의 단점이 있다.

Case 2의 경우는 일반적으로 가정과 공공장소에서 쓰이는 방법이다. 그림을 통해 알 수 있듯 Case1의 경우와 달리, 통신사 회선을 공유기 한 대에만 꽂으면 되니 비용 절감이라는 면에서 이점이 있다.
하지만 앞서 Case1에서 언급한 바와 같이 공유기를 통해 연결된 컴퓨터들은 서버 컴퓨터로 사용할 수 없다. 왜냐하면 서버컴퓨터의 IP주소를 결정할 때 문제가 생기기 때문이다. 공유기를 통해 발급받은 사설IP를, 클라이언트 컴퓨터가 서버에게 request를 보내기 위한 IP주소로 사용하면 안된다. 왜냐하면 앞서 살펴본 개념에 의하면 사설IP는 한 공유기 내의 네트워크 안에서만 독립적이지, 다른 여러 공유기 내의 네트워크 안에 속한 호스트들의 IP와 중복될 수 있다는 사실 때문이다. 그렇다고 해당 호스트가 속한 공유기가 연결된 공인IP를 사용하기에는, 공유기에 데이터가 닿은 그 다음 구체적으로 어느 호스트에게 다시 전달해야 할지 알 길이 없기 때문이다.

그럼에도 불구하고 이러한 문제점은 해결이 가능한데, 바로 포트포워딩이라는 것을 통해 공유기에 연결된 컴퓨터도 서버로 사용할 수 있다. 자세한 방법은 링크를 통해 확인해주세요…:)

그렇다면 포트포워딩 에서의 포트는 무엇일까?

포트

OSI 7계층 vs TCP/IP 계층