네트워크의 원리
개요
이거 정말 마법같다.
근데 이거 정말 어떻게 가능한거지?
네트워크
우리는 어릴 때 실 전화기를 만들어 말해보면서 이런게 가능하구나 라는 것을 배웠었다.
사실 전세계는 실 전화기와 같이 거대한 해저 케이블로 연결되어있다.
만약 두 개의 컴퓨터끼리 통신이 필요하다면 다른 컴퓨터와 물리적으로 유선 혹은 무선으로 연결되어 있어야한다.(실 전화기도 그러하듯이 네트워크는 마법이 아니다.)
이러면 케이블이 하나만 있으면 된다.
그러나 만약 컴퓨터 10개를 서로서로 연결하려면 총 45개의 케이블이 필요하다.
컴퓨터가 많아지면 많아질수록 케이블은 그만큼 더 많이 필요해진다.
그래서 라우터라는 것을 사용한다.
라우터란 전화 연결원 혹은 콜센터 직원과 같이 한쪽에서 들어오는 메시지를 다른 메시지에 전달하는 역할을 하는 소형 컴퓨터다.
라우터가 있으면 두 개의 컴퓨터를 서로 연결하듯이 각 컴퓨터에서 뻗어나가는 하나의 케이블만 있으면 된다.
이렇게 해서 하나의 컴퓨터 집단을 하나의 라우터로 연결하고 또 다른 라우터를 중심으로 연결된 컴퓨터들을 연결하려면 이 두 개의 라우터를 연결하는 식으로 마치 거미줄처럼 계속해서 확장시킬 수 있다.
또한 라우터는 일종의 통신원 역할을 하기 때문에 여러 통신 경로를 명확히하고 가장 효율적인 경로를 찾는 것이 중요해진다. 여기서 여러가지 알고리즘이 도입된다. 다익스트라, RIP등이 있다. 이러한 작업을 라우팅(최단 경로를 찾아 패킷을 전송)이라고 부른다.
이러한 작업이 정말로 일어나는지 궁금하다면 traceroute google.com
(리눅스), tracert google.com
(윈도우) 명령어를 터미널에 입력하여 테스트해보자.
그러나 만약 충분히 거리가 가깝지만 또 그렇게 가깝지만은 않은 거리의 네트워크와 연결하려면 어떻게해야할까?
일반적인 가정집에는 이미 설비된 케이블이 있다.
바로 전화다.
우리의 네트워크를 전화시설에 연결한다. 그러기 위해서는 모뎀이라는 장비가 필요하다.
아마 집에 인터넷이 느리거나 연결이 잘안돼서 정비사를 불렀을 때 신발장 쪽 배선을 열어 체크하는 것을 본 적이 있을것이다. 그 기기가 바로 모뎀이다.
드라마 응답하라 시리즈를 본 적이 있다면 이해가 빠를 것이다.
가족 구성원중 누군가가 전화통화를 하면 인터넷이 굉장히 느려지거나 사용할 수 없게되는 장면이 나온다.
모뎀은 네트워크 정보를 전화 시설에서 처리할 수 있는 정보로 바꾸고 그 반대도 마찬가지다.
다음으론 우리의 네트워크에서 보내고자 하는 네트워크로 메시지를 보내는 것인데 이를 위해 ISP 즉, 인터넷 서비스 제공 업체에 연결한다. ISP는 다른 ISP의 라우터에도 엑세스할 수 있어서 통신사를 불문하고 연결할 수 있게 된다.
따라서 우리 네트워크의 메시지는 ISP네트워크를 통해 대상 네트워크로 전달될 수 있는 것이다.
쉽게 설명하기 위해 이렇게 설명했지만 오늘 날에 모뎀을 사용하는 이유는 인터넷 신호와 네트워크 장치 간의 변환 및 호환성을 위해서다.
현대의 인터넷은 대부분 광대역 회선을 사용하는데 각 회선 기술에 따라 신호를 처리하고 변환하는 역할을 모뎀이 맡고 있다.
실제 전송은 광섬유, 케이블 등을 이용하고 모뎀은 이 신호를 표준화된 디지털 데이터를 바꿔주는 것이다.
위의 과정을 OSI 7 계층의 관점에서 한 번 정리해보자.
OSI 7 Layers는 국제 표준화 기구에서 정한 네트워크 통신의 표준이다.
- 우리가 사용하는 웹 브라우저는 애플리케이션 계층에 속해있고 웹 브라우저로 접속하여 메일을 작성하는 경우다. 보내기 버튼을 누르면 작성 내용이 애플리케이션에 의해 SMTP프로토콜로 준비된다.
- 그런 다음 이미지의 내용이 적절한 데이터 형식으로 변환되고 필요하다면 데이터를 압축하고 암호화한다.(프레젠테이션 계층)
- 컴퓨터와 이메일 서버 간에 통신 세션을 설정한다.
- 이메일 데이터가 여러 작은 패킷으로 나뉜다. 패킷이란 정보를 아주 잘게 쪼갠 것이라고 보면 된다. 이렇게 작은 패킷이 중간에 뒤섞이거나 할 수 있으니 패킷에 일련번호를 붙여 수신자가 정확한 메시지를 받을 수 있도록 한다.(TCP 프로토콜)
- 이메일이 인터넷을 통해 수신자의 이메일 서버로 가는 경로를 설정한다.
발신자의 IP주소와 수신자의 IP주소를 확인하고 라우터를 통해 최적의 경로를 찾아 데이터를 전달한다. - 이메일 패킷이 같은 네트워크에서 이동할 때 MAC주소를 사용해 실제 전송이 이루어진다.(MAC주소란 가지고 있는 네트워크 통신장비에 부여된 고유 번호이다. 노트북, 핸드폰 어디서나 직접 확인해볼 수 있다.) 이렇게 전송된 패킷은 네트워크 카드가 물리적인 신호로 변환한다.(네트워크 카드는 컴퓨터에 장착된 하드웨어 장치다.)
- 데이터를 전기 신호나 무선 신호로 변환하여 케이블, 광섬유등을 통해 전송한다.
이렇게 해서 네트워크를 연결할 수 있다는 건 알았는데 그럼 특정 네트워크를 어떻게 식별할까?
여기에는 우리에게 익숙한 IP라는 개념이 있다.
IP란 네트워크에 연결되어있는 컴퓨터의 고유한 주소를 말한다.
그러나 우리는 실제로 아이피를 기억하고 있지 않다. 내가 메시지를 보내려는 네트워크의 IP를 알지도 못하고 정작 내가 사용하는 네트워크의 아이피도 알지 못한다.
이게 가능한 이유는 도메인 네임이라는 개념 덕분이다.
우리는 www.example.com과 같은 규칙을 가진 이름을 기억하고 있다.
이게 바로 도메인 네임이다.
이렇게 도메인을 입력하면 DNS서버가 이를 통해 IP를 알아내고 서버에 연결시켜준다.
일종의 전화번호부라고 볼 수도 있겠다.
어플리케이션에서 상담원 전화 연결하기 버튼을 누르면 구체적인 번호를 내가 모르더라도 상담원과 통화를 할 수 있는 것처럼 말이다.
이렇게 해서 우리가 인터넷을 사용할 수 있는 것이다.
OSI 7계층
공학 분야를 공부하다보면 ISO라는 명칭이 자주 나온다. 이는 국제 표준을 정하는 단체로 대표적으로 화학의 1몰의 정의라던가 하는 것들이 있다.
마찬가지로 ISO에서는 컴퓨터 네트워크 프로토콜을 계층으로 표현한 모델인 OSI 7 Layer(Open System Interconnection 7 Layer)라는 표준을 발표했다.
각 계층에 대해 알아보자.
유저와 맞닿아있는 부분이 Application 계층, 가장 멀리 떨어지고 사람이 이해하기 힘든 정보 형태를 띄는 곳이 Physical 계층이다.
우리가 브라우저로 네트워크 요청을 보내면 Application -> … -> Physical 계층으로 흘러가고 반대로 받는 쪽의 유저는 Physical -> … -> Application 계층으로 흘러간 정보를 확인하게 된다.
이제 각각의 계층을 살펴보자.
물리 계층은 데이터를 전송하는 물리적 링크를 설정, 유지, 절단한다.
이 신호들은 구리 선, 광섬유를 통해 전달된다.
데이터 링크 계층은 논리적 연결 제어, 매체 접근 제어, 하드웨어 주소를 지정한다.
점대점간의 신뢰성 있는 전송을 보장하는 계층으로 오류 제어와 흐름 제어가 필요하다.,
우리가 가진 네트워크 전자기기는 모두 MAC이라는 값을 가진다.
휴대폰, 노트북 모두 이 주소를 가지고 있다.
스위치 등이 이 계층에서 동작한다.
네트워크 계층은 라우팅, 흐름 제어, 세그멘테이션 등을 수행한다.
라우터가 이 계층에서 동작한다.
여기서는 우리가 흔히 아는 IP라는 개념을 사용한다. 이는 MAC과 비교해서 논리적 주소 구조라고 한다. MAC은 당연히 물리적 주소가 된다.
데이터를 패킷 단위로 분할해 전송 후 재결합한다.
전송 계층은 양 끝단의 사용자들이 신뢰성있는 데이터를 주고받도록 해준다.
이 과정에서 에러 제어와 흐름 제어를 담당한다.
세션 계층은 양 끝단의 응용 프로세스가 통신을 관리하는 방법을 제공한다.
표현 계층은 코드간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어준다.
응용 계층은 응용 프로세스와 직접 연계하여 응용 서비스를 수행한다.
정리
“우리는 모두 연결되어있다.”
여러 기기끼리 연결하려면 케이블이 엄청나게 많이 필요하게 된다.
따라서 중간에 라우터라는 소형 컴퓨터를 두어 컴퓨터끼리 연결시킨다.
서로 다른 네트워크 집합끼리 연결시키기 위해 전화설비를 이용한다.
이를 모뎀이라고 한다.
사용자가 Gmail을 통해 메일을 작성하고 전송 버튼을 클릭한다.
브라우저는 요청을 생성하고 사용자가 작성한 메일의 내용을 서버로 보낼 준비를 한다.
만약 HTTPS를 사용한다면 TLS는 핸드셰이크를 통해 서버와 키를 교환하고 이후 요청을 암호화하여 통신한다.
전송 계층에서는 애플리케이션에서 넘어온 요청을 작은 데이터 블록인 세그먼트로 나눈다.
각 세그먼트에는 TCP헤더가 추가된다.
TCP는 클라이언트와 서버 간의 신뢰성 있는 연결을 위해 3-way 핸드셰이크를 수행한다.
- 클라이언트 -> 서버로 SYN 패킷(서버에 접속을 요청하는 패킷)을 전송한다.
- 서버 -> 클라이언트로 SYN + ACK를 응답한다.
- 클라이언트 -> 서버로 ACK를 응답한다. 연결이 설정되면 데이터를 전송하기 시작한다.
전송 계층에서 받은 TCP 세그먼트는 IP 헤더가 추가되어 IP패킷으로 변환된다.
IP헤더에는 송신 IP, 수신 IP 패킷 길이, 프로토콜 정보가 포함되어있다.
패킷은 위에서 살펴본 라우터를 통해 목적지 서버까지 전달된다.
IP패킷은 데이터 링크 계층에서 이더넷 프레임으로 변환된다.
여기에는 위에서 살펴봤던 송신, 수신 MAC 주소등이 포함된다.
이 프레임은 컴퓨터에 장착된 하드웨어인 네트워크 카드를 통해 전기 신호나 무선 신호로 변환되어 물리 계층으로 전달된다.
수신 측에서는 역순으로 진행되어 지메일 서버에서 데이터를 처리한 뒤 수신자에게 메일을 전송한다.
이렇게 해서 우리는 메일을 주고받을 수 있는 것이다.
IP
IP 주소는 위에서 보았던 것처럼 네트워크에 연결되어있는 네트워크 기기의 주소 값이다.
이와 유사한 개념이 MAC으로 데이터 링크 계층에서 통신을 위해 네트워크 인터페이스(컴퓨터를 조립할 때 이 부품을 찾아볼 수 있다.)에 할당된 고유 식별자다.
네트워크 계층의 IP와는 개념이 다르다.
IP는 다른 와이파이에 연결한다던지 하면 바뀔 수 있지만 MAC 주소는물리적인 고유 주소로 변경이 불가능하다. 로컬 네트워크에서 장치를 구분하기 위한 것이다.
같은 네트워크라면 MAC주소로 직접 통신하고 다른 네트워크에 있다면 IP로 위치를 찾고 MAC 주소로 실제 전송이 이루어지는데 이 때 ARP가 사용된다.
아무튼 이 IP주소는 IPv4와 IPv6가 있는데 우선 IPv4부터 살펴보자.
IPv4는 4개의 부분으로 구분되고 각 부분은 8비트로 이루어져있다.
예를 들어 192.0.0.1과 같은 형식이다.
이는 이진법으로 11000000.00000000.00000000.00000001
가 된다.
IP에는 클래스라는 개념이 있는데 가장 앞의 8비트를 네트워크 주소로 사용하는 A 클래스, 가장 앞에서부터 16비트까지를 사용하는 B 클래스 등등.
A 클래스는 약 1600만 개의 호스트를 지원한다. 그러나 이러한 클래스 기반 아이피 체계는 IP주소를 할당하는데 있어서 비효율적이었다.
예를 들어 한 회사에 디바이스가 300개라면 254개의 호스트를 허용하는 클래스 C를 사용할 수 없어 클래스 B를 사용해야했는데 클래스 B는 약 6만개의 호스트를 지원한다.
따라서 CIDR이라는 클래스 없는 주소 체계를 도입해서 사용한다.
하나의 네트워크를 잘게 쪼개어 사용하는 것이다.
예를 들어 192.0.2.0/24는 네트워크 주소 192.0.2.0과 서브넷 마스크 255.255.255.0으로 이루어져 있다. /25로 설정하면 총 ip수는 126개… 이런 식이다.
이것을 CIDR 주소 체계라고 하고 위와 같은 작업을 서브넷 마스킹이라고 한다.
하나의 네트워크를 여러 개의 작은 네트워크(서브넷)로 쪼개어 하위 네트워크들이 하나의 네트워크에 속하도록 덮어 씌우는(마스킹) 작업이라 그렇다.
예를 들어 192.168.100.0 와 같은 Ip가 주어졌다고 생각해보자.
이 아이피를 반이 6개인 학교에 할당하는 것이 목적이다.
000, 001, 010, 011, 100, 101을 사용해보자.
00으로 시작하는 서브넷 아이디로 하나의 서브넷 그룹을 만들 수 있고
나머지도 마찬가지이다.
그럼 앞의 비트 3개를 서브넷 아이디로 사용하고 나머지를 호스트 아이디로 사용하면 된다.
이렇게 하면 255 - (128+64+32)
00000000 ~ 00011111 192.168.100.0 ~ 31 하나의 서브넷당 네트워크 아이피와 브로드캐스트 아이피를 제외하고 30명의 호스트를 수용할 수 있다.
00100000 ~ 00111111 192.168.100.32~63
01000000~01011111 192.168.100.64~ 95
01100000~01100000 192.168.100.96 ~ 127
10000000~10011111 192.168.100.128~ 159
10100000~10111111 192.168.100.160~ 191
만약 5번째 서브넷의 사용가능한 마지막 ip주소를 구하라고 한다면 159에서 1을 뺀 192.168.100.158이 된다.
6개의 호스트를 가져야한다면 어떻게해야할까?
간단하다 255.255.255.0 즉 /24의 기본 서브넷 마스크에서 제일 마지막 비트 3개를 사용하면 다음과 같다.
- 000
- 001
- 010
- 011
- 100
- 101
- 110
- 111
네트워크 주소는
- 192.168.100.0
- 192.168.100.1
- 192.168.100.2
- 192.168.100.3
- 192.168.100.4
- 192.168.100.5
- 192.168.100.6
- 192.168.100.7
이중에서 사용할 수 없는 주소인 0과 7을 제외하면 총 6개의 서브넷이 만들어진다.
서브넷 마스크 값은 255.255.255.248이 된다.
반대로도 가능하다. 예를 들어 서브넷 마스크가 주어졌고 ip 주소가 주어졌다면 이 둘을 AND 연산하면 이 결과가 바로 네트워크 주소가 된다.
DHCP
DHCP란 동적으로 아이피를 할당하는 기술이다.
집에서 사용하는 데스크탑은 랜선을 꽂아 사용하는 경우라도 고정된 IP를 가질 것 같지만, 실제로는 대부분 공유기의 DHCP 기능을 통해 동적으로 IP를 할당받는다. 따라서 IP 주소는 재부팅이나 네트워크 재연결 시 변경될 수 있다.
정리해보자면 다음과 같다.
- ISP는 공인 IP 서브넷(예: 112.214.24.0/24)을 보유
- 고객 가정에 공인 IP 하나를 DHCP로 임시 할당 (ex: 112.214.24.51)
- 고객의 공유기가 그 IP를 사용하며 내부에서는 사설 서브넷(ex: 192.168.0.0/24) 구성
- 공유기는 사설 IP를 각 기기(PC, 스마트폰 등)에 DHCP로 할당
- NAT를 통해 외부와 통신 (모든 내부 IP는 공유기의 공인 IP로 나감)
클라우드 컴퓨팅
이렇게 공부해놓으면 클라우드를 사용할 때 유용하다.
- 집 전체 네트워크 = 하나의 사설망 → VPC
- 방마다 나눠진 컴퓨터 그룹 = 서브넷
- 패킷을 외부로 내보낼지 말지 판단하는 기준 = 라우팅 테이블
- 외부 인터넷으로 나가는 장치 = 인터넷 게이트웨이(IGW)
이런식으로 클라우드에서 실제 네트워크 동작 방식을 그대로 사용하고 있다.