프로그래밍 언어 활용

네트워크 기초 활용

출제기준 세세항목: 인터넷 구성의 개념 · 네트워크 7 계층 · IP · TCP/UDP

핵심 요약

인터넷은 어떻게 이뤄져 있을까요

인터넷은 전 세계의 수많은 네트워크가 서로 이어진 '네트워크들의 네트워크'입니다. 집이나 회사 안의 작은 네트워크(LAN)들이 통신사의 넓은 네트워크(WAN)로 이어지고, 그 네트워크들이 다시 서로 연결되어 하나의 거대한 망을 이룹니다. 범위에 따라 근거리 통신망 LAN, 도시 규모의 MAN, 광역 통신망 WAN으로 나눕니다.

인터넷은 데이터를 작은 조각(패킷)으로 나눠 보내는 패킷 교환 방식을 씁니다. 전화처럼 통화하는 동안 한 회선을 통째로 차지하는 회선 교환과 달리, 패킷마다 주소를 붙여 따로따로 보내고 받는 쪽에서 다시 합칩니다. 회선을 여러 사람이 나눠 쓸 수 있어 효율적입니다.

네트워크에서 상대를 찾으려면 주소가 필요합니다. 장비마다 붙어 있는 48비트 물리 주소가 MAC 주소, 네트워크에서 위치를 나타내는 논리 주소가 IP 주소, 한 컴퓨터 안에서 어떤 프로그램에 전달할지 가리키는 번호가 포트 번호입니다. 사람이 기억하기 쉬운 도메인 이름(www.example.com)을 IP 주소로 바꿔 주는 것이 DNS, 컴퓨터가 네트워크에 들어올 때 IP 주소를 자동으로 나눠 주는 것이 DHCP입니다.

장비를 잇는 모양(토폴로지)도 알아 둡니다. 중앙 장비에 모두 연결하는 성형(Star), 한 줄의 케이블에 모두 매다는 버스형, 고리 모양으로 잇는 링형, 모든 장비를 서로 직접 잇는 망형(Mesh)이 있습니다. 장비 n대를 망형으로 모두 이으려면 회선이 n(n-1)/2개 필요하고, 장비마다 n-1개의 연결 포트가 필요합니다. 장비가 5대라면 회선은 10개입니다.

OSI 7계층: 통신을 일곱 층으로 나누기

OSI 7계층은 국제표준화기구(ISO)가 만든 네트워크 통신의 기준 모델로, 통신 과정을 일곱 층으로 나눠 층마다 맡은 일을 정했습니다. 택배에 빗대면 물건을 상자에 담고, 송장을 붙이고, 트럭에 싣고, 길을 찾는 일을 각자 맡는 것과 같습니다. 보내는 쪽은 위 계층에서 아래로 내려가며 층마다 머리글(헤더)을 붙이고(캡슐화), 받는 쪽은 아래에서 위로 올라가며 하나씩 떼어 냅니다.

아래 세 계층부터 봅니다. 1계층 물리 계층은 0과 1의 비트를 전기 신호나 빛으로 바꿔 케이블로 보내며, 리피터와 허브가 여기서 동작합니다. 2계층 데이터 링크 계층은 비트를 프레임 단위로 묶어 바로 이웃한 장비끼리 오류 없이 전달하고, MAC 주소를 쓰며, 오류 제어와 흐름 제어를 합니다. 이더넷, HDLC, PPP가 이 계층의 프로토콜이고 브리지와 스위치가 여기서 동작합니다. 3계층 네트워크 계층은 패킷이 목적지까지 갈 경로를 정하는(라우팅) 계층으로, IP 주소를 쓰고 IP, ICMP, IGMP 같은 프로토콜과 라우터가 여기에 속합니다.

4계층 전송 계층은 보내는 프로그램과 받는 프로그램 사이(종단 간)의 전달을 책임집니다. 포트 번호로 프로그램을 구분하며 TCP와 UDP가 여기에 속하고, 데이터 단위는 세그먼트입니다. 5계층 세션 계층은 통신을 시작하고 유지하고 끝내는 대화를 관리하며, 중간에 동기점을 두어 끊겼을 때 이어서 보낼 수 있게 합니다. 6계층 표현 계층은 데이터의 형식을 맞추는 계층으로 문자 코드 변환, 암호화, 압축을 맡습니다. 7계층 응용 계층은 사용자가 쓰는 프로그램과 직접 맞닿는 계층으로 HTTP, FTP, SMTP, DNS, Telnet, SNMP 같은 프로토콜이 있습니다.

실제 인터넷은 이를 네 층으로 줄인 TCP/IP 모델을 씁니다. 아래부터 네트워크 액세스 계층(OSI의 1·2계층), 인터넷 계층(3계층), 전송 계층(4계층), 응용 계층(5·6·7계층)입니다. 인터넷 계층에서는 IP와 함께 IP 주소로 MAC 주소를 알아내는 ARP, 반대로 MAC 주소로 IP 주소를 알아내는 RARP, 오류와 상태를 알려 주는 ICMP(ping 명령이 이것을 씀)가 쓰입니다.

IP 주소: IPv4와 IPv6

IPv4 주소는 32비트로, 8비트씩 네 부분(옥텟)으로 나눠 192.168.0.10처럼 0~255 사이의 10진수 네 개로 씁니다. 주소는 네트워크를 가리키는 앞부분(네트워크 부분)과 그 네트워크 안의 장비를 가리키는 뒷부분(호스트 부분)으로 나뉩니다. 우편 주소의 '동'과 '번지'를 생각하면 됩니다.

예전에는 첫 옥텟 값으로 클래스를 나눴습니다. A 클래스는 1~126(기본 네트워크 부분 8비트), B 클래스는 128~191(16비트), C 클래스는 192~223(24비트)이고, D 클래스(224~239)는 여러 장비에 한꺼번에 보내는 멀티캐스트용, E 클래스(240~255)는 연구용으로 남겨 두었습니다. 127로 시작하는 주소는 자기 자신을 가리키는 루프백(127.0.0.1)입니다. 회사나 집 안에서만 쓰는 사설 주소는 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 범위이며, 밖으로 나갈 때는 NAT가 공인 주소로 바꿔 줍니다.

IPv4 주소가 바닥나는 문제를 풀려고 만든 것이 IPv6입니다. IPv6 주소는 128비트로, 16비트씩 여덟 부분으로 나눠 콜론(:)으로 구분한 16진수로 씁니다. 각 부분 앞의 0은 생략할 수 있고, 0으로만 된 부분이 연달아 있으면 ::로 한 번만 줄여 쓸 수 있습니다. 주소 종류는 한 곳에 보내는 유니캐스트, 여러 곳에 보내는 멀티캐스트, 같은 주소를 가진 여러 곳 중 가장 가까운 한 곳에 보내는 애니캐스트이며, IPv4의 브로드캐스트는 없습니다.

IPv4에서 IPv6로 옮겨 가는 동안에는 두 방식을 함께 쓰는 기술이 필요합니다. 한 장비가 IPv4와 IPv6를 모두 처리하는 듀얼 스택, IPv6 패킷을 IPv4 패킷 안에 넣어 IPv4 망을 지나가게 하는 터널링, 두 형식의 헤더를 서로 바꿔 주는 주소 변환이 있습니다.

서브넷과 CIDR 계산하기

큰 네트워크를 더 작은 네트워크로 나누는 것을 서브네팅이라 하고, 어디까지가 네트워크 부분인지 알려 주는 값이 서브넷 마스크입니다. 서브넷 마스크는 네트워크 부분을 1, 호스트 부분을 0으로 채운 32비트 값으로, 255.255.255.0은 앞 24비트가 네트워크 부분이라는 뜻입니다. 이것을 짧게 /24처럼 적는 것이 CIDR(Classless Inter-Domain Routing) 표기입니다. 클래스에 얽매이지 않고 네트워크 부분의 길이를 자유롭게 정할 수 있습니다.

/n일 때 호스트 부분은 32 - n비트이고, 한 서브넷의 주소 개수는 2의 (32 - n)제곱입니다. 그중 호스트 부분이 모두 0인 네트워크 주소와 모두 1인 브로드캐스트 주소는 장비에 줄 수 없으므로, 실제로 쓸 수 있는 주소는 2의 (32 - n)제곱 - 2개입니다. /24는 254개, /26은 62개, /27은 30개, /30은 2개입니다. /26의 서브넷 마스크는 마지막 옥텟이 11000000이라 255.255.255.192입니다.

주소 하나가 어느 서브넷에 속하는지는 블록 크기로 찾습니다. 192.168.10.77/26이라면 블록 크기가 64이므로 마지막 옥텟이 0, 64, 128, 192에서 시작하는 블록으로 나뉘고, 77은 64~127 블록에 들어갑니다. 따라서 네트워크 주소는 192.168.10.64, 브로드캐스트 주소는 192.168.10.127, 장비에 줄 수 있는 주소는 .65부터 .126까지 62개입니다.

반대로 네트워크를 나누는 문제도 있습니다. 200.1.1.0/24를 같은 크기의 서브넷 네 개로 나누려면 2의 2제곱 = 4이므로 네트워크 부분을 2비트 늘려 /26으로 만들고, 각 서브넷은 200.1.1.0, .64, .128, .192에서 시작합니다. 필요한 서브넷 개수나 호스트 수가 주어지면 2의 몇 제곱이 그 수를 넘는지부터 따져 보면 됩니다.

TCP와 UDP: 확실하게, 또는 빠르게

전송 계층의 두 프로토콜은 성격이 정반대입니다. TCP(Transmission Control Protocol)는 연결을 먼저 맺고 데이터를 보내는 연결 지향 방식으로, 보낸 데이터가 빠짐없이 순서대로 도착하도록 보장합니다. 등기우편처럼 받았다는 확인(ACK)을 받고, 확인이 오지 않으면 다시 보냅니다. 받는 쪽이 감당할 수 있는 만큼만 보내도록 조절하는 흐름 제어(슬라이딩 윈도우)와, 네트워크가 막히면 보내는 양을 줄이는 혼잡 제어도 합니다. 헤더는 최소 20바이트입니다.

TCP의 연결은 3-way 핸드셰이크로 맺습니다. 클라이언트가 연결을 요청하는 SYN을 보내고, 서버가 요청을 받았다는 뜻의 SYN+ACK를 돌려주고, 클라이언트가 다시 ACK를 보내면 연결이 성립합니다. 연결을 끊을 때는 FIN과 ACK를 양쪽이 주고받는 4-way 핸드셰이크를 씁니다.

UDP(User Datagram Protocol)는 연결을 맺지 않고 바로 보내는 비연결형 방식입니다. 일반 우편처럼 보내고 끝이라 도착이나 순서를 보장하지 않지만, 절차가 간단해 빠르고 헤더도 8바이트로 작습니다. 조금 빠져도 괜찮지만 지연은 싫은 실시간 영상·음성, 온라인 게임, 그리고 짧은 질문과 답을 주고받는 DNS 조회, DHCP, SNMP 등에 씁니다.

포트 번호는 0~65535이며, 그중 0~1023은 잘 알려진 서비스용으로 정해져 있습니다. FTP는 20(데이터)과 21(제어), SSH 22, Telnet 23, SMTP(메일 보내기) 25, DNS 53, DHCP 67·68, HTTP 80, POP3(메일 받기) 110, IMAP 143, SNMP 161, HTTPS 443입니다. 실기에서는 서비스 이름과 번호를 짝지어 쓰라는 문제가 자주 나오니 정확히 외워 두세요.

라우팅 프로토콜: 길 찾기의 규칙

라우터는 패킷의 목적지 주소를 보고 다음에 어느 쪽으로 보낼지 정합니다. 이 판단의 근거가 되는 표가 라우팅 테이블입니다. 관리자가 경로를 직접 적어 두는 정적 라우팅은 단순하고 안정적이지만 망이 바뀌면 손으로 고쳐야 하고, 라우터끼리 정보를 주고받으며 스스로 경로를 고치는 동적 라우팅은 큰 망에 알맞습니다. 동적 라우팅에서 쓰는 약속이 라우팅 프로토콜입니다.

한 기관이 관리하는 네트워크 묶음을 자율 시스템(AS)이라 하고, 그 안에서 쓰는 것을 내부 라우팅 프로토콜(IGP)이라 합니다. RIP는 거리 벡터 방식으로, 목적지까지 거치는 라우터 수(홉 수)가 가장 적은 길을 고릅니다. 최대 15홉까지만 셀 수 있어 16홉은 도달할 수 없다는 뜻이며, 30초마다 이웃과 정보를 주고받습니다. 작은 망에 알맞습니다.

OSPF는 링크 상태 방식으로, 망 전체의 연결 상태를 알고 다익스트라 알고리즘으로 가장 좋은 길을 계산합니다. 큰 망을 영역(Area)으로 나눠 관리할 수 있고, 변화가 생기면 빠르게 반영합니다. 자율 시스템과 자율 시스템 사이, 예를 들어 통신사와 통신사 사이에서는 외부 라우팅 프로토콜인 BGP를 씁니다. 'RIP는 홉 수, OSPF는 링크 상태와 다익스트라, BGP는 AS 사이'로 묶어 기억하면 됩니다.

실무에서는 이렇게 쓰여요

부서별로 나눈 사무실 네트워크

직원 100명 회사가 192.168.20.0/24 하나를 쓰다가, 보안 때문에 개발·영업·관리 부서를 따로 나누기로 했습니다. 부서마다 최대 50대면 충분해서 /26으로 나눠 .0, .64, .128 블록을 각 부서에 주고, 남은 .192 블록은 나중을 위해 비워 두었습니다.

TCP와 UDP를 나눠 쓰는 화상 회의

화상 회의 서비스는 영상과 음성은 UDP로 보내 조금 끊겨도 지연 없이 흘러가게 하고, 채팅 메시지와 파일 공유는 TCP로 보내 한 글자도 빠지지 않게 했습니다. 같은 서비스 안에서도 데이터 성격에 따라 프로토콜을 골라 쓴 것입니다.

열려 있던 Telnet 포트

서버 점검에서 23번 포트(Telnet)가 열려 있다는 결과가 나왔습니다. Telnet은 비밀번호까지 암호화 없이 보내므로 서비스를 끄고, 원격 접속은 암호화를 쓰는 22번 SSH로만 받도록 방화벽 설정을 바꿨습니다.

총정리 목차로