01-1. 컴퓨터 네트워크를 알아야하는 이유
- 컴퓨터 네트워크(computer network, 네트워크) - 여러 장비를 그물(Net)처럼 서로 연결하여, 정보를 주고받을 수 있는 통신망
네트워크의 네트워크, 인터넷
- 인터넷(internet) - 여러 네트워크를 연결하는 네트워크 (네트워크의 네트워크)
- 네트워크에 연결된 주변 장치와 더불어 (네트워크에 연결되어 있는) 멀리 있는 장치와도 정보를 주고 받을 수 있음
개발자가 컴퓨터 네트워크를 알아야 하는 이유
- 프로그램을 만드는 업무에서의 상황
- 일부 라이브러리는 네트워크에 대한 배경 지식이 있어야 활용할 수 있음
- 프로그램의 안전성 및 안정성이나 보안 향상 등을 위해서 네트워크 지식이 활용됨
- 프로그램을 유지 보수하는 업무에서의 상황
- 인터넷 연결이 안되거나, 웹 서버가 동작하지 않는 문제 등의 해결에 실마리가 됨
01-2. 네트워크 거시적으로 살펴보기
시작하기 전에
네트워크는 노드, 간선으로 이루어진 그래프의 형태를 띠고 있음
- 노드(node) - 정보를 주고받을 수 있는 장치, 정점(vertex)라고도 부름
- 간선(edge) - 노드와 노드를 연결함, 링크(link)라고도 부름
- 그래프(graph) - 각 노드를 연결하는 간선으로 연결된 자료 구조

네트워크의 기본 구조
네트워크는 호스트, 네트워크 장비, 통신 매체, 메시지로 구성됨
- 호스트(host) - 네트워크에 가장자리에 위치한 노드로, 네트워크를 통해 흐르는 정보를 최초로 생성 및 송신하고, 최종적으로 수신함 (우리가 사용하는 일반적인 네트워크 기기)
- 네트워크의 가장자리에 자리 잡고 있다는 점에서 종단 시스템(end system)이라고도 부름
- 호스트를 네트워크 내에서의 특정 역할에 따라 서버와 클라이언트로 나눌 수 있음
- 서버(server) - 서비스를 제공하는 호스트 (ex. 파일/웹/메일 서버)
- 클라이언트(client) - 서버에게 서비스를 요청하고, 서버의 응답을 제공받는 호스트 (ex. 웹브라우저)
- 네트워크 장비(중간 노드) - 호스트끼리 주고 받는 정보가 중간에 거치는 노드 (허브, 스위치, 라우터 등)
- 다만, 호스트와 네트워크 장비를, 서버와 클라이언트를 완전 베타적인 것으로 생각하면 안됨
- ex. 데스크탑을 일반적으로 사용(호스트)할 수 있는 동시에 핫스팟(네트워크 장비)로도 사용할 수 있고, 웹서핑(클라이언트)을 하거나 웹 배포(서버)를 할 수 있음
- 통신 매체 - 각 노드를 연결하는 간선이며, 유선 매체, 무선 매체가 있음
- 메시지(message) - 노드들이 주고 받는 정보 (웹페이지, 파일, 메일 등)

범위에 따른 네트워크 분류
네트워크의 범위를 기준으로 분류하면 [ LAN ⊂ CAN ⊂ MAN ⊂ WAN ] 이라고 말할 수 있음
-
LAN(Local Area Network) - 가까운 지역을 연결한 근거리 통신망
- ex. 가정, 학교, 회사 등과 같은 '한정된 공간'에 구성된 네트워크

-
WAN(Wide Area Network) - 멀리 떨어진 지역(LAN)을 연결하는 광역 통신망
- 인터넷 또한 WAN이라고 할 수 있음 (다른 LAN에 속한 호스트와 메시지를 주고 받음)
- 우리가 사용하는 일반적인 인터넷(WAN)은 ISP(Internet Service Provider)가 구축하고 관리함
- WAN의 모든 것이 인터넷인 것은 것은 아니기에, 비공개적인 WAN을 구축할 수도 있음

- CAN(Campus Area Network) - 학교나 회사의 여러 건물 단위로 연결되는 규모의 네트워크
- MAN(Metropolitan Area Network) - 도시 단위로 연결되는 규모의 네트워크
메시지 교환 방식에 따른 네트워크 분류
- 회선 교환 방식(curcuit switching) - 메시지를 주고 받기 전에 회선(curcuit)을 설정하고, 설정된 회선을 통해 메시지를 주고 받음
- 주요 네트워크 장비 - 회선 스위치 (호스트 간의 일대일 회선을 확보)
- 주어진 시간동안 전송되는 정보의 양이 비교적 일정함
- 단, 메시지를 주고 받지 않으면서 회선을 점유하면 회선의 이용 효율이 낮아질 수 있음

- 패킷 교환 방식(packet switching) - 메시지를 패킷 단위로 잘라서 전송함
- 패킷(packet) - 패킷 교환 네트워크에서 주고 받는 메시지의 단위
- 정해진 경로만으로 메시지를 주고 받지 않음 (하나의 회선을 점유하지 않음)
- 패킷 스위치 - 최적의 경로를 결정하거나 패킷의 송수신지를 식별함
- 주요 네트워크 장비 - 라우터(router), 스위치(switch)
- 패킷은 페이로드와 헤더 및 트레일러로 구성됨
- 페이로드(payload) - 패킷을 통해 전송하고자 하는 데이터
- 헤더(header) 및 트레일러(trailer) - 패킷의 부가 정보 (제어 정보)

주소와 송수신지 유형에 따른 전송 방식
- 패킷에 헤더에 담기는 대표적인 정보로는 주소(송수신지를 특정하는 정보)가 있음
- 네트워크에서 사용되는 주소 - IP 주소, MAC 주소
- 송수신지 유형에 따라 다양한 방식으로 메시지를 보낼 수 있음
- 유니캐스트(unicast) - 하나의 수신지에 메시지를 전송하는 방식 (일대일)
- 브로드캐스트(broadcast) - 자신을 제외한 네트워크상의 모든 호스트에게 전송하는 방식
- 브로드캐스트 도메인(domain) - 브로드캐스트가 전송되는 범위 (브로드캐스트 수신지)
- 멀티캐스트(multicast) - 네트워크 내 동일 그룹에 속한 호스트에게 전송하는 방식
- 애니캐스트(anycast) - 네트워크 내 동일 그룹에 속한 호스트 중 가장 가까운 호스트에게 전송하는 방식
01-3. 네트워크 미시적으로 살펴보기
프로토콜
- 프로토콜(protocol) - 노드간 합의된 규칙이나 방법
- 서로 다른 통신 장치들이 정보를 주고 받으려면, 프로토콜이 통해야 함
- 모든 프로토콜은 목적과 특징이 있음
- 프로토콜에 따라서 패킷의 부가 정보(헤더 내용)가 달라질 수 있음
네트워크 참조 모델
- 네트워크 참조 모델(network reference model, 네트워크 계층 모델) - 통신이 일어나는 각 과정을 계층으로 나눈 구조
- 통신 과정을 계층으로 나눈 이유
- 네트워크 구성과 설계가 용이함 - 각 계층이 수행해야할 역할이 정해져 있으므로, 계층의 목적에 맞게 프로토콜과 네트워크 장비를 계층별로 구성할 수 있음
- 네트워크 문제 진단과 해결이 용이함 - 문제의 원인을 계층별로 진단하기 수월함
-
OSI 모델 - 국제 표준화 기구(ISO)에서 만든 네트워크 참조 모델이고, 통신 단계를 7단계로 나눔
- 물리 계층(physical layer) - 0과 1로 이루어진 비트 신호(데이터)를 주고 받는 계층
- 통신 매체에 맞는 신호(전기, 빛, 전파 등)로 운반되도록 비트 데이터의 변환 후 송수신이 이루어짐
- 데이터 링크 계층(data link layer) - 네트워크 내 주변 장치 간의 정보를 올바르게 주고받기 위한 계층
- 물리 계층을 통해 주고받은 정보가 오류가 없는지 확인함
- MAC 주소 체계를 통해 네트워크 내 송수신지를 특정할 수 있음
- 전송 과정에서 발생하는 충돌 문제를 해결하기도 함
- 네트워크 계층(network layer) - 메시지를 (다른 네트워크에 속한) 수신지까지 전달하는 계층
- 네트워크 간의 통신이 이루어짐 (사실상 인터넷을 가능하게 하는 계층)
- IP 주소 체계를 통해 통신하고자 하는 수신지 호스트 및 네트워크를 식별함
- 원하는 수신지에 도달하기 위한 최적의 경로를 결정함
- 전송 계층(transport layer) - 패킷의 흐름을 제어하거나, 전송 오류를 점검하는 계층
- 포트 정보를 통해 실행중인 응용 프로그램을 식별하기도 함
- 세션 계층(session layer) - 세션을 생성 혹은 유지하고, 종료되었을 때 끊는 역할을 하는 계층
- 세션 - 통신을 주고 받는 호스트의 응용 프로그램 간 연결 상태
- 표현 계층(presentation layer) - 문자를 코드로 변환하거나, 압축, 암호화 작업을 하는 계층
- 응용 계층(application layer) - 응용 프로그램에 다양한 네트워크 서비스를 제공하는 계층
-
TCP/IP 모델 - 이론보다는 구현에 중점을 둔 네트워크 참조 모델
- TCP/IP 4계층, internet protocol suite, TCP/IP protocol stack이라고도 부름
- 네트워크 엑세스 계층(network access layer) - OSI 모델의 데이터 링크 계층과 유사함
- 링크 계층(link layer) 또는 네트워크 인터페이스 계층(network interface layer)이라고도 부름
- 인터넷 계층(internet layer) - OSI 모델의 네트워크 계층과 유사함
- 전송 계층(transport layer) - OSI 모델의 전송 계층과 유사함
- 응용 계층(application layer) - OSI 모델의 세션 계층, 표현 계층, 응용 계층을 합친 것과 유사
-
OSI 모델 vs. TCP/IP 모델 (숙제)
- OSI 모델은 네트워크 통신을 이해하기 위한 이론적 설계를 위한 참조에 가까움
- TCP/IP 모델은 실제 네트워크 구축을 위한 실용적 구현을 위한 참조에 가까움

캡슐화와 역캡슐화
- 캡슐화(encapsulation) - 정보를 송신할 때, 상위 계층으로부터 내려받은 패킷을 페이로드로 삼고, 프로토콜에 맞는 헤더(및 트레일러)를 덧붙인 후 하위 계층으로 전달하는 과정
- 역캡슐화(decapsulation) - 정보를 수신할 때, 캡슐화 과정에서 붙였던 헤더(및 트레일러)를 각 계층에서 확인한 뒤 제거하는 과정

PDU
- PDU(Protocol Data Unit) - 각 계층에서 송수신되는 메시지의 단위
- 상위 계층에서 전달받은 데이터에 현재 계층의 프로토콜 헤더(및 트레일러)를 추가하면 현재 계층의 PDU가 됨
- OSI 모델의 각 계층에서의 PDU
- 물리 계층 - 비트(bit, symbol)
- 데이터 링크 계층 - 프레임(frame)
- 네트워크 계층 - 패킷(packet, IP packet) / IP 데이터그램(IP datagram)
- 전송 계층 - (TCP) 세그먼트(segment), (UDP) 데이터그램(datagram)
- 응용 계층, 표현 계층, 세션 계층 - 데이터(data) / 메시지(message)
트래픽과 네트워크 성능 지표
- 트래픽(traffic) - 네트워크 내의 정보량
- 트래픽이 몰리면(노드가 처리해야할 정보가 많음) 과부하가 생길 수 있음
- 네트워크 성능을 평가할 수 있는 3가지 지표
- 처리율(throughput) - 단위시간당 네트워크를 통해 실제로 전송되는 정보량
- 대역폭(bandwidth) - 단위 시간 동안 통신 매체를 통해 송수신할 수 있는 최대 정보량
- 패킷 손실(packet loss) - 송수신되는 패킷이 손실된 상황
- 높은 트래픽으로 인해 노드가 순간적으로 처리해야할 패킷이 많아질 때 발생
- 네트워크에 장애가 발생하여 패킷을 처리하지 못할 때 발생
추가 숙제
- 네트워크에 대한 설명으로 옳지 않은 것을 골라 보세요.
네트워크에 대한 이해는 프로그램을 만드는 과정에 도움을 주지 않습니다.
- 프로그래밍 언어나 웹 프레임워크, 라이브러리를 사용할 때 네트워크에 관한 지식이 있어야 활용을 할 수가 있으므로 오답
- 네트워크에 대한 이해는 프로그램을 유지 보수하는 과정에 도움을 줄 수 있습니다.
- 많은 프로그램이 네트워크를 통해 다른 장비와 상호 작용하며 실행됩니다.
- 채용 시 네트워크에 대한 지식을 강조하거나 검증하는 기업이 존재합니다.
- 네트워크 참조 모델에 대한 설명으로 옳지 않은 것을 골라보세요.
- OSI 모델은 7개의 계층으로 통신 과정을 구분합니다.
TCP/IP 모델은 3개 계층으로 통신 과정을 구분합니다.
- TCP/IP 모델은 네트워크 엑세스 계층, 인터넷 계층, 전송 계층, 응용 계층으로, 4개 계층이므로 오답
- 네트워크 참조 모델은 네트워크 구성과 설계를 용이하게 합니다.
- 네트워크 참조 모델은 네트워크 문제 진단과 해결을 용이하게 합니다.
회고
사실 네트워크에 대해서는 작년 7월까지 통신병으로 복무하여 약간의 지식은 가지고 있었다. UTP 케이블이나 IP나 MAC주소 개념에 대한 것 등이 그러하다. 하지만 업무에서 필요에 따라 핵심만 외워서 그런지, 이것이 어떤 원리로 작동하는지에 대해서는 알지 못하였다. (이 점에 대해서는 담당관님께 여쭈어보면 당연히 알 수 있었지만, 사실상 알려고 하지 않은 것에 가까웠다) 예를 들어, 허브와 스위치의 원리적 차이점이거나 복수 개의 스위치를 사용하는 것이 어떤 원리로 작동하는 것인가라던가. 원리를 이해하고 그 다음으로 배우려고 하는 나에게는 여러가지 궁금한게 정말 많았다. 그래서 이번 기회에 2학년으로 복학 전에 전공 공부도 할 겸, 이러한 궁금증을 해소하기 위해 '혼자 공부하는 네트워크'라는 책을 통해 '컴퓨터 네트워크'라는 세계에 첫 발을 딛게 되었다. 네트워크를 공부하며 '혼공학습단 13기'에 참가하게 되었는데, 참가하면서 'Velog'라는 글쓰기 플랫폼에도 가입하게 되어, 이제부터라도 컴퓨터 관련된 지식을 여러가지를 정리해볼 예정이다.