Computer Science/Network

[Network] 네트워크 기본 용어

HJChung 2021. 1. 15. 00:44

AWS 배포를 하면서 가장 많이 드는 생각은 '네트워크 공부 좀 해야겠다..' 였다. 

이제는 원리를 파악하고 깊이 고민해야하는 단계인 것 같다. 천천히 해보자

1. 가정에서 하는 랜 구성을 통해 살펴보는 Router,  IP

두 대의 컴퓨터가 인터넷을 통해 '통신'을 하며 정보를 주고 받는다고 하자. 이때 '주소'에 해당하는게 IP address.

 

 

 

인터넷 사용은 

1. 통신사와 계약해서 회선을 받는다. 

2. 이 회선을 꼽는 순간 ip가 부여된다. 그런데 그 회선을 하나의 노트북에'만' 꼽는건.. 요즘 별로 없을 것이다,. 왜 ? 스마트폰, 노트북 2~3대 모두 인터넷을 사용하고 싶으니까! 그럼 인터넷을 사용하려면? Ip address가 필요하다고 앞서 간단히 살펴보았다. 

그럼 인터넷 회선을 2~3개 또 계약해야하는건가? 아니다. 

 

 

 

 

 

 

3. 그래서 우리는 보통 '공유기'를 많이 사용한다.  통신사(인터넷 서비스 제공자; Internet Service Provider; ISP)와는 하나의 회선만 계약하고, 공유기를 사서, WAN에 그 회선 케이블을, LAN에는 사용할 기기를 연결한다. 

그리고 저 공유기는 광역 네트워크(인터넷; WAN; Wide Area Network)에 소속되어 있다.

공유기를 사용하는 저 기기들이 같은 네트워크(이를 지역 네트워크(LAN; Local Area Network) 라고 한다.)로 묶여있다. 

 

 

 

 

4. 그리고 이 모든 연결에 대해서 각각의 Ip가 부여된다. 

 

 

 

 

 

 

전세계 어디서나 WAN을 통해 내 공유기로 접속할 수 있게 하는 IP(그림에서 59.6.66.238에 해당)는 public IP address 라고 하며

그리고 LAN내에서만 사용가능한 Ip 들(그림에서 192.168.0.2, 3, 4 등에 해당하는 것)을 private IP address라고 한다. 

 

 

 

 

※ 용어정리

  • 네트워크 (network): 컴퓨터를 두 대 이상 연결하여 서로 데이터를 전송할 수 있는 통신망
  • 인터넷(Internet): TCP/IP 프로토콜을 사용하는 세계 최대 규모의 네트워크이다. 전 세계의 컴퓨터를 서로 연결하여 정보를 교환할 수 이있도록 만든 하나의 거대한 컴퓨터 통신망이다. 
  • 패킷(packet): 네트워크 통신을 할 때 사용되는 작게 분할된 데이터 조각으로 네트워크에서 전송하는 데이터의 기본 단위이다. 
    • 왜 굳이 데이터를 작은 패킷 조각(단위)로 나눠서 전송하는 것일까? 큰 데이터를 그대로 보내면 그 데이터가 네트워크의 대역폭을 너무 많이 차지해서 다른 패킷의 흐름을 막을 위험이 있기 때문이다. 
    • 그래서 예를 들어 용량이 큰 사진 데이터는 패킷으로 나눠서 보내지고, 분할된 패킷에는 순서대로 번호가 붙여져 있어서 사진 데이터가 보내질 목적지에서는 그 번호에 맞게 정렬한다. 
    • 대역폭이란, 일반적으로 네트워크에서 이용 가능한 최대 전송 속도로 정보를 전송할 수 있는 단위 시간당 전송량을 말한다.
  • 지역 통신망(Local Area Network; LAN; 근거리 통신망): 비교적 집, 사무실, 학교 등의 가까운 거리에 위치한 장치들을 서로 연결한 네트워크를 말한다. 
  • 광역 통신망(Wide Area Network; WAN; 원거리 통신망): LAN을 다시 하나로 묶는 거대한 네트워크로 특정 도시, 국가 와 같이 매우 넓은 범위를 연결하는 네트워크를 말한다. 넓은 지역에 설치된 컴퓨터들 간의 정보와 자원을 공유하기에 적합하도록 설계한 컴퓨터 통신망이다. 
  • 인터넷 서비스 제공자(Internet Service Provider; ISP): 인터넷에 접속하는 수단을 제공하는 주체이다. KT, U+, SK브로드밴드 등이 있다. 

2. NAT(Network address translation)

공유기에 연결된 내 노트북의 Ip는 192.168.0.4 private IP address이다. 여기서 외부(예를 들어 구글이라 치자)에 접속하려면 어떻게 해야할까?

1. 먼저 Gateway address 로 요청을 보낸다. 

보니까 LAN내의 IP로 보내는 요청이 아니네? 그러면 WAN을 통해서 외부 IP로 요청을 보내야 한다. 

2. 먼저 해당 요청을 보낸 private IP address을 기록한다. 

3. 그 후 Network Address Translation(NAT) 기술을 통해 public IP address로 바꿔서 외부 IP로 요청을 보낸다. 

4. 그리고 외부 IP로부터 응답이 public IP address로 오면, 

5. 이 공유기는 앞서 기록해놓은 실제 요청을 보낸 private IP address로 응답을 전달해준다. 

 

3. port

그림의 순서를 따라가면서 필요성을 느껴보자. ㅎㅎ

 

 

 

 

 

외부로부터 접속이 들어왔을 때, 이 중 누가 서버로 작동하는가를 식별 및 연결 할 수 있어야 하며, 이때 port forwarding기술이 필요하다. 그래서 그 전에 port에 대해서 알아보자. 

 

하나의 컴퓨터에는 여러개의 서버가 설치 될 수 있다. 개발공부를 하면서, 프로젝트를 진행하면서 비록 localhost환경이긴 하지만 여러개의 서버 코드를 동시에 실행시켜놓은 적이 있다. 이때 각 서버를 어떻게 식별해주었는지 기억해보면~ 바로 port번호였다. 

자칫 같은 포트번호를 가진 서버를 동시에 실행시키면 app crashed 에러가 발생하기로 했던게 기억난다. 

 

 

 

그래서 http://www.safu.ml 이면 http니까 일단 80번 port로 연결시킨다. 만약 80번 port의 웹서버가 아닌 다른 port(예를 들어 8000번 port)의 웨 서버에 요청을 보내고 싶다면 port를 명시해주어야 한다. http://www.safu.ml:8000

 

출처: https://en.wikipedia.org/wiki/URL

 

4. Port forwarding

몇번 포트에 접속한 정보를 어떤 아이피의 몇번 포트로 연결해줄 것인지를 설정하여 이정표를 달아주는것을 말한다. 위의 그림과 연결해서 아래 그림에 설명을 정리해두었다. 

 

reference

생활코딩 WEB2 - Home server