개요

이거 정말 마법같다.
근데 이거 정말 어떻게 가능한거지?

네트워크

우리는 어릴 때 실 전화기를 만들어 말해보면서 이런게 가능하구나 라는 것을 배웠었다.

사실 전세계는 거대한 해저 케이블로 연결되어있다.

스크린샷 2024-11-27 시간: 04 44 42

image

만약 두 개의 컴퓨터끼리 통신이 필요하다면 다른 컴퓨터와 물리적으로 유선 혹은 무선으로 연결되어 있어야한다.(실 전화기도 그러하듯이 네트워크는 마법이 아니다.) 이러면 케이블이 하나만 있으면 된다.
그러나 만약 컴퓨터 10개를 서로서로 연결하려면 총 45개의 케이블이 필요하다.
컴퓨터가 많아지면 많아질수록 케이블은 그만큼 더 많이 필요해진다.

그래서 라우터라는 것을 사용한다.
라우터란 전화 연결원 혹은 콜센터 직원과 같이 한쪽에서 들어오는 메시지를 다른 메시지에 전달하는 역할을 하는 소형 컴퓨터다.
라우터가 있으면 두 개의 컴퓨터를 서로 연결하듯이 각 컴퓨터에서 뻗어나가는 하나의 케이블만 있으면 된다.

image

이렇게 해서 하나의 컴퓨터 집단을 하나의 라우터로 연결하고 또 다른 라우터를 중심으로 연결된 컴퓨터들을 연결하려면 이 두 개의 라우터를 연결하는 식으로 마치 거미줄처럼 계속해서 확장시킬 수 있다.
또한 라우터는 일종의 통신원 역할을 하기 때문에 여러 통신 경로를 명확히하고 가장 효율적인 경로를 찾는 것이 중요해진다. 여기서 여러가지 알고리즘이 도입된다. 다익스트라, RIP등이 있다.

그러나 만약 충분히 거리가 가깝지만 또 그렇게 가깝지만은 않은 거리의 네트워크와 연결하려면 어떻게해야할까?
일반적인 가정집에는 이미 설비된 케이블이 있다.
바로 전화다.

우리의 네트워크를 전화시설에 연결한다. 그러기 위해서는 모뎀이라는 장비가 필요하다.
아마 집에 인터넷이 느리거나 연결이 잘안돼서 정비사를 불렀을 때 신발장 쪽 배선을 열어 체크하는 것을 본 적이 있을것이다. 그 기기가 바로 모뎀이다.

드라마 응답하라 시리즈를 본 적이 있다면 이해가 빠를 것이다.
가족 구성원중 누군가가 전화통화를 하면 인터넷이 굉장히 느려지거나 사용할 수 없게되는 장면이 나온다.

모뎀은 네트워크 정보를 전화 시설에서 처리할 수 있는 정보로 바꾸고 그 반대도 마찬가지다.
다음으론 우리의 네트워크에서 보내고자 하는 네트워크로 메시지를 보내는 것인데 이를 위해 ISP 즉, 인터넷 서비스 제공 업체에 연결한다. ISP는 다른 ISP의 라우터에도 엑세스할 수 있어서 통신사를 불문하고 연결할 수 있게 된다.
따라서 우리 네트워크의 메시지는 ISP네트워크를 통해 대상 네트워크로 전달될 수 있는 것이다. image

쉽게 설명하기 위해 이렇게 설명했지만 오늘 날에 모뎀을 사용하는 이유는 인터넷 신호와 네트워크 장치 간의 변환 및 호환성을 위해서다.
현대의 인터넷은 대부분 광대역 회선을 사용하는데 각 회선 기술에 따라 신호를 처리하고 변환하는 역할을 모뎀이 맡고 있다.

실제 전송은 광섬유, 케이블 등을 이용하고 모뎀은 이 신호를 표준화된 디지털 데이터를 바꿔주는 것이다.

위의 과정을 OSI 7 계층의 관점에서 한 번 정리해보자.
image

OSI 7 Layers는 국제 표준화 기구에서 정한 네트워크 통신의 표준이다.

  1. 우리가 사용하는 웹 브라우저는 애플리케이션 계층에 속해있고 웹 브라우저로 접속하여 메일을 작성하는 경우다. 보내기 버튼을 누르면 작성 내용이 애플리케이션에 의해 SMTP프로토콜로 준비된다.
  2. 그런 다음 이미지의 내용이 적절한 데이터 형식으로 변환되고 필요하다면 데이터를 압축하고 암호화한다.(프레젠테이션 계층)
  3. 컴퓨터와 이메일 서버 간에 통신 세션을 설정한다.
  4. 이메일 데이터가 여러 작은 패킷으로 나뉜다. 패킷이란 정보를 아주 잘게 쪼갠 것이라고 보면 된다. 이렇게 작은 패킷이 중간에 뒤섞이거나 할 수 있으니 패킷에 일련번호를 붙여 수신자가 정확한 메시지를 받을 수 있도록 한다.(TCP 프로토콜)
  5. 이메일이 인터넷을 통해 수신자의 이메일 서버로 가는 경로를 설정한다.
    발신자의 IP주소와 수신자의 IP주소를 확인하고 라우터를 통해 최적의 경로를 찾아 데이터를 전달한다.
  6. 이메일 패킷이 같은 네트워크에서 이동할 때 MAC주소를 사용해 실제 전송이 이루어진다.(MAC주소란 가지고 있는 네트워크 통신장비에 부여된 고유 번호이다. 노트북, 핸드폰 어디서나 직접 확인해볼 수 있다.) 이렇게 전송된 패킷은 네트워크 카드가 물리적인 신호로 변환한다.(네트워크 카드는 컴퓨터에 장착된 하드웨어 장치다.)
  7. 데이터를 전기 신호나 무선 신호로 변환하여 케이블, 광섬유등을 통해 전송한다.

이렇게 해서 네트워크를 연결할 수 있다는 건 알았는데 그럼 특정 네트워크를 어떻게 식별할까?
여기에는 우리에게 익숙한 IP라는 개념이 있다.

IP란 네트워크에 연결되어있는 컴퓨터의 고유한 주소를 말한다.
그러나 우리는 실제로 아이피를 기억하고 있지 않다. 내가 메시지를 보내려는 네트워크의 IP를 알지도 못하고 정작 내가 사용하는 네트워크의 아이피도 알지 못한다.
이게 가능한 이유는 도메인 네임이라는 개념 덕분이다.

우리는 www.example.com과 같은 규칙을 가진 이름을 기억하고 있다.
이게 바로 도메인 네임이다. 이렇게 도메인을 입력하면 DNS서버가 이를 통해 IP를 알아내고 서버에 연결시켜준다.
일종의 전화번호부라고 볼 수도 있겠다.

이렇게 해서 우리가 인터넷을 사용할 수 있는 것이다.

OSI 7계층

공학 분야를 공부하다보면 ISO라는 명칭이 자주 나온다. 이는 국제 표준을 정하는 단체로 대표적으로 화학의 1몰의 정의라던가 하는 것들이 있다.
마찬가지로 ISO에서는 컴퓨터 네트워크 프로토콜을 계층으로 표현한 모델인 OSI 7 Layer(Open System Interconnection 7 Layer)라는 표준을 발표했다.

각 계층에 대해 알아보자. image

유저와 맞닿아있는 부분이 Application 계층, 가장 멀리 떨어지고 사람이 이해하기 힘든 정보 형태를 띄는 곳이 Physical 계층이다.
우리가 브라우저로 네트워크 요청을 보내면 Application -> … -> Physical 계층으로 흘러가고 반대로 받는 쪽의 유저는 Physical -> … -> Application 계층으로 흘러간 정보를 확인하게 된다.

이제 각각의 계층을 살펴보자.
물리 계층은 데이터를 전송하는 물리적 링크를 설정, 유지, 절단한다.
이 신호들은 구리 선, 광섬유를 통해 전달된다.

데이터 링크 계층은 논리적 연결 제어, 매체 접근 제어, 하드웨어 주소를 지정한다.
점대점간의 신뢰성 있는 전송을 보장하는 계층으로 오류 제어와 흐름 제어가 필요하다.,
우리가 가진 네트워크 전자기기는 모두 MAC이라는 값을 가진다.
휴대폰, 노트북 모두 이 주소를 가지고 있다.
스위치 등이 이 계층에서 동작한다.

네트워크 계층은 라우팅, 흐름 제어, 세그멘테이션 등을 수행한다.
라우터가 이 계층에서 동작한다.
여기서는 우리가 흔히 아는 IP라는 개념을 사용한다. 이는 MAC과 비교해서 논리적 주소 구조라고 한다. MAC은 당연히 물리적 주소가 된다.
데이터를 패킷 단위로 분할해 전송 후 재결합한다.

전송 계층은 양 끝단의 사용자들이 신뢰성있는 데이터를 주고받도록 해준다.
이 과정에서 에러 제어와 흐름 제어를 담당한다.

세션 계층은 양 끝단의 응용 프로세스가 통신을 관리하는 방법을 제공한다.

표현 계층은 코드간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어준다.

응용 계층은 응용 프로세스와 직접 연계하여 응용 서비스를 수행한다.

## 정리

“우리는 모두 연결되어있다.”

여러 기기끼리 연결하려면 케이블이 엄청나게 많이 필요하게 된다.
따라서 중간에 라우터라는 소형 컴퓨터를 두어 컴퓨터끼리 연결시킨다.

서로 다른 네트워크 집합끼리 연결시키기 위해 전화설비를 이용한다.
이를 모뎀이라고 한다.

사용자가 Gmail을 통해 메일을 작성하고 전송 버튼을 클릭한다.
브라우저는 요청을 생성하고 사용자가 작성한 메일의 내용을 서버로 보낼 준비를 한다.
만약 HTTPS를 사용한다면 TLS는 핸드셰이크를 통해 서버와 키를 교환하고 이후 요청을 암호화하여 통신한다.

전송 계층에서는 애플리케이션에서 넘어온 요청을 작은 데이터 블록인 세그먼트로 나눈다.
각 세그먼트에는 TCP헤더가 추가된다.
TCP는 클라이언트와 서버 간의 신뢰성 있는 연결을 위해 3-way 핸드셰이크를 수행한다.

  1. 클라이언트 -> 서버로 SYN 패킷(서버에 접속을 요청하는 패킷)을 전송한다.
  2. 서버 -> 클라이언트로 SYN + ACK를 응답한다.
  3. 클라이언트 -> 서버로 ACK를 응답한다. 연결이 설정되면 데이터를 전송하기 시작한다.

전송 계층에서 받은 TCP 세그먼트는 IP 헤더가 추가되어 IP패킷으로 변환된다.
IP헤더에는 송신 IP, 수신 IP 패킷 길이, 프로토콜 정보가 포함되어있다.

패킷은 위에서 살펴본 라우터를 통해 목적지 서버까지 전달된다.

IP패킷은 데이터 링크 계층에서 이더넷 프레임으로 변환된다. 여기에는 위에서 살펴봤던 송신, 수신 MAC 주소등이 포함된다.
이 프레임은 컴퓨터에 장착된 하드웨어인 네트워크 카드를 통해 전기 신호나 무선 신호로 변환되어 물리 계층으로 전달된다.

수신 측에서는 역순으로 진행되어 지메일 서버에서 데이터를 처리한 뒤 수신자에게 메일을 전송한다.

이렇게 해서 우리는 메일을 주고받을 수 있는 것이다.