본문 바로가기

Web | Network

Web - IP, 포트, 그리고 로컬호스트 (IP, Port, and Localhost)

IP 주소

 

IP 주소란 TCP/IP 프로토콜을 사용한 통신을 할 때, 송신자와 수신자를 구별하기 위한 고유의 주소를 말한다. 그리고 인터넷에 연결된 모든 통신망과 그 통신망에 연겨로딘 텀퓨터에 부여되는 고유의 식별 주소를 의미한다.

 

이 주소는 내부에서 32비스 (4byte) 로 기억되지만, 표기할 때에는 4개의 10진수를 점으로 구분하여 표시한다.

 

loopback이라는 개념이 있다. loopback은 호스트에 할당된 아이피를 의미한다. 즉, 내가 갖고 있는 노트북에서 localhost 또는 127.0.0.1로 서버를 띄울 경우 서버를 띄운 노트북에서만 접속이 가능하다. 핸드폰도 같다. 핸드폰에서 localhost 또는 127.0.0.1로 서버를 띄울 경우 핸드폰에서만 접속이 가능하다.

 

그러나 사설 IP의 경우에는 같은 대역의 사설 IP를 할당받은 모든 기기에서 접속이 가능하다. 그러나 같은 대역의 사설 IP에 붙어있지 않은 경우에는 접속이 불가능하다 (쉽게 말해 같은 와이파이에 붙어있지 않은 경우).

 

공인 IP의 경우에는 어디서나 접속이 가능하다.

 

그렇다면 왜 모두 공인 IP를 사용하지 않을까? 앞서 말했듯 공인 IP는 IPv4, 32bit로 이루어진 주소 체계이며, 이론적으로 부여할 수 있는 주소의 총 수는 42억여 개이다. 따라서, 개수에 제한이 있기 때문에 모두 공인 IP를 사용할 수는 없다.

 

그러나 IP 주소 또한 여러가지가 생길 수 있다. 예를 들어 공유기에서 할당하는 공유기 내의 주소 (192.168.0.XX 등의 주소) 는 공유기 내의 주소이기 때문에 같은 공유기 망 내에서만 접속이 가능하다. 그러나 이 주소는 반쪽자리 주소이다. 왜냐하면 이는 비유하자면 '3동 401호'와 같은 말이기 때문이다. 같은 단지 내에 사는 (같은 공유기 내에 있는) 사람들끼리는 알아들을 수 있겠지만, 외부인에게는 아파트 단지가 어디인지, 어디에 있는지 알려주지 않았기 때문에 제대로 찾아가지 못할 것이다.

 

진짜 IP 주소는 다르게 알아낼 수 있다. 네이버 또는 구글에 ip address 또는 ip 주소라고 검색하면 자신이 현재 속한 IP 주소가 뜨게 된다. 이는 진짜 주소이고, 각 인터넷 회선마다 겹치지 않게 고유한 값을 갖게 된다. 이 주소는 비유하자면 '용인시 기흥구 동백동 동아아파트' 와 같은 말이다. 이제 이 주소와 공유기 내에 할당되는 주소의 값까지 알게되면, 기기에 접근할 수 있다.

 

내부 접속과 외부 접속

웹 브라우저에 http://google.com 이라고 입력했다고 하자. 어떠한 경로를 거쳐 나의 웹 브라우저에 웹 페이지가 보여지게 되는 것인가?

  1. 웹 브라우저는 웹 페이지를 보고자 요청한 현재 컴퓨터의 IP 주소와 주소 창에 입력된 도메인을 갖고 자신의 컴퓨터 LAN 카드를 통해 인터넷 상에서 DNS (Domain Name System) 서버를 찾게 된다.
  2. DNS 서버를 찾게 되면 그 서버에 구축되어 있는 데이터베이스에서 google.com 에 해당하는 IP 주소를 얻고, 그 곳에서 얻은 IP 주소로 해당하는 컴퓨터로 찾아가서 요청을 한다.
  3. 찾아간 컴퓨터에 웹 서버가 설치되어 있다면, 컴퓨터는 요청을 확인하고 해석하여 요청에 맞는 응답을 처리하여 보내준다.
  4. 그 웹 페이지를 보고자 요청했던 컴퓨터로 다시 보내주면 웹 페이지를 받은 컴퓨터는 웹 페이지를 브라우저 위에 띄운다.

이것이 일반적인 외부 접속의 과정이다. 우리는 이러한 과정을 통해 도메인을 사용하여 입력한 후 외부로 나갔다가 다시 응답을 받아 찾아오기 때문에, 이를 외부 접속이라고 부른다.

 

그러나 내부 접속, 즉 localhost에 접속하는 과정은 2번과 3번이 생략된다. 왜냐하면 http://localhost/ 라고 입력했을 때는 IP 주소가 127.0.0.1 (이를 loopback address라고 한다) 로 예약되어 있기 때문에, 2 와 3 번을 건너 뛰고 바로 나의 컴퓨터를 가리키는 가상 IP 주소로 접속하게 되는 것이다.

 

포트 (Port)

그렇다면 포트는 무엇인가? 포트란 호스트에서 실행되고 있는 프로세스를 구분짓기 위한 16비트의 논리적 할당이다. 16비트이기 때문에 0~65536 까지의 숫자를 가진다.

 

하지만 위 설명은 너무 어렵다. 포트는 비유하자면 '문'과 같은 것이다. 피자 배달 연락이 오면 문 1을 열어주면 되고, 택배 배송이 오면 문 2를 열어주고, 친구가 오면 문 3을 열어주는 방식인 것이다. 즉, HTTP 통신을 하고 싶을 땐 80번 포트를 통하여 접속하고, HTTPS 통신을 하고 싶을 땐 443번 포트를 통하여 접속하는 등의 방식인 것이다.

 

포트는 어느 웹사이트에서나 존재한다. 다만 우리가 일반적으로 접속할 때는 이것이 생략되어 있다. 잘 알려진 포트 (Well-known Port) 는 0~1023 사이의 포트를 말하는데, 이는 특정 프로그램에 할당되기로 예약되어 있기 때문에, 해당 번호로는 포트 할당을 할 수 없다. 

 

잘 알려진 포트 중엔 대표적으로

  • DNS - 53
  • HTTP - 80
  • HTTPS - 443

등이 있으며, 등록 포트 (1024~49151) 중 유명한 것엔

  • MySQL - 3306
  • PostgreSQL - 5432

등이 있다. 49152~65535 포트는 동적 포트라고 불리며, 어떤 프로세스들에게 임의로 사용 가능한 임시 포트들이다.

 

위에서 말한 것이 사실인지 한번 테스트해보자. 구글에 들어간다. 구글은 기본적으로 https 통신을 하기 때문에, 포트 넘버는 443이 될 것이다. 하지만 포트 넘버는 보통 생략되어 있다고 했다. 따라서 도메인 이름 뒤에 :443을 넣어 접속해보자.

 

접속이 그대로 google.com으로 접속되는 것을 볼 수 있다. 그렇다면 HTTP 통신인 :80을 뒤에 붙여보면?

이와 같은 에러가 발생한다. 구글은 https를 사용하기 때문이다. 실제로 대부분의 웹사이트들이 이미 https 통신으로 대부분 바뀌었다. 이는 https가 주는 보안적 이점 때문인데, 이에 관한 내용은 다음 글 참고.

https://lgphone.tistory.com/125?category=918082 

 

Web - HTTP 그리고 HTTPS (HTTP and HTTPS)

HTTP HTTP는 HyperText Transfer Protocol의 약자로, 80번 포트를 사용하는, 웹 상에서 정보를 주고 받을 수 있는 통신 규약 (Protocol) 이다. 주로 HTML (HyperText Markup Language) 문서를 주고 받을 때 사용된..

lgphone.tistory.com

 

그럼 이제 아직 http를 사용하는 웹사이트에서 다시 실험해보자. 정부 웹사이트인 복지r이라는 웹사이트에서 실험해보자. 보면 아직 http 통신을 사용하고 있으며, 주소는 다음과 같다. http://bokjiro.go.kr/nwel/bokjiroMain.do

 

그럼 이제 뒤에 :80을 붙여보자.

접속이 그대로 같은 페이지로 된다. 그럼 다시 :443을 뒤에 붙여보면?

 

이와 같이 응답이 없다고 한다. 즉, "http 통신을 할게~" 라는 말은 포트 80번을 통해서 정보를 주고 받겠다는 뜻이고, "https 통신을 할게~" 라는 말은 포트 443번을 통해서 정보를 주고 받겠다는 뜻이 되는 것이다.

 

출처

https://m.blog.naver.com/seoulworkshop/221265052717

https://namu.wiki/w/%ED%8F%AC%ED%8A%B8

https://prometheus.tistory.com/entry/%EB%82%B4%EB%B6%80%EC%A0%91%EC%86%8Dlocalhost%EC%99%80-%EC%99%B8%EB%B6%80%EC%A0%91%EC%86%8D%EC%9D%98-%EC%9D%98%EB%AF%B8

https://ithub.tistory.com/180

https://m.blog.naver.com/PostView.nhn?blogId=wind1237&logNo=140190025115&proxyReferer=https:%2F%2Fwww.google.com%2F