본문 바로가기
전공백서/전기정보공학부

전기정보공학부: 데이터통신망의 기초

by STEMSNU 2024. 2. 29.

안녕하세요, 공우 14기 권태희입니다. 이번에는 조금은 생소할 수 있지만, 항상 우리 곁에서 다양한 서비스를 제공하는 데 사용되고 있는 네트워크에 대한 소개, 네트워크 설계를 이루는 근간과 철학에 대해 얕게나마 알아볼 수 있는 과목, 데이터통신망의 기초에 대해 소개드리려고 합니다.

1. 과목에서 배울 수 있는 내용

1.1 과목의 전반적인 개요

‘데이터통신망의 기초’는 전기정보공학부 로드맵 상에서 3학년 2학기에 수강을 권장하고 있는, 전공선택 교과목입니다. 지정된 권장 선이수 과목은 없지만, 더 깊은 이해를 돕기 위한 과목 추천은 2. 선배의 조언에서 간략히 설명해두었습니다.

수업은 네트워크가 무엇인지부터 시작하여, 네트워크 시스템이 어떻게 구성되어있는지를 소개하고, 이후 시스템을 구성하는 각 부분들에 대해 설명하는 방식으로 진행됩니다.

네트워크 시스템은 간단히 말하면 계층 구조로, layer들이 쌓여서 이루어진다고 볼 수 있습니다. 더 세부적으로 분리하는 경우도 있지만, 교재와 수업에서는 네트워크가 application layer, transport layer, network layer, link layer, physical layer의 다섯 가지 layer로 구성된다고 보고 설명을 이어갑니다. 수업에서는 application layer부터 network layer까지를 중점적으로 다루며, link layer는 일부만을 다룹니다. Link layer, 혹은 physical layer가 궁금하신 분들은 통신의 기초, 통신시스템 등 통신과 연관된 과목을 수강하시기를 추천드립니다.

이하에서는 수업 흐름과 동일하게, 전체적인 네트워크 시스템 소개에 이어 각 layer에 대한 대략적인 소개를 진행하도록 하겠습니다. 세부적인 내용이 궁금하신 분들은 교재(Computer Networking: A Top-Down Approach) 혹은 수업을 통해 알아가셨으면 좋겠습니다.

1.2 키워드 별 개념 설명

0) What is Network?

네트워크를 한 마디로 정의하는 것은 쉽지 않은 일이지만, 저는 제가 수업에서 배운 방식을 차용하여 설명드리도록 하겠습니다. 네트워크는 ‘reality’를 데이터로 표현하고, 이 데이터를 다른 곳으로 전송한 뒤, 전송받은 데이터를 통해 ‘reconstructed reality’를 표현하는 전 과정을 책임진다고 볼 수 있습니다. 간단하게는, zoom을 통한 회의를 진행할 때, 카메라를 통해 촬영되고 있는 저의 모습이 먼 곳에 떨어져 있는 다른 사람의 화면에 나타날 수 있도록 하는 것이지요. 흔히 네트워크라고 하면 데이터의 “전송 과정”을 위주로 생각할 수 있지만, 동일한 정보를 더 적은 양의 데이터를 통해 표현(compression)하고, 적은 양의 데이터로부터 원본에 가까운 현실을 복원해낼 수 있다면 더 빠른 전송이 가능하기에, 이러한 데이터의 coding-decoding 과정 또한 매우 중요하게 연구되고 있는 분야입니다.

1) Network Protocol Layers; Introduction to Network System

앞서 간단히 언급했듯, 네트워크 시스템은 여러 개의 protocol layer로 구성되어 있습니다. 위층부터 application, transport, network, link, physical layer로 구성되는 stack을, network protocol layers라고 합니다. 이때, protocol이란 ‘통신 규약’을 말합니다. 예를 들어, 1초에 1비트씩 수신되는 신호가 있을 때, 통신이 이루어지지 않을 때는 0이 계속하여 전송되고, 통신이 시작될 때는 1이 전송되며 신호의 시작을 알리고, 이후 총 10개의 비트가 전송된 뒤 통신이 끝난다와 같은 규약을 생각해볼 수 있습니다. 이는 sender와 receiver 중 한 쪽이라도 지키지 않는다면 문제가 생기기에, 양쪽 모두 이를 지켜야 함을 기본 가정으로 송수신 시스템의 설계를 진행해야 합니다. sender와 receiver 사이의 통신은 이러한 다섯 가지 protocol을 기반으로 하여 이루어지는 것입니다.

이제 sender (source)와 receiver (destination) 사이에서 통신이 진행시키기 위해, 각 네트워크 layer는 어떤 abstraction을 제공하는지에 대해 설명드리겠습니다.

Network Protocol Layers (출처: Computer Networking: A Top-Down Approach)

위의 그림은 source에서 전송한 data가 switch와 router를 거쳐 destination에 도달하게 되는 모습을 나타내고 있습니다. 이때, 네트워크에서 전송되는 데이터의 조각(큰 데이터의 경우에도, 특정 크기의 조각으로 잘라져 전송됩니다)을 공통적으로 ‘packet’이라 지칭하고, 그림에 나와있듯 각 layer에서의 packet은 message, segment, datagram, frame이라고 명명합니다.

Source에서는, 원하는 data를 우선 application layer protocol에 맞도록 적절한 형태로 가공합니다. 이때, data에 추가되는 정보를 header라고 합니다. 이어서 transport, network, link layer로 packet이 된 data가 전달됨을 그림을 통해 확인해볼 수 있는데요, 매번 각 layer에서 요구되는 packet이 추가됨을 확인해볼 수 있습니다. Packet이 switch, router를 거쳐 destination에 도착하면, 이번에는 가장 아래의 layer부터 한 단계씩 위로 올라가면서, source에서 추가해둔 header를 기반으로 적절한 작업을 수행한 뒤, header를 제거해주게 됩니다.

이러한 layered architecture에서 잊지 않고 기억해두면 좋은 점은, 각 layer에서는 해당 layer에서 아래쪽에 있는 layer들에서 제공하는 서비스를 활용한다는 것입니다. 예를 들어, network layer는 packet을 source에서 destination까지 이동시키는 역할을 맡고 있습니다. 이를 활용하여, source의 transport layer는 해당 layer에서 진행해야 하는 역할을 수행한 뒤, 나머지는 network layer 이하에서 해줄 것이라고 믿고 그 역할을 끝마칩니다. 또한, destination의 transport layer는 network layer 이하에 의해 packet을 잘 전달받고 자신의 역할을 수행한 뒤, header를 제거한 packet을 다시 application layer로 올려보내게 됩니다.

2) 각 layer의 역할

이제, 각 layer에서 수행하는 역할이 무엇인지에 대해 설명드리겠습니다.

Application layer는 우리에게 가장 친숙하게 느껴질 수 있는 layer입니다. 컴퓨터나 스마트폰에서 인터넷과 연관되어있는 모든 application, 간단하게는 Chrome와 같이 Web에 접속하기 위한 앱, 화상 통화를 가능하게 해주는 Zoom, 온라인 게임, 이메일, peer 간 파일 공유를 가능하게 해주는 Torrent 등은 application layer protocol과 뗄 수 없습니다. Application layer protocol에서는 교환되는 메시지의 종류, 각 application process가 message를 어떻게 보내고, 받은 message에 대해 어떻게 응답할지 등을 결정합니다. Application layer에서는 공통적으로, application에서 전송해야 할 data에 protocol에 맞는 header를 추가하여 packet으로 만들고, 이 packet을 transport layer로 전달하는 역할을 합니다.
Network application의 architecture는 크게 두 종류가 있는데, 첫 번째는 항상 응답을 위해 대기하고 있는 host가 존재하고, client에서 host에게 서비스를 요청하는 구조인 client-server architecture가 있고, 정해진 single host 없이, 네트워킹에 참여하고 있는 모든 peer들이 직접 communication하는 P2P architecture가 있습니다. 수업에서는 Web, e-mail, DNS, BitTorrent 등 몇 가지 대표적인 application에서 사용하는 protocol을 다루게 됩니다.

Transport layer는 서로 다른 host 상에 있는 application process 사이의 ‘logical communication’을 제공합니다. 이 말만 들어서는 조금 추상적으로 느껴지는데요, 이해를 돕기 위해 network layer의 역할을 먼저 말씀드리겠습니다. Network layer는 서로 다른 host 사이의 logical communication을 제공합니다. Transport layer에서는 아래 layer인 network layer에서 제공하는 서비스를 활용하기에, network layer에서 host 간 이동을 완료해주면, transport layer에서는 host 내에서 적절한 process로의 이동을 돕는 것입니다. 교재에서는 이를 우편 배송 과정에 비유하는데, network layer를 두 집 사이에서 편지를 배송하는 집배원의 역할로, transport layer는 집에 도착한 편지에 적힌 이름을 보고, 편지를 받아야 할 사람에게 전달해주는 역할로 이해하시면 됩니다.

Transport layer에서 제공하는 서비스에도 여러 가지 형태가 있을 수 있습니다. Application layer의 입장에서, transport layer로부터 제공받을 수 있는 서비스로는 packet이 전달되는 과정에서 손실(packet loss)되지 않는다는 보장, 여러 개의 packet을 차례로 전송했을 때, 전송한 순서가 보존되어 도착한다는 보장, packet 전달 과정의 throughput, 특정 시간 내에 packet이 destination에 도착한다는 보장 등, 많은 것들이 있을 수 있습니다. 따라서, application layer에서는 필요로 하는 서비스에 따라 transport layer protocol 중 어떤 것을 사용할 것인지 결정하게 됩니다. Transport protocol의 대표적인 protocol로는 TCP와 UDP가 있습니다. TCP의 경우, 전송한 packet이 손실되지 않고 순서가 보장되어 도착하며, congestion 상황에 대한 control algorithm 또한 제공합니다. 반면 UDP는 TCP에서 방금 언급한 어떤 것도 보장되지 않는 불안정한 protocol입니다. 그러나 그 만큼 가볍기에, UDP를 기반으로 필요한 기능만을 추가로 구현하여 사용 가능합니다. 여담으로, HTTP protocol (application layer)에서는 TCP의 reliable data transfer 특징을 이용해 왔었으나, 최근에는 UDP 기반에 필요한 기능을 구현한 protocol을 transport layer에 사용하는 방향으로 변화하고 있다고 합니다.

Network layer는 앞서 언급했듯, 두 host 사이의 packet transfer를 담당하는 layer입니다. Source host를 떠난 packet은 destination host에 도달하기까지, 앞서 그림에서 살펴보았듯 router와 switch들을 거치게 됩니다. Router와 switch의 동작은 매우 유사한데, 여기서는 network layer level의 router를 기준으로 설명을 이어가겠습니다.

Network Router's Operation (출처: Computer Networking: A Top-Down Approach)

Packet을 잘 전달하기 위해 network layer는 크게 두 가지 부분으로 나뉘어 각 부분의 역할을 수행하게 됩니다. 첫 번째 부분은 data plane으로, router의 input link로부터 packet을 받아, 적절한 output link로 내보내는 역할을 수행합니다. 두 번째 부분은 control plane으로, data plane에서 ‘적절한 output link’가 무엇인지 결정해주는 부분입니다. 이 과정에서는 Bellman-Ford algorithm, Dijkstra’s algorithm 등 최단경로를 찾는 알고리즘이 활용되기도 합니다.

2. 선배의 조언

데이터통신망의 기초는 로드맵 상으로는 3학년 과목이지만, 지정된 선이수 교과목이 없는 만큼, 사전에 알아야 하는 지식이 크지는 않기에 2학년 수강생도 따라가는 데 무리가 없다고 생각되기는 합니다. 다만, 개인적으로는, 컴퓨터 시스템에 대한 이해가 전혀 없으신 분이라면, 컴퓨터조직론 혹은 시스템프로그래밍 등을 통해 하나의 동작을 수행하기 위한 시스템에 어떻게 구성되는지 정도에 대한 약간의 이해를 가지고 수강하신다면 더 많은 것을 얻어갈 수 있는 수업이라고 생각합니다. 강의 중간에 통계적인 분석이 조금 동반될 때도 있기에, 통계학(교양) 혹은 확률변수 및 확률과정의 기초(전공선택필수)를 먼저 수강하는 것도 도움이 될 수 있고, 비슷하게 자료구조의 기초/알고리즘의 기초도 도움이 될 수 있습니다.

수업을 들으실 때는 꼭 교재(Computer Networking: A Top-Down Approach)를 진도보다 조금 앞서 읽어나가시는 것을 추천합니다. 네트워크에 대해 잘 설명되어있고, 때로는 예시를 들면서 이해하기 쉽게 정리되어있는 교재이기에, 수업과 별개로도 읽을 만한 좋은 책이라는 생각이 듭니다. 사실, 저는 수업을 완전히 소화하려면 꼭 교재를 읽어야 한다는 생각이 들었습니다. 특히, 저는 영어 강의를 들었는데, 잘 모르는 내용을 영어로 듣는 데 매우 취약하여 책을 미리 읽지 않은 날에는 놓치는 내용이 많았습니다. 반면, 책을 읽은 뒤에는 기본적인 개념 설명은 아는 내용의 복습 정도로 가볍게 듣고, 그에 추가되는 네트워크와 관련된 insight에 조금 더 집중하며 수업을 따라갈 수 있었어서, 배워가는 내용이 훨씬 더 많았다고 느껴집니다.

저는 책을 Obsidian을 통해 요약/정리하면서 읽었는데, 이를 통해 읽으면서도 이해도를 높일 수 있었고, 이전에 읽었던 부분을 빠르게 다시 보고 넘어가는 데 도움을 많이 받았다고 생각되어, 추천드립니다.

제가 수강할 당시 프로젝트는 2개로, 첫 번째는 C 기반으로 HTTP 및 Torrent를 구현하기 위한 소켓 프로그래밍을 진행하는 것이었고, 두 번째는 C++ 기반으로 Routing 알고리즘 3개를 구현하는 것이었습니다. C/C++ 프로그래밍 경험이 있으신 분들이라면, 시간 투자를 충분히 하신다면 수월하게 진행하실 수 있을 것 같습니다. C++은 전공필수 교과목인 프로그래밍방법론을 통해 대부분이 경험해보신 상태일 것이라는 생각이 들고, C는 C++을 해보셨다면 원활하게 하실 수 있을 것이며, 저는 시스템프로그래밍 과목에서 조금 경험해본 뒤 수강했었습니다.

이후 네트워크 관련하여 들을 수 있는 수업으로는, 학부 과목 중에는 실습 중심 과목이지만 ‘네트워크 프로토콜 설계 및 실습’이 있고, 그 이후에는 대학원 수업을 들어야 한다고 알고 있습니다. 수강 이후 네트워크에 대해 더 관심이 생기신다면, 대학원 과목을 찾아 들어보시는 것도 좋을 것 같습니다 :)

3. 진로 선택에 도움되는 점

수업 수강을 통해 네트워크에 대한 깊은 흥미와 관심을 가지게 되셨다면, 저는 제가 수강했던 학기에 수업을 진행하셨던 이경한 교수님 연구실(NXC Lab) 홈페이지에 들어가 보시는 것을 추천드립니다. 저는 Networking/Computing 분야에 ML을 결합한 연구 분야, AR/VR 관련된 연구 분야, 5G/6G 관련된 연구 분야 등이 있는 것으로 알고 있습니다. 물론 이후에 다른 네트워크 전공이신 교수님이 오실 수 있고, 제가 알지 못하는 교수님도 계실 것이기에, 관심 있으신 분들은 직접 찾아보심을 강력히 권장드립니다. 관련 산업 분야/회사에 대해서는 제가 너무 얕게 알고 있어 함부로 말씀드리기 조심스럽지만, 미래의 정말 많은 서비스에는 네트워킹이 적용될 것이므로(예를 들어, 자율주행에서는 중앙 통제를 통해 각 차의 움직임을 지시하는 등), 각자 관심사에 맞추어 네트워킹 관련된 세부 분야를 찾을 수 있을 것이라는 생각이 듭니다.

4. 맺음말

데이터통신망의 기초는 “네트워크가 어떤 일을 하고, 어떻게 구성되어 있는가”에 대한 질문에 대한 해답을 어느 정도 제공해줄 수 있는 과목이고, 조금 추상적으로는, 설계에서 발생하는 다양한 tradeoff와 문제들에 대해 교수님께서 던지는 질문을 고민하며 시스템이 어떻게 설계되었는지에 대해서도 조금이나마 알아갈 수 있는 과목입니다.

저는 이 수업을 수강할 때 장바구니 확정을 받아 편하게 수강신청을 하였는데, 끝까지 듣고난 뒤 이렇게 좋은 수업의 수강생이 수업 정원보다 적다는 점이 조금은 안타깝게(?) 느껴졌습니다. 제가 정말 애정을 가지고 공부한 만큼, 더 많은 분들이 들으셨으면 좋겠다는 생각이 듭니다. 네트워크에 진지하게 관심이 있으신 분들 말고도, 가볍게는 IP 주소, DNS, MAC 주소 등을 들어봤지만 그게 무엇인지 궁금해하는 분들께, 네트워크 기술을 근간으로 하게 될 다양한 기술들에 흥미가 있으신 분들께, 그리고 컴퓨터 시스템/아키텍처 관련하여 흥미를 가지신 분들께도 수강을 추천드리고 싶습니다.

내용이 방대하기도 하고, 초반에는 조금 낯설고 어렵게 느껴질 수도 있지만, 네트워크 설계 철학에 조금씩 다가갈수록 매 수업시간이 기다려질 수 있는 과목입니다 😊

댓글