이번 시간에는 roadmap.sh 사이트에서 제공하는 인터넷에 대한 여러가지 영상을 요약 정리하는 시간을 가져보자.
https://roadmap.sh/guides/what-is-internet
How does the internet work? - roadmap.sh
Learn the basics of internet and everything involved with this short video series
roadmap.sh
인터넷이란 무엇인가?
인터넷의 아버지 중 한명인 "Vint Cerf"는 핵공격에도 살아남는 통신 시스템을 개발하기 위해 인터넷을 개발했다. 인터넷을 누가 관리하는가? 정답은 그 누구도 아니고 모든 사람이기도 하다. 인터넷은 중앙관리체계가 없고 스스로가 독립적인 주체가되어 다른 기기와 서로 통신한다.
전선, 케이블 그리고 Wi-Fi
인터넷은 우편시스템과 비슷하지만 전달하는 내용물만 다르다. 인터넷은 바이너리 정보를 전송한다. 바이너리 정보는 비트로 구성되어 있고 비트는 서로 반대되는 것의 한 쌍으로 정의된다. 예를 들어, On 과 Off, 1과 0, Yes와 No와 같이. 비트는 2개의 상태를 가지므로 이진 코드라고 부른다.
8비트가 모이면 1바이트가 되고, 1000바이트는 1킬로바이트이고 1000킬로바이트는 1메가바이트이다.
다시 돌아와서 인터넷의 모든 것은 비트로 나타나고 전송된다. 이것은 정보의 원자이다. 하지만 0과 1을 한 장소에서 다른 장소로 보내는 것과는 다르다. 그러면 실제로 유무선으로 보내지는 물리적인 것은 무엇일까?
불빛을 켜고 끄는 방법이나 모스부호로 소리를 내고 안내고 하는 방법이 있지만 이는 매우 느리고 오류도 많고 인간에게 의존합니다. 이를 개선하기 위해서 기계를 사용합니다. 오늘날 우리는 전기, 빛, 라디오 주파수로 비트를 전송합니다. 전기로 비트를 전송하려면 다음과 같이 켜고 끄는 장치를 사용할 수 있다.
하지만 문제가 있다. 0을 5번 연달아 보낸다는 것을 양쪽의 사람이 0의 수를 셀 수 있을까요? 바로 타이머로 1초에 1비트를 보내고 건너편의 사람은 매초 기록하여 확인할 수 있다. 예를들어 0을 연달아 5번 보내기 위해 작성자는 5초간 전기를 끈 상태로 유지하고 받는 사람은 매초당 입력을 기록한다.
우리는 이제 1초당 1비트보다 더 빠른 것을 원하게 될 것입니다. 그래서 대역폭(Bandwidth)을 늘려야겠죠. 대역폭은 장치의 최대 전송량입니다. 대역폭은 비트 전송률로 측정됩니다. 비트전송률은 보통 1초의 시간동안 보낼 수 있는 비트의 수를 말합니다.
또 다른 속도 측정 방법은 지연 속도(Latency)입니다. 이는 한 곳에서 다른 곳으로, 소스에서 요청 장치로 1비트가 이동하는데 걸리는 시간을 말합니다.
인간의 유추능력으로 볼 때, 초당 1비트면 무척 빠른 것이지만 사람이 하기는 힘들다. 기계는 가능하다.
하지만 여기서 중요한 것은 어떤 종류의 케이블로 메세지를 보내고 신호는 얼마나 멀리 갈 수 있는지이다. 이더넷 유선은 신호가 끊기거나 몇 백 미터만 떨어져도 간섭이 생길 것이다. 그래서 인터넷을 전세계의 사람들에게 전달하려면 다른 방법이 필요하다.
전선을 통하는 전기보다 더 빠른 것이 무엇이 있을까? 바로 빛이다. 광섬유 케이블을 사용하여 한 장소에서 다른 장소로 광선처럼 비트를 보낼 수 있다. 해저에 광섬유 케이블을 연결하여 다른 국가와 인터넷을 연결한다.
하지만 광섬유 케이블은 값이 비싸며 작업하기도 어렵다는 단점이 있다. 그럼 선이 없으면 어떻게 보낼 수 있을까? 바로 무선 비트 전송기계(Wireless)이다. 무선 비트 전송기계는 말 그대로 무선신호를 사용하여 한 장소에서 다른 장소로 비트를 전송합니다.
하지만 무선신호는 거리가 멀어지면 알아들을 수 없게 되버립니다. 오늘날은 유선 인터넷에 의존합니다. Wi-Fi를 사용하는 카페가 있다면 비트는 무선 라우터로 간 다음, 물리적인 선을 통해 전송되어 인터넷의 정말 먼 거리를 이동합니다. 물리적인 선을 통해 전송되는 방법은 미래에 바뀔 수도 있다. 예를 들면, 위성간 레이저 송신이나 풍선 또는 드론에서 쏘는 전파처럼.
하지만 기본적인 정보의 이진수 표현과 이러한 정보를 주고 받는 프로토콜은 상당 부분 동일할 것입니다.
IP 주소 및 DNS
인터넷은 프로토콜 집합으로 표현된다. 프로토콜은 표준화된 규칙들의 집합이고 모든 사용자들이 동의하면 문제없이 소통할 수 있게 됩니다. 인터넷이 실제로 어떻게 동작하는지를 아는 것보다 프로토콜만 알면 인터넷을 사용할 수 있다는 점을 아는 것이 더 중요하다.
대부분의 집과 회사가 주소를 가지듯이 컴퓨터도 고유의 IP 주소라는 것을 가집니다. 그리고 편지를 보내는 것과 마찬가지로 누가 보냈는지 보다는 받는 사람의 주소를 알아야 하며 편지가 우편체계를 통해 올바른 목적지로 잘 전달되게 주소를 제대로 적는 방법을 알아야합니다.
인터넷 통신도 이와 유사하게 진행되며 인터넷 통신에서 사용되는 가장 중요한 프로토콜 중 하나가 바로 IP 주소이다.
DNS(Domain Name System)이라는 시스템이 도메인 이름을 IP 주소와 연결시킵니다. 여러분의 컴퓨터는 DNS를 사용하여 도메인 이름을 찾고 여러분의 컴퓨터를 인터넷의 목적지로 연결하는데 사용한 관련 IP 주소를 얻습니다.
어떻게 DNS는 수십억 개의 기기를 위한 시스템을 설계하고 수십 억개의 웹 사이트 중 어느 하나를 찾아낼 수 있을까? 한 개의 DNS 서버로는 모든 기기에서 나오는 요청을 모두 처리할 수 없다.
이를 위해 DNS 서버를 분산된 위계체계로 연결하고 구역별로 나눕니다. 그리고 .org, .com, .net 등 메이저 도메인에 책임을 나누는 것입니다.
DNS는 원래 정부와 교육기관을 위한 개방형 공공 커뮤니케이션 프로토콜로 만들어졌기 때문에, 개방성으로 인해 사이버 공격에 취약합니다. DNS 스푸핑 공격이 바로 그 예시입니다. 해커가 DNS 서버로 들어와 도메인 이름을 다른 IP 주소와 매칭시킵니다. 그리하여 가짜 웹사이트로 가게 합니다. 사용자는 해당 웹 사이트가 진짜인줄 알고 사용하게 됩니다.
패킷, 라우팅 및 안정성
인터넷을 통해 한 컴퓨터에서 다른 컴퓨터로 정보를 전송할 때 고정된 경로를 따를 필요가 없다. 실제로 전송 중에 경로가 변경될 수 있습니다. 정보 전송은 패킷 형태로 이루어지며 이러한 패킷은 특정 요인에 따라 다른 경로를 따를 수 있습니다.
어떻게 인터넷이 신뢰성있게 정보를 전달할 수 있을지에 대해 생각해봅시다.
예를 들어 Spotify 사이트에서 노래를 하나 재생하고 싶다고 가정해보자. 우리는 우리와 Spotify 사이의 직접적인 전용 연결선으로 구성되어 연결선을 통해 정보를 주고 받는다고 생각할 수 있지만, 이는 사실과 다르다.
만약 위 가정이 맞다면 수 백만의 사용자가 동시에 로그인 하여 각자의 일을 하는 것은 불가능할 것이다. 특히 각각의 배선과 컴퓨터가 항상 가동된다는 보장이 없기 때문에 더더욱 그렇습니다.
한 컴퓨터에서 다른 컴퓨터로 정보를 전송하는 것은 고정된 경로를 따를 필요가 없습니다. 인터넷 상의 정보는 패킷이라고 불리는 것 안에서 한 컴퓨터에서 다른 컴퓨터로 갑니다. 그리고 패킷은 이동하는 동안 여행하는 것처럼 교통 체증이나 도로 상황에 따라 다른 경로를 선택하기도 합니다. 또는 어쩔 수 없이 다른 경로로 돌아서 동일한 장소로 돌아오기도 합니다.
매우 큰 용량의 이미지를 친구에게 전송하거나 웹 사이트에 업로드하고 싶으면, 그 이미지는 수 백만 비트로 구성되어 한 패킷 안에서 함께 보내기에는 너무 많습니다. 이미지가 컴퓨터에 있기 때문에 컴퓨터는 이미지를 패킷이라 부르는 수 백개 또는 수 천개의 더 작은 부분으로 쪼갤 수 있습니다. 하지만 달리는 트럭과 달리 이러한 패킷은 운전자가 없고 경로를 선택하지도 않습니다.
각 패킷에는 이것이 어디에서 왔으며 어디로 가는지 나타내는 인터넷 주소가 있습니다. 라우터라고 부르는 인터넷 상의 특수 컴퓨터는 교통경찰과 같은 역할을 하여 패킷을 순조롭게 계속 네트워크를 이동하게 됩니다. 한 경로가 막히면 패킷은 인터넷을 통해 다른 경로를 통해 약간 다른 시간에 심지어 제멋대로 목적지에 도달하게 됩니다.
만약 데이터를 요청하려고 하는데 아무것도 전달 받은 것이 없다면 어떻게 할 것인가요? 가령 노래를 듣고 싶은데 모든 데이터를 전달받아 노래가 완벽하게 재생된다고 어떻게 100% 확신할 수 있나요?
새로운 프로토콜인 TCP(Transmission Control Protocol)를 소개합니다. TCP는 패킷으로 전송 및 수신되는 모든 데이터를 관리합니다. 패킷들이 목적지에 도착하면 TCP는 데이터를 순서대로 정리하고 각 패킷을 수신했다는 확인서를 보냅니다.
패킷이 모두 있으면 TCP는 전달되었고 준비가 되었다고 신호합니다. 만약 일부 TCP가 일부 패킷이 빠져 있음을 발견하면 신호를 하지 않고 노래가 제대로 재생되지 않거나 노래의 일부가 없을 수 있습니다. 없어지거나 불안정한 패킷에 대해 Spotify는 응답하여 일단 TCP가 요청된 그 노래를 위해 패킷이 전달되었음을 확인하면 노래는 재생됩니다.
HTTP와 HTML
HTTP는 웹 페이지가 인터넷을 통해 전송되는 표준 프로토콜입니다. 우리가 웹 브라우저를 실행하여 주소창에 URL을 입력하면 해당 주소로 웹 사이트를 요청하게 된다. 그리고 웹 브라우저를 실행하는 우리 컴퓨터와 웹 서버는 주로 "GET" 요청이라 부르는 뭔가로 구성됩니다. 이는 매우 간단합니다. GET [문서이름] 으로 접근할 수 있습니다.
웹 서버는 HTML로 구성된 로그인 페이지를 응답합니다. HTML은 웹 브라우저에게 페이지가 어떻게 보여야 하는지 말하기 위해 사용하는 언어입니다.
웹 페이지의 텍스트는 HTML에 포함되어 있지만, 이미지나 동영상과 같은 다른 부분은 요청받을 때 필요한 고유 URL을 갖는 별개의 파일입니다. 브라우저는 이것들 각각에 별개의 HTTP 요청을 전송하고 그것들이 도착하면 표시합니다. 많은 이미지가 들어있어 별개의 HTTP 요청을 많이 하게 되면 페이지가 더 느리게 로딩됩니다.
우리는 GET 요청으로 페이지 요청만 하진 않습니다. 종종 양식을 작성하거나 검색어 쿼리 등과 같은 정보를 전달합니다. 브라우저는 이 정보를 평문으로 웹 서버에게 HTTP POST 요청을 사용하여 전송합니다.
로그인 하기 위해 이메일과 비밀번호를 입력하여 POST 요청을 웹 서버에 보내면 웹 서버는 유저를 확인하고 웹 페이지를 여러분의 웹 브라우저로 보내고 '성공!' 이라고 말합니다. 웹 페이지와 함께 브라우저가 보고 저장하기 위해 조그맣고 보이지 않는 쿠키 데이터를 부착합니다.
웹 사이트가 여러분이 누구인지 기억할 수 있는 유일한 방법이기 때문에 쿠키는 매우 중요합니다. 인터넷을 통해 전송된 개인정보를 해커가 몰래 볼 수 있습니다. 하지만 안전한 웹 사이트는 이를 방지합니다. 웹 브라우저에게 안전한 채널에서 커뮤니케이션 하라고 요청합니다.
안전한 채널은 SSL(Secure Socket Layer, 보안 소켓 계층)과 TLS(Transport Layer Security, 전송 계층 보안)을 사용합니다. 웹 사이트가 브라우저에게 안전한 연결상태에서 작업하라고 요청할 때, SSL과 TLS는 디지털 인증을 제공합니다. 디지털 인증은 요청된 웹 사이트임을 입증하는 공식 ID 카드와 같은 것 입니다. 디지털 인증은 웹 사이트의 신원을 검증하고 신뢰성있는 인증기관에서 발급합니다. 만약 이런 인증서 없이 요청을 보내게 되면 브라우저는 경고를 할 것입니다.
암호화 및 공개 키
암호화는 인터넷에서 우리의 통신을 안전하게 유지하는 것입니다. 인터넷에서 우리의 민감한 정보를 어떻게 안전하게 지킬까요? 데이터는 원래의 텍스트를 숨기는 메세지 변경 등의 프로세스를 통해 비밀이 유지됩니다. 이를 암호화라고 합니다. 그리고 해독은 메세지를 읽을 수 있도록 복호화하는 프로세스입니다.
과거에는 시저의 암호라는 알파벳을 동일한 숫자만큼 이동하여 암호화했습니다. 만든 사람과 받는 사람만 안다면 이를 키라고 합니다. 하지만 간단한 키는 가능한 키를 모두 시도해보면 누구라도 쉽게 암호화된 메세지를 풀 수 있습니다. 그래서 이를 더 어렵게 만들기 위해 각 글자를 다른 숫자만큼 돌리는 것입니다. 하지만 이것 또한 기계를 사용하면 쉽게 풀 수 있습니다. 풀 수 없도록 어렵게 만들기 위해서는 일정 시간 안에 계산해야 할 가능성이 너무 많다는 의미입니다.
시저의 암호처럼 보내는 사람과 받는 사람이 동일한 키를 공유하여 메세지를 변환하고 해석하는 것을 대칭 암호화라고 합니다. 대칭 암호화를 사용하려면 미리 양쪽이 비밀리에 비밀 키에 동의해야 합니다. 이는 사람끼리는 비밀리에 만나기 괜찮지만 인터넷은 모두에게 공개되어 있기에 비밀리에 만나 비밀 키를 공유할 수 없습니다.
그래서 컴퓨터는 비대칭 암호화 즉, 누구와도 교환할 수 없는 공개 키와 공유되지 않는 비공개 키를 사용합니다. 공개 키는 데이터를 암호화하는데 사용되며 누구라도 공개 키로 비밀 메시지를 만들 수 있습니다. 하지만 비밀 메세지는 비공개 키를 접근할 수 있는 컴퓨터로만 암호화 할 수 있습니다.
이런 방식으로 비밀 키에 대한 합의 없이도 비밀 메세지를 교환할 수 있다.
'Frontend' 카테고리의 다른 글
[Frontend_Roadmap] HTTPS 작동 방식 (0) | 2023.11.13 |
---|---|
[Frontend_Roadmap] HTTP와 HTTP의 구성요소 (0) | 2023.11.13 |
[Frontend_Roadmap] HTTP에 대해 알아야 할 모든 사실 (1) | 2023.11.11 |
[Frontend_Roadmap] 인터넷은 어떻게 동작하는가? 2 (0) | 2023.11.10 |
[Frontend_Roadmap] 인터넷은 어떻게 동작하는가? (0) | 2023.11.09 |