[네트워크] localhost - 127.0.0.1, IP, 그리고 통신

EMMA·2022년 5월 18일
1

[http] http와 네트워크

목록 보기
13/14
post-custom-banner

특수한 주소, 127.0.0.1

API를 개발하고, 클라이언트와 통신하기 전에는 먼저 127.0.0.1로 test를 해본다.
(난 django를 사용하므로, 127.0.0.1:8000이 되겠다)

127.0.0.1은 특수한 주소다. loopback 혹은 localhost(로컬호스트) 주소 라고도 하며,
결국 '내 컴퓨터 주소'를 의미한다.

기본적으로 통신은 클라이언트-서버 간에 패킷 교환이다.
A에서 B로 패킷을 전달할 때, 패킷은 상위 계층부터 하위 계층까지 거치면서 헤더 등이 언팩되고 B는 온전한 payload를 얻는다.

Keywords

  • 네트워크 계층에서는 TCP/IP 헤더가 추가된 데이터를 TCP/IP 패킷이라고 함
  • 데이터 링크 계층(네트워크 내부적으로 기기 간 데이터 전송하는 계층) 에서는 프레임이라고 함

하지만 127.0.0.1로 접속하면, 해당 패킷은 외부로 전송되지 않고 자신이 다시 받은 것처럼 처리해준다.

내 컴퓨터가 보내고, 다시 내 컴퓨터가 받는 형식이 되는 것.


127.0.0.1 == localhost 는 아니다

엄밀히 말하면 2개가 완전히 같은 것은 아니다.
localhost는 컴퓨터에서 사용하는 loopback 이고, IPv4 체계에서 127.0.0.1 이라는 일반 인터넷 상에서는 사용할 수 없도록 만들어진 특수한 & 예약된 주소를 가리키도록 설정된 것.


::1 이란 ?

127.0.0.1의 IPv6 버전이며, 0.0.0.0.0.0.0.1 의 약자다.
(IPv6는 128bit, IPv4는 32bit)
::1의 경우, nginx config 과정에서 확인한 바 있다.
(nginx docs: "IPv6 addresses (0.7.36) are specified in square brackets")

# sudo vi /etc/nginx/sites-available/default
listen 80;
listen [::]:80; 
> listen IPv6 - 0.0.0.0:80

공인 IP, 사설 IP

인터넷에 직접 연결되는 라우터 (혹은 컴퓨터) 에는 공인 IP주소가 할당된다.
이는 ISP에 의해 제공되는 것이며, 회사/가정의 LAN에 있는 컴퓨터는 사설 IP를 할당받는다.

IP는 아래 2가지 내용으로 구성되어 있다.

  • 네트워크 ID: 어떤 네트워크인가?
  • 호스트 ID: 그 네트워크 안에 어떤 컴퓨터인가?

IP주소는 A~E 클래스까지 나뉘어져 있는데, 일반 네트워크는 C 클래스까지 사용한다.

클래스 별로 공인 IP주소 범위, 사설 IP 주소 범위가 나뉘어져 있다.
예를 들어, C 클래스는 아래와 같이 나뉜다.

  • 공인 IP 범위: 192.0.0.0 ~ 192.167.225.225, 192.169.0.0 ~ 223.255.255.255
  • 사설 IP 범위: 192.169.0.0 ~ 192.168.255.255

내가 스타벅스에서 사용한 IP

우리는 스타벅스 같은 카페에서 노트북, 핸드폰 등을 스타벅스 wifi에 연결해 종종 사용한다.
스타벅스에서 클라이언트와 통신할 때, 할당 받은 IP는 192.168.x.x 이었다.

즉, 스타벅스를 통해 제공받은 C클래스의 사설 IP인 것.


이 글을 쓰는 이유

사실 이 글을 쓰는 이유는, 오늘 클라이언트와 통신하면서 벌어진 일련의 사태(?) 때문이었다.
오늘의 삽질을 기록할 겸, 관련 내용도 정리할 겸.

상황1)
각자 화상채팅을 위한 코드를 작성하고, 각자 테스트 사이트를 통해 테스트 완료.
바로 웹소켓 connect를 시도했는데 곧죽어도 안되는 것.
이상한데서 버그가 난 줄 알고 이것저것 다 건드렸다.
알고 보니, 스타벅스에서 준 IP(사설 IP)가 아닌 127.0.0.1:8000, 즉 나 자신에게 계속 쏘고 있었던 것.

상황2)
일단 상황1을 해결(이라고하기도 민망한...)하고,
바로 테스트용 모바일에 앱을 빌드해서 회원가입/로그인부터 시도했다.
그런데 또 통신이 안되는 것. 노트북에서 하면 되는데, 테스트 모바일로 옮기기만 하면 불통이었다.
알고 보니, 모바일 앱의 wifi가 노트북 wifi랑 달랐던 것.

결론은 뭐다? 기초부터 잘 하자 ...:)
✅ 같은 wifi(같은 네트워크) 로 설정되었는가?
✅ 올바른 IP주소를 공유했는가?



참고 자료
https://woo-dev.tistory.com/190
https://ko.wikipedia.org/wiki/Localhost
https://nginx.org/en/docs/http/ngx_http_core_module.html
<모두의 네트워크>, 미즈쿠치 카츠야

profile
예비 개발자의 기술 블로그 | explore, explore and explore
post-custom-banner

0개의 댓글