Port Forwarding

공유기를 사용하면 한번씩은 들어보고 검색 해봤을만한 단어입니다.

이 포스트는 포트포워딩 설정 방법이 아닌  포트포워딩이 무엇인지에 대해 알아보겠습니다.

우선 사전적 의미 그대로 해석하면 될 것 같습니다.


포트를 전달해 준다.


이 한마디로 모든게 설명이 되지만 포트 (Port)가 무엇인지 모르는분들이 있을거라 생각하여 간단하게 설명하고 넘어가겠습니다.


Port 란?

인터넷이라는 프로그램을 사용하여 서버와 통신을 하게 됩니다.



이 서버가 우리가 생각하는 서버일수도 있고 그냥 PC일수도 있고 스마트폰이 서버가 될 수도 있습니다.

목적이 Port에 대한 이해이므로 더 깊게 들어가지는 않겠습니다.

누군가에게 접속을 받는 컴퓨터가 서버 접속을 하는 컴퓨터를 클라이언트라고 이해하면 됩니다.



위 사진의 서버는 웹 서버, FTP 서버 두가지 용도로 사용중입니다.

위 서버가 운영하는 웹사이트에 접속하기 위해서 우리는 Internet Explorer, Firefox, Chrome등의 브라우저를 이용해서 접속합니다. 또 위 서버가 운영하는 FTP에 접속하기 위해서 우리는 알FTP, 파일질라 등의 FTP 프로그램을 사용합니다.



우리가 이용하는 프로그램은 저렇게 많음에도 불구하고 서버는 어떻게 사용자가 웹페이지 요청을 했는지 파일요청을 했는지 구분을 할 수 있을까요? 바로 Port가 있기 때문에 서버는 요청을 받았을 때 웹사이트 요청을 했는지 FTP를 이용한 파일 요청을 받았는지 알고 처리를 할 수 있습니다.



Port는 숫자로 표현합니다.

통상적으로 웹사이트는 80번 포트, FTP 서비스는 21번 Port를 이용합니다.

클라이언트에서 요청을 하면 서버의 OS는 어느 Port로 요청이 왔는지 확인 후 해당 Port로 접속을 기다리는 Process에게 요청 내역을 전달해줍니다.




이렇게 해서 하나의 서버가 여러 역할을 할 수 있게 됩니다.



정리


컴퓨터의 Lan선은 하나인데 통신을 필요로 하는 프로그램이 다수일 때 이 다수의 프로그램을 구별할 수 있는 변호가 Port이다.





포트포워딩(Port-forwarding)이란?



공유기를 설치하게 되면 공유기와 연결된 PC들은 192.168~로 시작하는 IP를 공유기로부터 부여받게 됩니다.



ISP 업체로부터할당 받은 IP 61.43.52.108은 공유기가 가지게 됩니다. 공유기를 기점으로 공유기 뒤에 있는 PC들의 IP를 내부 IP, 공유기의 IP를 외부 IP라고 부릅니다. 집이 아닌 다른곳에서 192.168.0.20에 있는 파일을 가져오려면 61.43.52.108로 접속을 해야 합니다.


192.168.20번 PC에 FTP 서비스를 실행중이라고 가정하겠습니다.



21번 포트로 요청이 왔는데 공유기는 어느 PC로 연결을 해줘야 할 지 모르는 상태입니다.

당연히 요청은 실패하게 되어 친구는 접속이 안된다고 불평만 하게 됩니다.



이러한 상황에서 공유기에게 이정표를 달아주는 것을 포트포워딩(Port-Forwarding)이라고 합니다.



21번 포트로 요청이 오면 공유기는 이정표를 참조해서 192.168.0.20번 PC로 정확하게 전달해줄 수 있습니다.

Posted by 나무길 :

메타데이터란?

2018. 9. 22. 23:48 from Language/C#

"메타" -> Meta 가 들어가면 일단 부수적인 것. ex 롤에서 '메타' 플레이라고 하면 실제로 LoL 내부에 정해진 규칙은 아니지만, 사람들 사이에서 정형화되어 생성된 규칙같은 것이라 보면 된다.


참고로 메타 프로그래밍에 대해서 잠시 말하면 C# 에서 List<> <- 여기에서 "< >" 에 따라서 새로운 변수 타입이 생긴다고 볼 수도 있다. 이것을 새로운 변수 타입에 따라 프로그램을 아예 새롭게 정형화시켜서 어떠한 변수가 생성되었을 때는 어떻게 하라 혹은 다른 타입에 따라서는 또 다르게 하라 하는 것이다. 이렇게 하면 프로그램에서 if else가 사라지게 되므로 최적화가 된다고 볼 수 있다. 하지만 메타프로그램은 유지보수가 어려울 수도 있고 실제로 최적화 양이 그렇게 많지도 않기 때문에 정말로 필요한 경우가 아니면 안 쓰는 것을 추천한다.


다시 메타 데이터로 돌아와서 데이터대해서 메타 데이터를 만든다는 것은 Data에 대한 구조화된 Data로, 다른 Data를 설명해주는 Data이다. 대량의 정보 가운데 찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대하여 부여되는 데이터이다. 어떤 데이터 즉 구조화된 정보를 분석, 분류하고 부가적 정보를 추가하기 위해 그 데이터 뒤에 함께 따라가는 정보를 말한다.

'Language > C#' 카테고리의 다른 글

public, private, protected, internal keyword  (0) 2018.10.24
async await 사용시 조심해야 할 점  (0) 2018.10.14
Object Oriented Robot Programming  (0) 2018.10.14
'await' keyword  (1) 2018.10.13
C# 'sealeld'  (0) 2018.10.09
Posted by 나무길 :

shell과 kernel 차이

2017. 4. 11. 18:55 from 리눅스

제일 하단부에는 울가 눈으로 직접 볼 수 있는 하드웨어들이 있고 그 위에 커널이 있다. 또 그 위에는 쉘이 있고 유저는 쉘 상에서 명령어를 통해 하드웨어 조작을 할 수 있다. 하드웨어는 여러분들도 잘 알고 있을 테니 설명을 생략. 그럼 먼저 커널이 무엇인지 간략하게 살펴보자.




커널

- 사전적 정의에 의하면 커널은 컴퓨터 운영체제의 가장 중요한 핵심이다.

- 운영체제의 다른 모든 부분에 여러 가지 기본적인 서비를 제공하기 때문에 윈도우 그 자체라고 보면된다.

- 커널은 리눅스가 처음 부팅 될 때 메모리로 로딩 된다.

- 쉽게 생각하면 여러분들의 윈도우를 부팅할 때 나오는 로딩화면이 바로 커널을 로딩하는 것이다.

- 컴퓨터의 시스템 자원들을 관리힌다.

- 항상 메인 메모리에 상주하기 때문에 윈도우 부팅 후 바로 작업관리자를 열어 메모리 사용량을 보면 0%가 아닌 것이다.

- 리눅스의 커널은 1만줄 이상의 C언어와 1000줄 정도의 어셈블리어로 구성되어 있어서 이식성(portability)이 좋다. 즉 다른 시스템 환경에서도 잘 적응할 수 있다는 것이다.


요약하면 커널은 주로 하드웨어 자원(하드디스크, 메몰 등)을 효율적으로 관리하기 위해서 필요한 용소라고 생각하면 된다. 커널이 시스템 자원을 관리한다고 말했지만 관리가 일어나기 위해서는 어떤 명령이 실행된다든지 프로그램이 실행되어야 한다. 그리고 보통 그런 명령의 실행은 유저의 입력에 의한 것이 대부분이다. 이 때 유저의 입력을 어떻게 받아서 처리 할 것인지를 결정하고 도와주는 녀석이 바로 쉘이다. (OS 라고 생각하면 될 듯 하다.)


- 운영체제 상에서 다양한 운영체제 기능과 서비를 구현하는 인터페이스를 제공하는 프로그램이다.

- 리눅스 명령어를 해석하는 명령어 해석기로 사용자와 리눅스 OS간의 인터페이스와 Shell Programming언어를 해석한다.

- 키보드와 같은 단말 장치를 통해서 유저의 입력을 받아서 여러 프로그램이나 명령을 실행한다.

- sh(본 쉘), ash, bash, csh(C 쉘)같은 다양한 쉘이 존재한다.

- 윈도우에서 지원하는 cmd창도 쉘의 일종(CLI)이라고 보면된다.

- 내가 임의로 JHShell을 만들어서 ls 명령어를 JHls 로 만들고 싶다면 그 쉘이 기존의 ls명령어를 수행하게끔 프로그래밍이 되어야 한다. 지금 존재하는 쉘 또한 이런 방식으로 만들어졌다고 이해하면 조금 쉬울 것이다.

- 이렇게 JHls를 만들어 놓은 것이 하나의 인터페이스가 된다.


이제 다시 위의 그림을 봅시다. 유저는 쉘과 대화를 나누고 다시 쉘은 커널과 대화를 나누는 식이라는 것을 그림으로 표현해 놓은 것이다. 그래서 쉘과 커널 사이에 인터페이스가 있는 것이다. 쉘을 사용하면 유저는 복잡한 커널단위의 연산들을 알 필요없이 쉘 상의 인터페이스로 시스템 자원들을 쉽게 관리할 수 있다. 이것이 바로 쉘이 생겨난 이유이다. 추가적으로 윈도우는 그래픽 쉘로서 GUI(그래픽 유저 인터페이스)를 제공한다. 때문에 일반 사용자들이 복잡한 cd명령어를 모르고도 단지 마우스 클릭만으로 디렉터리 안으로 접근할 수 있는 것이다.

Posted by 나무길 :