안녕하세요~
딥러닝을 사용하다보면 컴퓨터 한대로 작업하기 힘든 경우가 많이 있을거에요.
또한 이미지 또는 대용량의 데이터를 이용해 딥러닝 학습을 시키면 오랜 시간이 걸리기 때문에 업무가 끝나고 집에 도착해서 학습이 끝나는 경우가 많아요.
이러한 문제 때문에 딥러닝 서버를 구성해 원격으로 학습을 시키고 테스트 하는데요.
이번 글에서는 원격 접속의 원리에 대해서 간단하게 알아보도록 할게요!
1. TCP/IP 4계층 (or OSI 7계층)
컴퓨터들이 서로 데이터를 주고 받기 위해 통신을 하는건 알고있죠?
그런데 구체적으로 어떻게 주고 받는지 알고 계신가요?
세계 전문가들은 컴퓨터들이 데이터를 서로 주고 받을때 꼭 필요한 정보들을 정의 했어요.
<그림1>
흔히 이것을 OSI 7계층 또는 TCP/IP 계층이라고 해요. 여기서는 자세한 설명은 하지 않고 간단하게만 언급하자면 OSI 7계층, TCP/IP 두 용어는 모두 컴퓨터간 통신을 위한 합의된 규약이라고 보시면 되요. 이전에는 OSI 7계층이 주로 사용되었는데, 좀 더 간소화시키기 위해 TCP/IP 규약이 나오게 되었답니다.
<그림2>
예를 들어, A라는 컴퓨터에서 B라는 컴퓨터로 정보를 전달하려면 아래 그림처럼 통신규약에 따라 데이터를 생성, 송신, 수신하게 됩니다.
<그림3. 01001100011은 랜선과 같은 물리적인 전기 선을 의미>
좀 더 들여다보면 아래그림 처럼 각각의 계층이 필요로 하는 데이터들이 있어요. 아래그림을 보면 상위 레이어에서 점점 하위 레이어에 필요한 데이터 정보들이 추가 되는 것이 보이시죠? 쉽게 말하자면 TCP/UDP 레이어에서는 반드시 Upper layer의 정보가 필요하고, IP 레이어에서는 TCP/UDP, Upper 레이어의 정보들이 필요하다고 할 수 있겠어요.
<그림4>
원격접속을 위한 지식을 얻기 위해 어떤 계층을 눈여겨보면 될까요? 먼저 제일 필요하다고 생각되는 부분이 내 컴퓨터의 위치정보와 원격접속을 하기위한 컴퓨터의 위치정보일거에요.
이러한 위치정보를 생성해주는 곳이 IP 계층이랍니다. IP 레이어에서 요구되는 데이터 형식은 "IP header + 이전 상위 레이어의 정보"에요. 아래 그림에서 IP header를 보시면 source address, destination address 부분이 있죠? 이것이 통신을 위한 컴퓨터들의 위치정보를 표현하는것이라고 보시면되요.
<그림5>
IP 계층이 원격접속을 하기 위해 필수적인 정보가 들어있다는걸 확인했으니, 좀 더 자세히 IP에 대해서 알아보도록 할게요.
2. IP (Internet Protocol)
인터넷은 말 그대로 'inter(상호간의)+net(망)' 즉, 서로를 (연결해주는 거대한) 망이라고 보시면 되요. 앞서도 언급했지만 이렇게 서로 연결해주기 위해서 제일 중요한건 컴퓨터들이 위치한 곳이 어디인지 알고 있어야 해요. 그리고 위치마다 고유 ID(식별자)가 있어야겠죠? 여기서 혼동해선 안되는 점이 컴퓨터의 고유 ID를 알아야 하는것이 아니라 컴퓨터가 위치한 '위치 ID'라는 거에요! 그리고 이러한 '위치 ID'를 오늘날 'IP주소'라고 부른답니다.
<그림6>
3) IP 주소
IP주소는 현재 IPv4, IPv6 형식으로 나뉘어 져있는데 이곳에서는 IPv4를 기준으로 설명드릴게요.
IPv4는 4개 영역으로 구분이 됩니다. 각 영역당 4bit씩 할당되어 있기 때문에 각 영역당 0~255(=2^4) 범위를 포함하고 있죠.
<그림7>
IP 주소는 크게 5가지 클래스로 나눌 수 있어요. 일반적으로 가정, 학교 같은 곳은 C클래스에 해당되요. 그래서 대부분 집이나 학교같은 곳에서 '윈도우키->cmd->ipconfig 명령어 입력'을 하면 192.~.~.~ 와 같은 주소가 출력될거에요. 하지만 네이버 같은 곳은 대형 통신망에 해당하기 때문에 A클래스에 해당되요. (인터넷 브라우저에 125.209.222.141 IP 주소를 입력하면 네이버 서버에 접속하게 될거에요!) 참고로 D,E 클래스는 미래에 사용하기 위해 남겨둔것이랍니다~
그림8,9를 보면 '호스트 수', '서브넷 마스크'라는 용어가 나와 있을거에요. 그럼 지금부터 차례대로 이해해 보도록 할게요.
<그림8>
<그림9>
4) Network ID, Host ID
위와 같이 네트워크를 클래스로 나눈 이유는 뭘까요? 예를들어 대형통신망과 가정에서쓰는 통신망을 관리하는 체계가 같다면 어떻게 될까요? 대형통신망에서는 좀 더 복잡한 관리 기법이 필요하지만 가정에서는 그 정도로 복잡한 관리 기법이 필요하지 않을거에요. 그래서 통신망이 복잡한 정도에 따라서 클래스를 나누고 그에 맞게 네트워크 관리를 해준다면 좀 더 효율적이겠죠?
위와 같은 관점에서 IP주소는 좀 더 세부적으로 Network ID, Host ID 부분으로 나뉜답니다. 그리고 '그림9'를 보시면 Network ID 부분이 네트워크 클래스를 결정짓는걸 볼 수 있어요. 클래스A는 Network ID가 127개에요. 그렇다면 Host ID는 무엇일까요?
결론부터 말씀드리면, 대형통신망이 설치된 지역 한곳에 Network ID 하나가 할당되고, Network ID 하나당 2^24(Host ID -> 3개의 8bit 조합) 개의 Host ID가 부여되요. 예를 들어, 네이버에서 자신들이 이용하는 IP주소들이 있고, 구글 같은 곳에서 사용하는 IP 주소가 있을거에요. 관리차원에서 보면 네이버에서 사용되는 IP주소들과 구글이 사용하는 IP주소가 분류되면 더 효율적이겠죠? 이렇듯, 네이버라는 대형통신망 회사가 위치한 곳은 Network ID를 갖게되고, 네이버에서 따로 사용할 수 있는 IP주소들이 Host ID가 되는거에요. 당연히 통신망이 거대한 회사일수록 자신들이 갖아야 할 IP주소(Host ID)가 많아야겠죠?? 그래서 클래스마다 Host ID 개수가 차이가 나는거에요!
<그림10>
5) 서브넷팅 (Subnetting)과 게이트웨이, 라우터
서브넷팅을 하는 이유는 크게 두 가지에요.
첫 번째는 IP주소의 낭비를 막기 위해서에요. 예를들어, A클래스에 해당하는 네이버가 사용할 수 있는 Host ID가 2^24개인데, 2^12개만 사용한다고 하면 나머지 절반에 해당하는 IP주소는 낭비가 되겠죠? 만약, 네이버 회사에 하나의 Network ID만 부여되었다고 했을때, 2^24 Host ID 중 2^12 Host ID만 사용한다면 남는 IP 주소들은 다른 곳에서 사용가능하겠죠?
두 번째는 데이터 전송의 효율을 높이기 위해서에요. 예를 들어, 네이버에서 할당 받은 Network ID 하나로 2^24개의 Host ID를 관리한다면 굉장히 복잡할 거에요. 네이버에서도 네트워크가 굉장히 중요한 부서가 있고 네트워크를 자주 활용하지 않은 부서들이 있을거에요. 또한 부서들끼리의 물리적 위치도 서로 다르겠죠. 이때 네이버의 Network ID의 Host ID 들을 부서에 따라 다르게 분류하여 관리해주면 네트워크 효율이 올라갈 거에요.
다시 윗 그림을 참고해서 설명해볼게요. 예를들어, 우리학교의 컴퓨터학부(C클래스)가 192.1.1.0이라는 Network ID를 할당받았다고 할게요. 그런데 컴퓨터학부에는 소프트웨어 학과, 데이터과학 학과, 임베디드 학과, 네트워크 학과로 나뉘어있어요. 그리고 컴퓨터학부는 C클래스이기 때문에 255개의 Host ID를 부여 받을 수 있어요. 효율적인 네트워크를 나누기 위해서 아래와 같이 IP주소를 공평하게 분할 할 수 있으며, 이렇게 분할하는 기법을 서브넷팅이라고 하고, 분할된 주소의 첫 번째 주소에 해당하는 (빨간색) 부분이 Network ID와 비슷한 역할을 하며 이를 서브 네트워크 주소라고 해요. Network Id가 Host Id를 관리하는 것처럼 서브넷팅으로 나뉜 Host Id들은 서브 네트워크 주소(ID)가 관라하게 됩니다. 여기서는 각각의 서브 네트워크 ID가 64개씩의 Host ID를 관리하겠네요!
소프트웨어학과: 192.1.1.0~192.1.1.63
데이터과학학과: 192.1.1.64~192.1.1.127
임베디드 학과: 192.1.1.128~192.1.1.191
네트워크 학과: 192.1.1.192~192.1.1.255
참고로 이렇게 서브넷팅으로 나뉘어진 영역(학과)들끼리의 통신은 '라우터'를 통해서만 통신이 가능해요. 라우터는 다른 네트워크 영역들끼리 통신하기 위한 '장치(device)'이고, 다른 네트워크 영역들의 시작점이 되는 IP를 게이트웨이라고 합니다. 아래 4개의 학과에 빨간색으로 되어 있는 부분이 게이트웨이이고 라우터 장비를 통해 통신된다고 이해하면 되겠어요. 예를들어, 데이터과학과의 192.1.1.80에서 소프트웨어학과의 192.1.1.40 IP로 데이터를 전송하면 아래와 같은 순서로 전송되요.
192.1.1.80 -> 192.1.1.64 (데이터과학학과 게이트웨이) -> 라우터 -> 192.1.1.0 (소프트웨어학과 게이트웨이) -> 192.1.1.80
6) 서브넷마스크
서브넷마스크는 IP주소를 보고 Network ID를 알아내기 위해 도입된 개념이에요. 예를 들어, 클래스 A의 클래스가 125.209.222.141 이라고 했을때, 서브넷마스크가 255.0.0이라고 한다면 Network ID는 어떻게 될까요? 방법은 10진수를 2진수로 변경해 AND 연산을 하면 되요.
125.209.222.141 --> 1111101.11010001.11011110.10001101
255.0.0.0 --> 1111111.00000000.00000000.00000000
AND ============================
1111101.00000000.00000000.00000000
125.209.222.141 의 Network ID는 125.0.0.0이라는걸 알게되었어요. 그렇다면 서브네팅된 IP들은 서브넷마스크가 어떻게 구성될까요? 위에서 언급한 예시를 통해 다시 설명해볼게요.
아래예시는 C클래스에 속해있다는걸 알 수 있어서요. 그래서 Network ID에 24bit가 할당되고, Host ID에 8bit가 할당되는걸 알 수 있죠. 하지만 서브넷팅 기술을 이용하여 4개의 sub network id를 만들어 주었어요. 이때 sub network id를 표현하기 위해서 Host ID 8bit에서 상위 2bit가 사용된것을 볼 수 있었어요.
소프트웨어학과: 192.1.1.0 --> 11000000.00000001.00000001.00000000
데이터과학학과: 192.1.1.64--> 11000000.00000001.00000001.01000000
임베디드 학과: 192.1.1.128--> 11000000.00000001.00000001.10000000
네트워크 학과: 192.1.1.61-->11000000.00000001.00000001.11000000
기본 C클래스 마스크에 sub network를 만들어주기 위해사용된 두 비트를 결합하면 각 sub network에 해당하는 서브넷 마스크가 만들어지게 됩니다. 여기 예시에서는 11111111.11111111.11111111.11000000 라고 정의할 수 있으며, 10진수 표현으로 255.255.255.192가 되는걸 확인 할 수 있어요. 서브넷팅과 서브넷 마스크를 위해 26개의 bit를 사용한걸 확인 할 수 있네요.
만약 C클래스에서 Host ID의 8bit 중에 상위 한 개의 비트만 서브넷팅으로 사용한다면 어떻게 될까요? 이와 같은 경우에는 서브넷팅을 위해 25bit가 사용되었기 때문에 서브넷 마스크는 255.255.255.128 이되고, Host IP의 범위는 [0~127], [128~255]가 됩니다.
제가 지금 컴퓨터학부(192.1.1.0)의 데이터과학학과의 IP인 192.1.1.80 IP를 사용하고 있다고 한다면, 26개의 bit를 서브넷 마스크로 이용하고 있는 것이기 때문에 아래와 같이 요약해서 표현할 수 있어요.
192.1.1.80/25
3. DNS 서버
마지막으로는 상식 개념으로 DNS 서버에 대해서 알려드릴게요. CMD 창에 ipconfig /all 이라는 명령어를 입력하면 DNS 서버에 대한 정보도 ip주소로 출력이되는데, 이것이 의미하는바에 대해서 간단히 기술해 볼게요.
DNS는 Domain Name System이에요. 즉 우리가 보통 네이버를 들어갈때 네이버의 ip주소를 브라우저 창에 입력하는것이 아니고, www.naver.com 이라는 영문으로 입력해서 들어갑니다. IP 주소마다 고유의 이름을 domain name이라고 하고 이러한 domain name을 ip주소로 변환시켜주는 시스템을 domain name system이라고 불러요.
예를 들어, 아마존에서 제공하는 DNS(Domain Name System)에 대해서 알아보도록 할게요.
<그림11>
[순서]
① domain name "www.example.com" 입력
② 케이블 인터넷 공급업체, DSL 광대역 공급업체 또는 ISP(인터넷 서비스 제공업체)가 관리하는 DNS 해석기로 라우팅 된다.
이 후 순서는 여기를 참고하시거나 아래 유튜브 영상을 참고하시면 될 것 같아요!
중요한건 DNS(Domain Name System)을 이용하기 위해서는 DNS 관련 서버가 필요한데, 예를들어 우리학교에서 DNS를 이용하려면 DNS 서버를 구비하고 있어야 해요. 그래서 보통 DNS 서버가 우리학교의 외부 IP와 유사한걸 확인할 수 있어요 (외부IP에 대해서는 다음글에서 확인해 드릴게요~ 여기서는 그냥 우리학교의 고유IP라고 생각하시면됩니다!)
지금까지 네트워크 기초 중에서 IP와 관련된 기본 개념들을 알아보았어요!
다음글에서는 IP 종류들을 설명해보도록 할게요!
[글 참조]
http://korean-daeddo.blogspot.com/2016/01/blog-post_26.html
https://aws.amazon.com/ko/route53/what-is-dns/
[그림 래퍼런스]
그림1
https://www.onlinewebfonts.com/icon/500770
그림2
https://mrnamu.blogspot.com/2019/11/2-tcpip-4.html
그림3
https://www.youtube.com/watch?v=7zeiHfRB8SM
그림4
그림5
https://advancedinternettechnologies.wordpress.com/ipv4-header/
그림6
그림7
https://en.wikipedia.org/wiki/IPv4
그림8
https://www.youtube.com/watch?v=t_olN4OT9XY
그림9
https://engkimbs.tistory.com/622
그림10
http://korean-daeddo.blogspot.com/2015/12/ip.html
그림11
'딥러닝 개발환경' 카테고리의 다른 글
9-3. 윈도우 원격접속 (윈도우) (0) | 2020.04.17 |
---|---|
9-2. 원격접속 (배경지식2: IP 종류, 포트포워딩) (0) | 2020.04.17 |
8-6. VS code IDE에서 빠르게 github에 코드 업데이트하기 (0) | 2020.03.17 |
8-5. GUI로 git사용하기 (VS code IDE, Sourcetree) (0) | 2020.03.13 |
8-4. Github 사용하기! (0) | 2020.03.12 |