포트포워딩과 IP, 네트워크 장비와 통신 프로토콜

msung99·2022년 9월 30일
0
post-thumbnail

외부접속

  • 외부 IP 에서 내부 IP 로 접속하기란, 자신의 컴퓨터를 내부 IP 라 가정하고 자신의 컴퓨터에 다른 컴퓨터들이 접속하는 것이다.

클라이언트-서버 모델

API의 개념: API는 Application Programming Interface(애플리케이션 프로그램 인터페이스)의 줄임말이다. 고유한 기능을 가진 모든 소프트웨어를 나타낸다. 인터페이스는 두 애플리케이션 간의 서비스 계약이라고 할 수 있다. 이 계약은 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의한다. API 문서에는 개발자가 이러한 요청과 응답을 구성하는 방법에 대한 정보가 들어있다.


IP란

IP(Internet Protocol) 란 인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트폰 등)을 식별할 수 있도록 각각의 장비에게 부여되는 고유 주소이다.

1. IP주소의 종류

1-1. IPv4, IPv6

IP주소는 IPv4, IPv6 2가지 종류가 있다.

  • IPv4 (IP version 4)
    • 주소는 32비트 방식으로, 8비트씩 4자리로 되어 있으며 각 자리는 온점으로 구분한다. ex) 115.68.24.88
    • 인터넷 사용자 수가 급증하면서 IPv4 주소가 고갈될 위기에 처해있다 => 고갈 문제를 해결하기 위해 등장한 주소가 바로 IPv6이다.
  • IPv6 (IP version 6)
    • IPv4의 주소체계를 128비트 크기로 확장한 프로토콜 주소
    • 네트워크 속도, 보안성등 여러 면에서 뛰어나다.
    • but, 기존의 주소체계를 변경하는데 비용이 많이 들음(아직 완전히 상용화가 되지 않았다!)

1-2. 공인 IP, 사설 IP

IP 주소는 임의로 우리가 부여하는 것이 아닌, 각 나라의 공인기관에서 국내 IP 주소들을 관리하고 있다.

공인 IP

  • IP를 ISP(Internet Service Provider. ex) KT, SKT 등등) 가 부여받고, 우리는 위 회사에 가입을 통해 IP를 제공받아 인터넷을 사용하게 되는 것이다. 이렇게 발급받은 IP를 공인 IP라고 한다.

사설 IP

  • ISP 로 부터 공인 IP를 공유기에 발급받고, 공유기에 연결되어 있는 가정이나 회사의 각 네트워크 기기 (핸드폰, TV, PC 등) 에는 사설 IP를 할당한다.

IPv4와 IPv6의 차이

(앞서 기록한 내용)

  • 인터넷 사용자 수가 급증하면서 IPv4 주소가 고갈될 위기에 처해있다 => 고갈 문제를 해결하기 위해 등장한 주소가 바로 IPv6이다.
  • IPv4 : 32비트짜리 주소체계 방식 // IPv6 : 64비트짜리 주소체계 방식

IP 와 포트의 차이

  • 포트는 네트워크 상에서 통신하기 위하여 호스트 내부적으로 프로세스가 할당받아야 하는 고유한 숫자이다. 한 호스트 내에서 네트워크 통신을 하고 있는 프로세스를 식별하기 위해 사용되는 값이므로, 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없다.

⇒ 즉, 같은 컴퓨터 내에서 식별하는 번호이다.

  • IP 주소가 집 주소와 비슷한 개념이라면, 포트 번호는 방 번호와 비슷한 개념

예를 들어 어떤 사람이 보낸 물건이 집에 도착을 함. 이때 보낸 사람은 우리집 주소(=IP 주소)를 알아서 보낼 수 있었음.

집에 도착은 했지만 정확히 누구에게 온 물건인지는 모름. 나한테 온 물건이라면 내가 있는 방에 전달을 해야함.

이때 '포트'가 이 정보를 알려줌.


DNS를 사용하는이유

요약 : 길고 복잡한 IP 주소를 외울수가 없기 때문에 문자 주소를 사용하기 위해 DNS를 사용한다.

cf) DNS 의 동작원리

1) 유저가 브라우저에 nesite.com 을 검색

2) DNS 서버로 도메인 주소가 전달된다.

3) 서버 내부에서 전달받은 도메인 주소를 기반으로 “nesite.com = 12.123.123.123” 라는 항목을 찾아난다.

4) 다시 브라우저에게 12.123.123.123의 IP 주소를 갖고있는 호스팅 서버 (해당 웹사이트 데이터가 저장된 곳) 으로 가라고 지시한다.

5) 브라우저가 해당 IP 주소로 접속해서 웹사이트가 보이게 된다.

(출처 : https://gentlysallim.com/dns%EB%9E%80-%EB%AD%90%EA%B3%A0-%EB%84%A4%EC%9E%84%EC%84%9C%EB%B2%84%EB%9E%80-%EB%AD%94%EC%A7%80-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/)

외부 IP와 내부 IP

  • 외부 IP == 공인 IP
  • 내부 IP == 사설 IP

포트(Port)

  • 포트란 : IP주소는 컴퓨터를 찾을 때 필요한 주소를 나타내며, 포트는 해당 IP 주소의 컴퓨터 안에서 프로그램을 찾을 때 나타내는 것이다.

    ⇒ 즉, 데이터를 받을 외부기기 (프로세스(process))가 정확히 어떤 건지를 구분해주는 식별자

터미널에서 리액트를 실행하면 나타나는 화면에는, 로컬 PC의 IP 주소인 127.0.0.1 뒤에 :3000과 같은 숫자가 표현된다.리액트를 실행했을 때에는 로컬 PC의 IP 주소로 접근하여, 3000번의 통로를 통해 실행 중인 리액트를 확인할 수 있다.이미 사용 중인 포트는 중복해서 사용할 수 없다.만약 다른 프로그램에서 3000번 포트를 사용 중이라면, 3001번 포트 번호로 리액트가 실행된다.

  • 포트포워딩 : 포트 번호를 변경해주는 것. 외부 기기에는 고정된 IP만 전달하며, 포트포워딩한 IP 주소로 다른 네트워크기기(PC, 핸드폰, TV 등) 의 외부 접속을 가능하게 해준다.

→ 다른 외부 컴퓨터들에게 특정 포트를 개방시켜 줌으로써 서로 통신이 되게 하는 과정

  • 기본으로 사용하는 포트 정리
    프로토콜포트번호
    http80
    https443
    mysql3306
    ssh22
    ftp20
    sftp21
  • 외부 포트와 내부 포트

왜 외부포트, 내부포트를 나눈걸까?

⇒ 내부에서 사용하는 서비스가 많고 포트가 중첩될경우를 방지한다.

- 가령 예를 들어 (외부ip : 80 -> 192.168.0.1:80) 과 (외부ip : 80 -> 192.168.0.2:80) 일 경우

 포트 중첩이 되어 설정 할수 없다. 

    ⇒ 이경우 외부 ip:80을 외부ip:8080으로 다르게 해 줘야 한다.

- 외부포트와 내부포트 개념이 없다면 내부에서 동일한 포트를 사용하는 서비스는 1개밖에 못쓰게 된다. 공유기는 하나의 공인 IP로 여러개의 클라이언트를 연결하는 역할을 하는 기기이기때문에 외부포트와 내부포트 개념이 필요한것이다.

예시 (포트포워딩이 필요한 이유 + 외부/내부포트를 나눈이유)

공유기에 연결되는 인터넷 장비가 1개 뿐이라면 포트포워딩 개념이 필요 없을 것이다.

그냥 외부에서 들어온 포트를 그대로 전달해주면 되기 떄문이다.

=> 외부 3333 에서 들어온걸, 연결된 장비에 3333 으로 포워딩 해라~

문제는 공유기라는거... 공유기에는 인터넷 장비가 LAN 포트 개수만큼 연결 될 수 있습니다.

그럼 공유기에 연결된 기가가 A(192.168.1.11), B(192.168.1.12), C(192.168.1.13), D(192.168.1.14) 4개가 있다면 어떻게 될까요?

외부에서 접속하는 3333 포트를 공유기 내부에 연결된 A, B, C, D 4개중에서 어떤 장비에 전달해야 할까요?

그래서 포트 포워딩을 설정해줘야 합니다.

-> 외부 3333 에서 들어온걸, A(192.168.1.11)의 3333 으로 포워딩 해라~
-> 외부 2222 에서 들어온걸, B(192.168.1.12)의 3333 으로 포워딩 해라~

외부로 부터 들어온 포트를, 내부의 어떤 장비에 어떤 포트로 포워딩 할지를 결정해줘야지

공유기가 외부 인터넷과 내부에 연결된 다수의 장비들 간에 통신 관리가 가능해지게 됩니다.

(출처 및 참고 : https://www.clien.net/service/board/cm_nas/16497441)


TCP vs UDP

데이터를 보내기 위해 사용하는 프로토콜(통신 규약)

⇒ TCP와 UDP는 포트 번호를 이용하여 주소를 지정하는것과 데이터 오류검사를 위한 체크섬 존재하는 두가지 공통점을 가지고 있지만 정확성(TCP)을 추구할지 신속성(UDP)을 추구할지를 구분하여 나뉜다.

TCP

데이터를 중요하게 생각하여 확실히 주고받고 싶을 때는 ‘TCP(Transmission Control Protocol)’를 사용한다. TCP는 통신할 컴퓨터끼리 ‘보냈습니다’, ‘도착했습니다’라고 서로 확인 메시지를 보내면서 데이터를 주고받음으로써 통신의 신뢰성을 높인다. 웹이나 메일, 파일 공유 등과 같이 데이터를 누락시키고 싶지 않은 서비스는 TCP를 사용하고 있다.

  • 웹 HTTP 통신, 이메일 파일전송 등에 사용된다.

UDP

그에 반해 데이터의 신뢰성은 제쳐두고 어쨌든 빨리 보내고 싶을 때는 ‘UDP(User Datagram Protocol)’를 사용한다. UDP는 데이터를 보내면 그것으로 끝이므로 신뢰성은 없지만 확인 응답과 같은 절차를 생략할 수 있으므로 통신의 신속성을 높인다. VoIP(Voice over IP)와 같은 시간 동기가 필요한 특히 속도를 필요로 하는 서비스들이 UDP를 사용하고 있다.

  • DNS, 멀티미디어 등에서 사용된다.

(출처 : [https://swalloow.tistory.com/77])

TCP와 UDP의 전송 방식의 차이점


DNS

(DNS 의 자세한 동작과정은 앞서 설명했음! 참고하자.)

  • DNS는 도메인네임서버를 일컫는다. 인터넷은 서버들을 유일하게 구분할 수 있는 IP주소를 기본체계로 이용하는데 숫자로 이루어진 조합이라 인간이 기억하기에는 무리가 따른다. 따라서 DNS를 이용해 IP주소를 인간이 기억하기 편한 언어체계로 변환하는 작업이 필요한데 이 역할을 DNS가 하는 것이다.

Proxy Server

프록시 서버(Proxy Server) 란 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 말한다.

Server 와 Client 사이에 중계자로서 대리로 통신을 수행하는 것을 가리켜 “Proxy”,

그 중계 기능을 하는 것을 Proxy Server 라고 부른다!

(출처 : https://blog.naver.com/PostView.naver?blogId=dktmrorl&logNo=222410286839 )

Forward proxy

  • 예를들어 클라이언트가 www.naver.com에 접근하려고 하면 클라이언트가 직접 접근하는것이 아니라, Forward Proxy Server 가 요청을 받고, www.naver.com 에 연결하여 그 결과를 클라이언트에 전달(forward) 해준다.

  • Proxy Server 는 캐싱(Caching) 기능이 있어서 자주 사용되는 데이터일 경우엔, 요청을 보내지 않고 캐시에서 가져올 수 있기 떄문에 성능 향상에 좋다!

Reverse Proxy

클라이언트가 특정 기업 사이트에 데이터를 요청하면, Reverse Proxy 가 요청을 받아 내부망 Server 에서 데이터를 받은 후 클라이언트에게 전달한다.

클라이언트는 내부 서버에 대한 정보를 알 필요없이 Reverse Proxty 에만 요청하면 된다.

내부에 직접적으로 접근한다면 DB에 접근이 가능하기 때문에 중간에 Reverse Proxy 를 두고 클라이언트와 내부 서버 사이의 통신을 담당한다.

또한 내부 서버에 대한 로드 밸런싱(Load Balancing) 이나 서버 확장등에 있어서 유리하다.


네트워크 장비 (라우터,허브,스위치,공유기)

  • 라우터, 허브, 스위치, 공유기의 공통점 : 컴퓨터와 컴퓨터 사이, 즉 네트워크간 장비와 장비를 연결해주는 장비

라우터

  • 라우터는 LAN(Local Area Network:근거리 통신망)을 연결해 주는 장치 로써, 데이터를 전송할 때 최종 목적지에 가기 위하여 거쳐야하는 많은 경로들 중에 적절한 통신 경로를 결정하기 위하여 한 통신망에서 다른 통신망으로 데이터 패킷을 전송하는 장치

⇒ 클라이언트와 서버는 1:1로 연결되어있는것이 아니고 중간에 수많은 라우터들이 존재하고 그 라우터들을 거쳐서 전송된다.

허브

허브는 여러 대의 컴퓨터를 연결해서 네트워크를 만들어주는 장치로서, 

데이터 패킷을 받으면 연결된 모든 장치들에게 모두 보낸다.
모든 장치들이 데이터 패킷을 받고 자신에게 온 데이터 패킷인지 확인하고 필요하면 취득한다. 즉, 단순 분배를 하는 중계 장치이다.

⇒ 허브는 위와 같이 모든 연결된 장치들에게 패킷을 뿌리기 때문에, 자신이 가지고 있는 데이터 전송 대역을 분리해서 사용해야 한다.

스위치

스위치는 연결된 장치들의 IP와 MAC 주소를 모두 테이블 형태로 가지고, 

원하는 목적지에 데이터 패킷을 전송하는 장치

⇒ 허브와 달리 스위치는 무작정 데이터 패킷을 뿌리는 것이 아니라, IP와 MAC 주소를 기반으로 필요한 장치에게만 데이터 패킷을 전송해준다.

공유기

ISP(Internet Service Provider) 업체에서는 IP를 제공하고, 소비자는 해당 IP를 구매해서 사용할 수 있다. 집이나 회사에서 해당 IP를 통하여 여러 장치들을 사용하고 싶을 경우가 있다. 이런 경우에 공유기를 사용하여 여러 노트북과 컴퓨터와 같은 다양한 장치들을 인터넷에 연결 할 수 있다.


이더넷(Ethernet)

cf) 인터넷, LAN, MAN, WAN

인터넷(Internet)은 Inter-networking(인터넷들의 연결)의 약자로, 쉽게 표현하면 라우터들의 모임 이다. 여러가지의 LAN이 얽히고 섥혀서 만들어진 거대한 네트워크가 바로 인터넷이고 이를 WAN(Wide Area Network)이라고 한다.

  • LAN(Local Area Network) : 근거리 통신망. 집, 회사 정도의 규모
  • MAN(Metropolitan Area Network) : 도시 지역 통신망. 도시 하나 정도의 규모
  • WAN(Wide Area Network) : 광역 통신망. MAN이 모여서 만들어짐.

이더넷(Ethernet)

LAN 통신

요약 : 한정된 작은 범위의 지역에서 구축된 네트워크 통신 채널( <-> WAN(Wide Area Network) )

  • Local Area Network (근거리 통신망)
  • 동일 건물과 같이 제한된 일정 지역에서 각종 전자기기들 사이에서 통신을 수행하기 위해 구성된 최적화된 고속의 통신 채널
  • 장점 : 전송되는 패킷 손실 및 지연이 적으며, 사용자간에 쉽고 빠르게 자료를 공유 가능하다.
  • 단점 : 전송 거리가 짧아서 거리에 제약이 있다.
  • LAN 은 작은 범위의 네트워크 망으로 이더넷(Ethernet), Token Ring, FDDI 형태로 구축할 수 있다.
    • 이더넷에 가장 광범위하게 이용되고 있다!

이더넷(Ethernet)

요약 : 호스트가 채널의 상태를 감지하여 충돌을 회피하는 네트워킹 방식

  • 채널에 대한 Carrier 를 체크하고 통신을 할까말까를 결정함
  • multiple access 가 발생할 경우, 잠시 기다렸다가 다시 데이터를 전송
  • CMSA/CD 라는 프로토콜을 사용(Carrier Sense Multiple Acess / Collision Detection)
  • 이더넷에서 호스트들이 네트워크르 통해 통신을 하고 싶으면 먼저 채널을 누가 사용하고 있는지 살펴본다.
  • 누군가가 이미 채널을 사용중이라면 Carrier 가 감지되고, Carrier 가 감지되지 않으면 아무도 사용하지 않는 것으로 판단하여 통신을 시도한다.
    • cf) Carrier(캐리어) 란? : 현재 네트워크에서 통신이 일어나고 있을떄 나타내는 신호

Mutiple Access(다중 접근) : 동시에 여러 호스트가 데이터를 전송하는 경우

  • 이럴 경우 제대로 데이터 전송이 일어나지 않는다.

=> 그래서 호스트는 데이터를 전송한 후 충돌이 일어났는지 체크를 하게 되는데, 이를 Collision Detection 이라고 한다.

  • 충돌이 일어났다면 호스트들은 어느정도 기다렸다가 다시 데이터를 전송한다.

MAC 주소 (Media Access Control Address)

컴퓨터간에 통신하기 위해있는 컴퓨터의 물리적 주소=> IP 통신 내부에 MAC 주소의 통신이 포함되어 있다.

  • IP주소를 MAC 주소로 바꿔 사용하기 때문에 IP 주소를 사용한다는 것이 곧 MAC 주소를 사용한다는 것과 같다.(즉, IP 통신 내부에 MAC 주소의 통신이 포함되어 있다! )
  • "IP 주소"와 차이점

해석 : "IP 주소간의 통신은 사실, 각 라우터 hop 에서 일어나는 MAC 주소와 MAC 주소 통신의 연속적인 과정이다.

  • IP 는 데이터 전송(통신)의 시작점과 끝점에 해당하는 주소라면,
  • MAC 주소는 바로 옆에 나와 물리적으로 연결되어 있는 노드와 통신할 떄 사용되는 주소를 의미한다.

서브넷 마스크

한눈에 보기에는 IP 주소가 무작위로 숫자를 나열한 것처럼 보일 수 있다. 하지만 이러한 무작위 숫자 조합의 이면에는 나름의 로직이 숨겨져 있으며 IP 주소를 나눈 작은 네트워크 조각을 서브넷 마스크(subnet mask)라고 부른다.

⇒ 서브넷 마스크(subnet mask)는 32비트의 숫자로 ‘0’의 비트는 호스트 부분을 나타내고 ‘1’의 비트는 네트워크 부분을 나타낸다. 이러한 방식으로 서브넷 마스크는 IP 주소를 네트워크 및 호스트 주소와 분리한다. 서브넷 마스크는 기본적으로 자체 32비트 숫자를 이용하여 IP 주소를 마스킹하기 때문에 여기서 ‘마스크’라는 단어가 이용된다.

(출처 : https://nordvpn.com/ko/blog/what-is-subnet-mask/)


소켓 프로토콜

소켓(Socker) 이란?

⇒ 소켓은 떨어져있는 두 호스트를 연결해주는 도구로써 인터페이스 역할을 한다.

데이터를 주고 받을 수 있는 구조체로 소켓을 통해 데이터 구조가 만들어진다.

소켓 통신 과정(전화통화와 유사함)

발신자(클라이언트) : 소켓 생성 -----------------------------------> 연결 -------> 통신 -> 소켓 닫기(연결 끊기)


소켓 통신

  1. server 소켓 생성과 listen(이벤트)

  2. connect을 위한 client 소켓 생성

  3. client 소켓에서 server 소켓으로 메시지 전송

  4. server에서 새로운 소켓 생성 후 처리

  5. server 소켓에서 client 소켓으로 메시지 전송

  6. 소켓 Close(소켓 닫기)


HTTP 통신과 Socket 통신 비교

HTTP 통신

⇒ 클라이언트의 요청(Request)이 있을떄만 서버가 응답(Response)하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식

  • 클라이언트가 요청을 보내는 경우에만 서버가 응답하는 단방향 통신
  • 서버로부터 응답을 받은 후에는 연결이 바로 종료된다
  • 실시간 연결이 아니고, 필요한 경우에만 서버로 요청을 보내는 상황이 유용하다.
  • 요청을 보내 서버의 응답을 기다리는 어플리케이션의 개발에 주로 사용된다.

Socket 통신

⇒ 서버와 클라이언트가 특정 포트(port) 를 통해 실시간으로 양방향 통신을 하는방식

  • 서버와 클라이언트가 계속 연결을 유지하는 양뱡향 통신이다
  • 실시간 동영상 스트리밍이나, 온라인 게임등과 같은 경우에 자주 사용된다.
profile
https://haon.blog

0개의 댓글