본문 바로가기

컴퓨터공학/네트워크

Chapter 1. 컴퓨터 네트워크와 인터넷의 소개

Chapter 1. 컴퓨터 네트워크와 인터넷의 소개

  1. 인터넷의 개요

    • Nuts-and-Bolts and Service Views
    • 프로토콜이란 무엇인가?
    • 네트워크의 종류들

인터넷은 무엇일까요? 이 질문에 대답하는 방법은 여러 가지가 있습니다. 첫번째 대답은 인터넷의 Nuts 와 bolts 에 대해 기술하면 됩니다. Nuts 와 Bolts 는 인터넷을 구성하는 기본적 하드웨어 및 소프트웨어 구성요소를 말합니다. 둘째로는 인터넷은 분포되있는 어플리케이션들에게 서비스를 제공하는 정보망 기반 시스템이라고 생각할수 있다는 점입니다. 그렇다면 nuts 와 bolts 가 구체적으로 무엇인지 알아보는것으로 이 포스팅을 시작하겠습니다.

인터넷 : Nuts 그리고 Bolts 살펴보기

인터넷 용어로는, 모든 디바이스들은 호스트(hosts) 또는 엔드 시스템 (end systems) 이라 불립니다. 즉, 호스트는 엔드 시스템이라 생각하셔도 됩니다. (Ex. 노트북, 스마트폰, 타블렛, TV, 게임용 콘솔 등)

엔드 시스템들은 커뮤니케이션 링크(communication links)와 패킷 스위치(packet switches)들로 이루어진 네트워크에 연결되있습니다. 커뮤니케이션 링크에는 다양한 방법으로 만들어진 여러 종류들이 있습니다. 예를 들면 동축 케이블(coaxial cable), 구리선, 광섬유, 그리고 라디오 스펙트럼이 있습니다. 이는 추후에 자세히 살펴보도록 하겠습니다. 다른 종류의 물질로 이루어진 링크들은 당연스럽게도 데이터를 각기 다른 속도로 전송합니다. 이 링크의 전송 속도(transmission rate)는 bits/second 단위로 측정됩니다. 어느 한 엔드 시스템에서 다른 엔드 시스템으로 데이터를 전송하면, 전송하는 엔드 시스템은 데이터를 잘게 쪼개서 각 세그먼트(조각)에 헤더 바이트(header bytes) 라는것을 붙입니다. 이렇게 해서 완성된 정보의 패키지는 컴퓨터 네트워크 상에서 패킷(packets)이라 불립니다. 패킷은 목적지인 또 다른 엔드 시스템으로 가게 되고 거기서 다시 재조합되어 원래의 데이터로 만들어지게 됩니다.

패킷 스위치는 커뮤니케이션 링크를 통해 전송되어 들어오는(incoming) 한 패킷을 잡아갑니다. 그리고 그 패킷은 나가는(outgoing) 커뮤니케이션 링크에 배치됩니다. 패킷 스위치는 정말로 많은 종류가 있기에 각기 다른 모양과 기능을 하고있습니다. 하지만 오늘날의 인터넷 환경에서 가장 주로 쓰이는 두개의 종류는 바로 라우터(routers)와 링크-레이어(link-layer) 스위치 입니다. 두 종류의 스위치들은 패킷들을 최종 전송지까지 보내는 역할을 합니다. 링크-레이어 스위치는 일반적으로 접근 네트워크에서 사용되는 반면, 라우터는 일반적으로 네트워크 코어에서 사용됩니다. 전송 엔드 시스템이 보내는 패킷이 목적지 엔드 시스템까지 여행할때 거치는 연속적인 커뮤니케이션 링크들과 패킷 스위치는 네트워크의 경로(path) 또는 길/루트 (route) 라고 불립니다.

(패킷을 전송하는) 패킷-스위치 네트워크는 (실제 운송 수단인) 고속도로, 도로 그리고 교차로의 운송 네트워크와 꽤 다양한 면으로 닮은점이 있습니다. 예를 들어, 어떤 공장이 매우 큰 (아마도 수천 톤) 짐을 수 천 킬로미터 떨어진 창고에 보낸다고 생각해보세요. 공장에서는 그 많은 짐들을 하나의 트럭에 실을 수 없으니 트럭을 다발로 대려와 실을겁니다. 각 트럭은 독립적으로 고속도로, 도로 그리고 교차로 네트워크를 여행하면서 목적지인 창고까지 갑니다. 목적지인 창고에서는 짐이 내려지고 그리고 다른 트럭들이 가져온 나머지 짐들과 결합합니다. 그래서, 살펴보면, 패킷은 트럭이라 생각할 수 있고, 커뮤니케이션 링크는 고속도로 그리고 도로, 패킷 스위치는 교차로, 마지막으로 엔드 시스템은 창고/공장 과 같은 건물이라 생각할 수 있습니다. 트럭이 운송 네트워크를 통해 간것처럼, 패킷이 컴퓨터 네트워크의 경로를 통해 간것이죠.

엔드 시스템은 인터넷 서비스 제공자 (ISP : Internet Service Provider)를 통해 인터넷에 접근합니다. ISP의 종류는 꽤 많습니다. 지역 케이블 또는 핸드폰 회사 같은 지역 ISP; 기업 ISP 들; 대학 ISP; 그리고 공항, 호텔, 커피숍, 다른 공공장소에 있는 ISP 는 와이파이 접근권한을 줍니다. 각 ISP 들은 ISP 스스로가 패킷 스위치와 커뮤니케이션 링크가 달려있는 네트워크 안에 들어있습니다. ISP 들은 엔드 시스템들에게 매우 다양한 네트워크 접근 권한을 부여합니다. 예를 들면, DSL 또는 케이블 모뎀과 같은 지역 브로드밴드 접근 권한이라던지, 매우 바른 지역 네트워크 권한, 무선 권한, 그리고 56 kbps 속도의 다이얼 모뎀 접근 권한 등등이 있습니다. ISP 는 또한 콘텐츠 제공자에게도 인터넷 접근 권한을 줍니다. 그렇게 하면 인터넷을 통해 웹 사이트를 바로 연결할 수 있죠. 아까 말씀드렸듯이 인터넷의 모든것은 엔드 시스템끼리의 연결이라고 생각하실 수 있습니다. 그래서 ISP 가 접근 권한을 부여한 엔드 시스템 끼리는 반드시 상호 연결이 된 상태여야만 합니다. 낮은 티어의 ISP 는 국가적 또는 국제적인 상위 티어의 ISP 들과 상호 연결되어 있습니다. 상위 티어의 ISP 는 AT&T, Sprint 그리고 NTT 를 예로 들 수 있습니다. 각 ISP 네트워크에서는, 상위 티어든 낮은 티어든, 독립적으로 관리되고 IP 프로토콜을 운영합니다. 이 ISP 에 관련된 사항은 여기까지 하고 후에 자세히 다루겠습니다.

엔드 시스템, 패킷 스위치 그리고 인터넷에서의 다른 조각들은 인터넷 내에서 정보를 주고 받는것을 컨트롤 하는 프로토콜(protocols) 을 운영합니다. TCP(Transmission Control Protocol) 과 IP(Internet Protocol) 은 인터넷에서 가장 중요한 두개의 프로토콜 입니다. IP 프로토콜은 엔드 시스템과 라우터 사이에서 주고받는 패킷의 유형을 구체화 합니다. 인터넷의 근본 프로토콜은 대체적으로 TCP/IP 로 알려져 있습니다. 이번 첫 포스팅에서 부터 프로토콜에 대해 알아보겠지만 이것은 시작일 뿐입니다. 앞으로 많은 부분이 컴퓨터 네트워크 프로토콜에 관련되어 있습니다. 즉, 그만큼 프로토콜이 중요하다는 의미겠죠.

프로토콜이 인터넷에서 중요하다는 전제하에, 전반적으로 프로토콜이 어떤일을 하는지 그리고 각 프로토콜의 종류마다 또 다시 어떤일을 맡는지 아는것이 중요합니다. 그래야지 상호 작동하는 시스템과 제품들을 만들 수 있습니다. 여기서 인터넷 표준(Internet standards) 이라는 개념이 적용됩니다. 이 인터넷 표준을 이용하여 TCP, IP, HTTP (Web 용) 그리고 SMTP (e-mail 용) 과 같은 것들을 정의하기 시작합니다. 네트워크 기초의 전체적인 맥락을 잡기엔 구체적으로 들어갈 필요가 없다고 생각하기에 인터넷 표준에 대한 내용은 여기서 끊겠습니다.

인터넷 : 서비스 제공의 관점으로 살펴보기

위에서 살펴본것은 인터넷을 이루는 수 많은 부품들을 각각 정의해본것 입니다. 하지만 인터넷을 완전히 다른 각도로 살펴볼 수 도 있습니다. 즉, 인터넷은 어플리케이션들에게 서비스를 제공하는 기반 시스템 이라고 할 수 있습니다. 어플리케이션은 전자 메일, 웹 서핑, 소셜 네트워크, 간편 메세지, VoIP, 비디오 스트리밍, P2P 파일 공유, 인터넷이 가능한 텔레비전 등등 을 예로 들 수 있습니다. 이런 어플리케이션들은 분산된 어플리케이션이라고 볼 수 있습니다. 왜냐하면 이 어플리케이션들은 서로가 정보를 교환하는 다수의 엔드 시스템을 포함하고 있기 때문입니다. 중요한것은, 인터넷 어플리케이션은 엔드 시스템 위에서 돌아갑니다. 네트워크 코어에 있는 패킷 스위치에서는 돌아가지 않습니다. 물론 패킷 스위치들이 엔드 시스템끼리의 데이터 교환을 활성화 시키는것은 맞지만, 패킷 스위치들은 데이터 자체를 생성시키거나 소모하는 어플리케이션과는 관련이 없습니다.

어플리케이션들에게 서비스를 제공하는 기반 시스템이라는것이 과연 무슨의미인지 조금더 살펴보도록 하겠습니다. 이를 좀 더 정확히 이해하기 위해서는, 당신이 분산된 인터넷 어플리케이션에 대해서 흥미로운 아이디어가 떠올랐다고 가정해봅시다. 아마 그 아이디어는 인류에게 큰 이득을 그들의 손에 쥐어줄 수도, 아니면 당신을 단순히 부자에다가 유명하게끔 만들어 줄 수 있습니다. 어떻게 아이디어를 실제 인터넷 어플리케이션으로 만들 수 있을까요? 어플리케이션은 엔드 시스템에서만 작동하기 때문에, 당연하게도 엔드 시스템에서 작동할 수 있는 프로그램을 작성할 필요가 있습니다. 예를 들면, Java, C 또는 Python 을 이용하여 프로그램을 작성할 것입니다. 또한, 분산된 인터넷 어플리케이션을 개발하는것이 목적이기 때문에, 다른 엔드 시스템에서 작동하고 있는 프로그램들은 다른 곳으로 데이터를 전송할 필요가 있습니다. 그리고 여기서 우리는 중요한 이슈에 부딪히게 됩니다. 바로 인터넷을 어플리케이션을 위한 플랫폼이라고 정의했던 사실 말이죠. 어떻게 한 엔드 시스템에서 작동하고 있는 프로그램이 다른 엔드 시스템에서 동작하고 있는 또 다른 프로그램에게 데이터를 전송하기 위해 인터넷을 활용할 수 있을까요?

인터넷에 탑재되어 있는 엔드 시스템들은 어플리케이션 프로그래밍 인터페이스, 즉 API(Application Programming Interface) 를 제공합니다. 이 API 는 한 엔드 시스템에서 작동하고 있는 프로그램이 또 다른 엔드 시스템에서 작동하고 있는 구체적인 목적지 프로그램한테 데이터를 전송하기 위해 인터넷 기반 시스템에게 어떻게 물어볼 것인지를 구체화 해 줍니다. 이 인터넷 API 는 데이터를 보내는 프로그램이 무조건 따라야하는 규칙들의 집합이라고 볼 수 있습니다. 그래야만 인터넷이 목적지 프로그램에게 데이터를 전송해 줄 수 있기 때문입니다. API 는 후에 구체적으로 포스팅 하겠습니다. 지금은 간단한 비유를 들어보겠습니다. 엘리스가 우체국 서비스를 통해서 밥에게 편지를 보내고 싶다고 가정하겠습니다. 물론 엘리스는 단순히 편지(data)를 쓴다음 그걸 창밖으로 던지고 밥에게 편지가 가길 기달릴순 없겠죠. 대신, 우체국 서비스는 엘리스에게 봉투에 편지를 넣을것을 요구합니다. 그래서 엘리스는 밥의 이름, 주소 그리고 도로명을 편지봉투 오른쪽 위 구석에 써넣습니다. 마지막으로 우체국의 빨간통에 편지를 넣고옵니다. 이렇게, 우체국 서비스는 자기만의 "우체국 서비스 API" , 엘리스가 편지를 밥에게 보내기 위해 반드시 따라야 하는 일련의 규칙들을 가지고 있습니다. 비슷한 방법으로, 인터넷 역시 프로그램이 다른 프로그램에게 데이터를 보내기 위해서 반드시 따라야 하는 API 를 가지고 있습니다.


이렇게 해서 인터넷을 바라보는 두가지 관점에 대해 기술해 봤습니다. 하나는 하드웨어와 소프트웨어의 구성요소 관섬으로, 또 다른 하나는 분산된 어플리케이션에게 서비스를 제공하는 기반 시스템으로요. 하지만 여전히 인터넷이 뭔지 헷갈리실 겁니다. 또한 TCP/IP 그리고 패킷 스위칭이 무엇인지도요. 라우터는 뭘까요? 어떤 종류의 커뮤니케이션 링크들이 인터넷에 있을까요? 조금 지치셨을겁니다. 하지만 걱정마세요. 조금씩 알아가 볼것입니다.

프로토콜이란 무엇일까요?

위 글을 읽으시면 어느정도 인터넷에 대한 감은 오셨겠죠? 아주 조금은요. 그렇다면 이제 컴퓨터 네트워크에서 또 다른 중요한 단어를 파헤쳐 봅시다. 아까전에 언급했던 단어 인데요. 바로 프로토콜 입니다. 프로토콜이란 무엇일까요? 프로토콜이 하는일이란 무엇이죠?

컴퓨터 네트워크에서 프로토콜을 이해하는 가장 쉬운 방법은 사람에 대고 비유를 하는것일 겁니다. 왜냐면 우리 사람들은 항상 프로토콜들을 실행하고 다니기 때문입니다. 당신이 어떤 사람에게 지금 시각을 묻기를 원한다고 상상해보세요. 일반적인 상호 교류는 아래 그림과 같습니다.

사람 프로토콜이 (일단 매너 좋은 사람이라고 해둡시다.) 다른 사람과의 커뮤니케이션을 시작하기 위해 인사("Hi") 로 처음 요청을 지시했습니다. 이 "Hi" 메세지는 일반적인 반응인 "Hi" 로 돌아오게 되죠. 암묵적으로, 한 쪽에서 "Hi" 라고 반응을 했다는것은 다른 하나가 그날 하루의 시간을 물어 볼 수 있음을 의미합니다. "Hi" 에 다른 반응들, 예를 들어 "방해하지마 !" 또는 "나는 영어 못해요" 같은 반응들은 아마 커뮤니케이션을 하지 못하거나 하기 싫다는 표시로 생각할 수 있습니다. 이런 경우에는, 사람 프로토콜은 그날 시간을 물어보지 않습니다. 때때로 질문에 대한 답을 얻지 못하는 경우도 있습니다. 이럴때 역시 그 사람에게 시간을 물어보기를 포기합니다. 우리의 사람 프로토콜에는, 우리가 보내는 특정 메세지들이 있고 그 받은 메시지를 답변하기 위한 특정 행동 또는 이벤트 (일정 시간동안 답을 하지 않는다던가) 가 존재합니다. 명확하게도, 전송되거나 받은 메시지들 그리고 이런 메시지가 보내지거나 받았을때 또는 어떤 이벤트가 발생했을때 취해지는 행동들은 사람 프로토콜에서의 중요한 역할을 하고있습니다. 만약 사람들이 다른 프로토콜을 실행시키면 (예를 들어, 어떤 사람은 매너 있게 물어보고 다른 사람은 무례하게 물어보고 또는 대답하는 사람이 시간에 대한 개념을 이해하고 있거나 이해하지 못하거나) 프로토콜들은 상호 작동하지 않을것이며 어떠한 유용한 작업도 성사되지 않을것입니다. 지금까지의 설명은 네트워크에서도 똑같이 적용됩니다. 작업을 완수하기 위해서는 상호 작용하는 두개 (또는 그 이상) 의 개체들이 같은 프로토콜을 작동하고 있어야 합니다.

이제 다른 사람 비유를 들어보겠습니다. 당신이 대학에서 컴퓨터 네트워크 수업을 듣고있다고 가정해봅시다. 선생님은 프로토콜에 대해 설명했고 초짜인 당신은 헷갈립니다. 선생님은 갑자기 멈추고 "질문은 없나요?" 라고 물어보게 됩니다. ( 이 메세지는 졸지 않는 모든 학생들에게 전달되어 받게 됩니다. ) 그때 당신은 손을 올립니다. (선생님에게 메시지를 전달하겠다는 의사표시를 전달) 당신의 선생님은 당신이 손을 듬을 알아채고 미소를 띄며 "그래요" 라고 말합니다. (당신이 질문을 물어볼것을 격려하게끔 메시지를 보냄 - 선생님들은 질문받는 것을 좋아합니다.) 선생님은 당신의 질문을 듣고 (당신의 질문을 받습니다.) 대답합니다. (당신에게 답장을 전송합니다.) 다시 생각해보면, 여기서도 메시지의 주고 받음이 있음을 알 수 있습니다. 그리고 메시지가 오갈때 일상적인 행동들의 집합들이 취해졌다는 사실도요. 이것이 질문과 대답 프로토콜의 핵심이라고 볼 수 있습니다.

네트워크 프로토콜

네트워크 프로토콜은 사람의 프로토콜과 비슷합니다. 단지 메세지를 교환하고 행동을 취하는것의 주체가 디바이스의 하드웨어 또는 소프트웨어 구성요소인 것만 제외하고요. (예를 들어, 컴퓨터, 스마트폰, 타블렛, 라우터 또는 다른 네트워크 디바이스). 두개 또는 그이상의 원거리 개체들의 커뮤니케이션을 포함하는 인터넷에서의 모든 행동들 은 프로토콜에 의해 조정됩니다. 예를 들어, 물리적으로 연결되어 있는 두개의 컴퓨터들 안에 있는 하드웨어에서 작동하는 프로토콜들은 두개의 인터페이스 카드들 사이에 존재하는 와이어내의 비트들의 흐름을 통제합니다. 엔드 시스템 내에 있는 혼잡(congestion)-통제 프로토콜은 발송기와 수신기 사이의 전송되는 패킷의 속도를 조절합니다. 라우터에 있는 프로토콜은 패킷이 가야할 시작점과 목적지의 경로를 결정합니다. 프로토콜은 인터넷 내의 어느곳에서든 작동하고 결과적으로 네트워크에 대한 대부분의 설명은 컴퓨터 네트워크 프로토콜에 관련해서 얘기할 수 밖에 없습니다.

컴퓨터 프로토콜에 대한 예제를 생각할때 아마도 웹 서버에 요청을 하는경우를 생각하면 쉽게 이해가 되실것 같습니다. URL 을 주소창에 입력한다음 웹 브라우저를 통해 웹 페이지로 접근합니다. 첫째로, 당신의 컴퓨터가 연결 요청 메시지를 웹서버로 보내고 답을 기다립니다. 웹 서버는 결과적으로 당신의 연결요청을 받고 연결 답장 메시지를 반환합니다. 웹 문서 요청의 허락이 떨어진것을 알차재마자, 당신의 컴퓨터는 웹 서버에서 꺼내 보기 원하는 특정 웹페이지 이름을 전송합니다. 마지막으로 웹 서버는 웹 페이지(파일)을 당신의 컴퓨터 전송합니다.

위의 사람과 네트워크 예를 통해서, 메시지를 주고받을때 메시지의 교환과 행동이 취해지는것이 프로토콜을 정의하는 핵심 요소라고 볼 수 있겠습니다.

프로토콜 은 두개 또는 그 이상의 상호 작용하는 개체들 사이의 메시지 교환 순서와 형식, 메시지를 받거나 발생하는 특정 이벤트를 정의합니다.


아 정말 깁니다. 그냥 정리하려고 올린건데 설명충이 되어버렸네요.

다음 포스팅 부터는 더 짧고 간결하게 올리겠습니다.. ㅠ