Internet Intrdouction

sycho·2023년 9월 12일
0

Network

목록 보기
1/9

효율적이면서 보안상 문제가 없고, scalable(확장가능한) 애플리케이션/서비스를 개발하는데 인터넷을 이해하는 것은 필수적이고, 백엔드가 대체로 웹개발에서 일을 하다 보니 인터넷에 대해 자세히 알아볼 필요가 있다. 이번에는 간단히 훑는 정도로만 알아보도록 하자.

Internet

서로 연결된 컴퓨터들의 모임을 Network(네트워크)라고 말한다. Internet(인터넷)은 Network들의 모임을 일컫는 말이다.

현재는 전지구의 사람들을 연결하는 복잡한, 최적화된 네트워크로 진화했다. 원래는 그런 의도가 아니었지만.

크게 세개의 구역으로 나눌 수 있다.

  • The Last Mile : 집이나 작은 기업들을 연결하는 인터넷 영역. 광케이블, 전화선 등으로 연결된다.
  • Data Centers : 특정 서비스 제공을 위한 데이터들을 어마어마하게 저장한 곳. 여러 사람들에게 동시에 서비스를 제공해야 하다보니 인터넷 속도가 매우 빠르다. 일부 대기업들만 본인들 만의 data center을 가지고 있고, 대부분은 이를 제공하는 상업시설에서 할당받아가지고 활용하고 있다.
  • Backbone : Data center와 소비자 사이를 연결하는 물리적으로 매우 긴 광케이블 등을 말한다. 이를 제공하는 기업들은 자주 backbone들을 internet exchange point라는 곳으로 모아 놓는다. 이렇게 묶는 이유는 기업이 제공하는 다양한 네트워크들 간에 정보 교환이 이루어질 수 있도록 하기 위해서다.

흔히 웹과 인터넷을 동의어로 생각하는 사람이 많으나 웹은 인터넷을 활용한 application 중 하나일 뿐이다. 다른 유명한 예시로는 email, BitTorrent 등이 있으나 여기선 설명 안하겠다.

(참고할만한 영상)
What is the Internet?
The Internet : Wires, Cables, and Wi-Fi

How the Internet Works: An Overview

추상적으론 규격화된 protocol(프로토콜) 하에 장치들과 컴퓨터 시스템들이 연결되는 방식으로 인터넷은 작동한다.

프로토콜은 여러개가 있는데, 각기 연결된 장치들끼리 어떻게 정보교환을 하는지를 정하고 reliable data transfer(신뢰성 있는 정보 전달)이나 secure data transfer(안전한 정보 전달)을 보장하는 녀석들도 몇몇 있다.

하지만 프로토콜은 체계를 지정할 뿐이고, 물리적으로 데이터 전달을 담당하는 곳은 router(라우터)이다. 전송할 데이터는 일반적으로 packet(패킷)이라는 단위로 쪼개져서 router들 사이를 이동해 최종 목적지에 도달한다.

아까 프로토콜이 여러개가 있다고 했는데, 인터넷에서 주로 사용하는 프로토콜은 IP(Internet Protocol)와 TCP(Transmission Control Protocol)이다. 전자는 packet들이 router들을 통해 올바른 목적지에 도달하도록 보장해주고, 후자는 packet들의 reliable transfer과 올바른 순서로 도달하는 것을 보장해준다.

직접적으로 사용하는 위 2개 말고도 인터넷 기반 통신을 돕는 protocol로 DNS(Domain Name System), HTTP (Hypertext Transfer Protocol), SSL/TLS(Secure Sockets Layer/Transport Layer Security) 등이 있다.

이들이 어떻게 상호작용해 인터넷이 문제 없이 작동하게 하는지 꼭 알아야 한다.

Basic Concepts and Terminology

그 전에 용어 정리를 좀 하겠다.

  • Packet : 인터넷 상에서 전달되는 데이터의 단위다. 목적지 정보, packet 길이, 오류 탐지용 checksum등이 있는 header과 전송하려는 data 부위, 이렇게 2가지로 크게 나뉘어진다.
    참고로 router에서의 Packet의 전달은 언제나 성공할 필요가 없고, 실패할 수 있다. 이렇게 정한 이유는 인터넷 구조의 단순화를 위해서임. 확실한 전달은 송신자가 책임을 져야 하며, TCP 같이 송신자를 위해 확실한 전달을 보장해주는 프로토콜도 존재한다.
  • Router : 서로 다른 네트워크 사이의 packet 전달을 담당하는 장치
  • IP Address : IP 주소. network 상의 각 장치들이 가지는 고유값으로 packet이 전달될 목적지를 나타낸다.
  • Domain Name : 도메인 이름. 사람이 일반적으로 어떤 웹 사이트가 '무슨' 웹사이트인지 판별하는데 사용되는 이름. google.com이 대표적이다.
  • DNS : Domain Name System. Domain Name을 IP 주소로 변환하는데 사용.
  • HTTP : Hypertext Transfer Protocol. client(클라이언트)와 server (서버) 사이에 데이터를 전달하는데 이용되는 protocol. 웹브라우저(client)와 웹사이트(server)의 관계가 대표적이다.
  • HTTPS : HTTP over TLS. 보안이 강화된 HTTP도 client와 server 사이의 secure communication (보안된 통신)을 하는데 이용된다.
  • SSL, TLS : Secure Sockets Layer, Transport Layer Security. 인터넷에서 secure communication을 하는데 사용된다.

앞으로도 자주 볼 용어니 꼭 기억해두자.

(참고할만한 영상)
The Internet : Packets, Routing & Reliability

The Role of Protocols in Internet

아까 protocol이 장치들 사이에 정보교환을 어떻게 할지에 대한 규칙을 지정한다고 했다.

위에 이미 봤다시피 그 규칙들은 매우 많은데, 대체 왜 사람 피곤하게 protocol이 이렇게 많을까? 이게 궁금하면 다음 링크를 읽는걸 추천한다.
Apurv Mittal - Why do we have so many protocols?

위랑 별개로 또 이렇게 프로토콜이 많이 생긴 이유는 상상 이상으로 다양한 장치들이 상호작용을 해서 다른 protocol이 필요 + 특정 상황에 더 적합한 체계를 만들기 위해서라고 생각한다. 당장 위에 소개한 protocol들을 보면 각기 제 역할이 다른 것처럼 말이다.

그래도 적어도 '특정 protocol'에 대해서는 이를 사용하는 사람들끼리 그 protocol에서 지정한 체계화된 통신을 하는 것이 보장이 되며, 이것이 protocol의 역할이다. 여러 사람이 각기 자기 원하는 방식대로 정보교환을 하면 아비규환이 되는건 물론이거니와 정보교환 자체가 제대로 안될 확률이 높기 때문에 protocol은 인터넷을 위해 꼭 필요하다.

특히 개발자의 경우 본인이 개발한 프로그램이 인터넷 상에서 원할히 상호작용할 수 있도록 protocol들을 잘 이해하는게 중요하다. 그럼 하나씩 간략히 설명해보겠다.

Understanding IP Addresses and Domain Names

IP address가 device 구별을 위한 네트워크 내 고유값임을 말했었다. 보통 4개의 0~255 사이의, .으로 구별된 숫자로 이루어져있다. 192.168.1.0.처럼 말이다.

Domain Name은 사람이 읽을 수 있는 웹주소인것도 방금 말했었다.

사실 브라우저에 Domain Name을 입력하면 브라우저가 해당 Domain을 운영하는 server에다가 자료를 요청하게 되는데, 그러면 자료를 제공할 곳이 어디인지를 인터넷이 이해할 필요가 있고, 이를 위해서는 IP address가 필요하다. 이 변환을 담당하는 곳이 DNS다.

사용자가 브라우저에 주소를 입력 -> 컴퓨터가 DNS Server에 웹주소가 포함된 DNS Query를 전송 -> DNS Server에서 그 웹주소에 대응되는 IP address를 컴퓨터에 전송 -> 컴퓨터가 그 IP 주소를 활용해 원하는 data를 취득.

간단하게는 위와 같은 과정을 거쳐 통신이 이루어진다고 생각하면 된다.

아무래도 단일 DNS 서버에서 관련 정보들을 전부 저장하기 힘들기에 hierarchical structure (계층 구조)의 형태로 이루어져 있는데 자세히 설명하지는 않겠다.

DNS 서버의 내용을 조작해가지고 특정 domain의 주인인것'처럼' 행동하는 공격 방식도 있으며, 이를 막기 위한 표준인 DNSSEC이라는 것도 존재를 한다. 다만 이 표준이 만들어진지 꽤 시간이 많이 지났어도 21년 기준, second-level DNS 측에서는 5%정도밖에 사용이 안되고 있다.

IP 주소를 device에 할당하는 것은 ICANN (Internet Corporation for Assigned Names and Numbers) 부설의 Internet Assigned Numbers Authority에서 담당한다. 중복된 주소가 할당되는 것을 방지해준다.

다만 위의 IP 주소들만으로 이 세상의 모든 device를 구별하는 것이 슬슬 힘들어지자 (대략 43억개까지 표현이 가능했음) IPV6라는 것이 만들어졌다. 얘는 8개의 16진수로 이루어져있으며, 각 숫자의 범위는 0~65535나 된다. 대략 43억의 네제곱만큼 (약 3.4 * 10^38개)의 주소들을 나타낼 수 있다. 현재는 구글 접속자들 기준 약 45%가 활용하고 있다.

Domain Name의 할당도 ICANN에서 한다.

일반인이 컴퓨터를 사용할 때 할당받는 IP 주소는 보통 ISP (Internet Service Provider)에서 제공하는 주소를 활용한다. 예를 들어 집에서 인터넷을 사용할 때 kt에서 제공하는 인터넷을 사용한다면 ISP가 kt인 것이고, kt에서 제공하는 주소를 활용하는 것이다.

Local Area Network같은 근거리 통신망의 경우에는 ISP에서 IP를 제공받는게 아니라 본인이 IP를 직접 설정하거나, DHCP (Dynamic Host Configuration Protocol)로부터 IP 주소를 받아야 한다.

(참고할만한 영상)
The Internet : IP Addresses & DNS

Introduction to HTTP and HTTPS

인터넷 기반 애플리케이션 / 서비스에서 보통 활용하는 protocol이다. 아까 브라우저가 Domain Name을 입력시 자료를 Domain을 운영하는 server에 요청한다고 했는데, 이때 활용되는 것이다. 이때 요청을 HTTP Request, 답변을 HTTP response라고 하며 정상적인 통신에서는 HTTP response에 원하는 자료가 들어 있다.

HTTPS는 HTTP에 SSL/TLS encryption을 추가해서 secure communication을 보장해준다.

HTTPS를 활용하고 있으면 secure communication을 보장해주기에 위와 같이 자물쇠가 나타나게 된다.

참고할만한 영상
The Internet : HTTP and HTML

Building Applications with TCP/IP

그러나 HTTP는 단순히 애플리케이션과 서버 사이의 메세지 규칙을 정할 뿐이다. 이 메세지들을 전달하는것과 관련된 protocol은 TCP(Transmission Control Protocol)와 IP다.

IP는 아까 자세히 다뤘으니 넘어가고, TCP에 대해 좀 얘기해볼건데, 앞에 말했듯이 reliable transfer, 올바른 순서 도달을 보장해주며 전달받은 data에 오류가 있는지도 확인해준다. 여기서 몇개의 용어를 더 알아볼 필요가 있다.

  • Ports : 포트. 장치에서 돌아가고 있는 application/service를 구별하는데 사용된다. 컴퓨터에 여러개의 브라우저가 돌아가듯, 보통 하나의 장치에는 여러개의 application/service가 실행되고 있는데 이들 중 누구에게 도착한 data를 전달해야 할지 TCP가 확인하는데 사용된다. 숫자로 구별되며, 이 숫자를 port number이라 한다.
  • Sockets : 소켓. IP주소와 port number의 조합으로 만들어지는 추상적인 구조물인데, TCP에서의 통신의 양 끝은 두 Socket이 담당을 한다. 장치들간의 통신 및 application들의 data 전달에 사용이 된다.
  • Connections : TCP에서의 통신이다. 앞에 말했듯 두 socket을 끝점으로 구축이 되는데, 그냥 구축되는 것이 아니고 maximum segment size, window size 등의 여러 parameter을 어떻게 할지 정하고 구축이 된다.
  • Data transfer : 데이터 교환 위의 connection 이후에는 서로 데이터 교환이 가능해진다. 이 교환에서 사용되는 데이터 단위는 IP랑은 다르게 segment다. segment에는 reliable transfer을 위한 sequence number과 여러 metadata들이 포함되어 있다.

단순히 애플리케이션에서 흔히 사용되는 HTTP, FTP (File Transfer Protocol), SMTP (Simple Mail Transfer Protocol)만 알아서는 안된다. 애플리케이션 사이의 정보 교환을 돕는 TCP를 잘 이해하고, 본인의 application/service가 적절한 port, socket 상에서 놀고 connection을 다른 device와 적절히 구축하고 있는지 인지할 필요가 언제나 있다.

이를 기반으로 앞에 말한 효율적이고 scalable하면서 보안상 안전한 application, service를 만들 수 있게 되는 것이다.

protocol stack

위에서 설명한 개념들은 사실 하나의 계층 구조로도 볼 수 있으며, 이를 protocol stack이라고 부른다.

protocol stack은 흔히 다음과 같은 layer로 구별이 된다.

  • Application Protocols layer : HTTP, WWW 등
  • Transmission Control Protocol Layer : TCP, UDP 등
  • Internet Protocol Layer : IP
  • Hardware Layer

위에서 아래로 갈수록 관련 layer의 정보들이 전송될 data에 추가가 된다. 아래에서 위로 갈수록 이것들이 보통 적출되고 최종적으로 실제 필요한 data만 user에게 제공이 된다.

Securing Internet Communication with SSL/TLS

secure connection을 위한 protocol이라고 앞에서 말했다. 여기서도 몇개의 용어를 알아볼 필요가 있다.

  • Certificates : 인증서. connection을 구축하려는 client와 server이 서로를 믿는데 사용되는 녀석이다. server이 client가 예상하는 녀석임을 보장하는데 사용되며, Certificate가 유효하다는 것을 보장해주는 Certificate Authority라는 곳이 따로 존재한다.
  • Handshake : 안전한 통신을 구축하는데 사용될 encryption algorithm (암호화 알고리즘)과 parameter들을 정하는 절차다.
  • Encryption : 안전한 통신이 구축이 되면, handshake때 결정한 encryption algorithm을 활용해 data가 encrypt된 채로 전송이 된다. 이러면 보안상 안전한 data transfer이 가능해진다.

application/service는 SSL, TLS를 잘 이해해가지고 개인정보가 유출되지 않고 보안상 안전하게, 원하는 대상에게만 전달 될 수 있도록 활용하는 것이 중요하다.

특히 service를 운용하는 서버 관리자는 유효한 SSL/TLS certificate을 확보하고, SSL/TLS 연결을 구축하기 위한 가장 효과적인 방법을 생각하는 것도 중요하다. 그래야 integrity(무결성)랑 confidentiality(기밀성)를 인터넷상에서 확실히 보장받을 수 있기 때문.

(참고할만한 영상)
The Internet : Encryption and Public Keys
The Internet : Cybersecurity & Crime

Wireless Network

요즘은 무선 인터넷 접속을 안 쓰는 사람은 없을 것이다. Wifi라든가.

무선 인터넷 접속은 크게 wifi, cellular이 두 개로 구별이 가능하다.

wifi의 특징은

  • 구축이 단순함 (그냥 장비를 사서 집에 설치하면 된다)
  • 아무나 사용이 가능. (물론 비밀번호 등으로 어느정도 방지는 가능하나, 그것만 알거나 사용이 안되는 공공 와이파이는 어마 무시한 사람이 사용할 수 있다.)
  • 타 네트워크와의 간섭을 방지하기 위해 출력이 약하고, 범위도 좁은 편

cellular의 특징은

  • cellular network를 제공하는 cell들이 지역 곳곳에 퍼져 있는 형태로 구성됨. 이 cell은 골목단위일 수도 있고, 몇킬로미터 단위일 수도 있다.
  • 각 cell마다 그 cell 내의 연결을 담당하는 tower(전파탑)이 있다.
  • 장치가 cellular network 안에서 이동시 다른 cell로 이동할 수 있는데, 이때 기존 cell의 tower에서 이동한 cell의 tower이 연결을 담당하도록 넘겨주면서 인터넷이 안 끊길 수 있도록 해준다.
  • 해당 네트워크는 아무나 사용하는게 안되고 제공자(기업)에서 승인한 사용자들만 사용이 가능
  • 기업이 이런 용도로 사용될 전파를 얻으려면 경매를 통해 license를 확보해야 한다.

Cloud

인터넷을 활용한 컴퓨팅으로 현실에서 자주 볼 수 있다. 사용자의 소프트웨어 설치, 파일 관리를 위한 기술적인 조치를 할 필요가 없게 해준다. 또 사용자 입장에서 reliability도 크게 증가함.

대표적인 예시들로는

  • Google Docs : 어느 컴퓨터에서든 동기화된 문서를 가지고 작업을 할 수 있고, 하드 고장으로 인한 파일 유실을 걱정할 필요가 없다.
  • Gmail / Hotmail : 기존의 데스크탑 기반의 Outlook을 대체한 인터넷 기반 메일서비스
  • Dropbox : 어느 컴퓨터에서든 동기화된 파일을 확인 및 다운로드 할 수 있음. (플로피 디스크, USB등이 불필요해짐)
  • iCloud : 애플 기기간의 동기화를 쉽게 해줌. 서로 다른 기기의 연결을 위한 USB 연결이 불필요해짐.
  • Amazon Web Service : 인터넷 상에 서비스를 제공하려는 기업들이 더이상 직접 서버 구축을 할 필요가 없어짐.

인터넷과 관련된 요즘 유행하는, 혹은 최근에 많이 발전된 기술들로는

  • 5G : 최신 모바일 네트워크 기술로 4G 대비 빠른 속도, 낮은 지연시간, 그리고 큰 수용량을 자랑한다.
  • IoT (Internet of Things) : 사물인터넷. 가전제품 등 다양한 사물들끼리 인터넷을 통해 연결해 상호작용하는 개념. 건강관리, 운송, 제조업 등에 활용되고 있다.
  • AI (Artificial Intelligence) : 기계학습, 자연언어처리 등은 이미 여러 application, service 등에 음성으로 읽어주기, 사기 탐지 등의 용도로 활용되고 있다.
  • Edge computing : data의 처리, 보관을 중앙 data center이 아닌 network의 edge상에 존재하는 기기들에서 담당하도록 하는 개념. 지연시간이 거의 없는 애플리케이션 개발이나 실시간 분석 등에 활용될 수 있다.

당연하지만 이렇게 최근에 유행하는 기술들이 뭔지 이해하는것도 개발자 입장에서 매우 중요하다.

참고 자료
cs.fyi - How does the Internet Work?
Vox(Timothy Lee) - The Internet Explained
Stanford(Rus Shuler) - How Does the Internet Work?
roadmap.sh - How does the internet work?

profile
CS 학부생, 핵심 관심 분야 : Embed/System/Architecture/SWE

0개의 댓글