네트워크

네트워크 계층, Ethernet, WiFi, IP, TCP,UDP, 프로토콜, 포트, 공인망과 사설망, NAT 등 네트워크 이론에 대해서 알아봅니다.
네트워크, Ethernet, WiFi, IP, 프로토콜, 포트, 공인망, 사설망, NAT, TCP, UDP


네트워크의 구분

랜과 라우터랜과 라우터

웹 브라우저로 구글이나 페이스북 같은 웹페이지를 보는 것, 카카오톡으로 메세지를 주고 받는 것, 실시간 온라인 게임 등. 다양한 컴퓨터 통신의 기저에 있는 원리를 알아보고 다시 우리가 알아야 할 높은 층에 집중하겠습니다. 네트워크는 인터넷서비스제공업체(ISP)들, 또는 공기관, 사설기관의 유/무선망 및 중계 컴퓨터들을 통해서 전세계에 구축되어 있습니다.

  • LAN
    Local Area Network: 집, 회사, 지역 등의 지엽적인 네트워크를 지칭

  • WAN
    Wide Area Network: LAN 보다 큰 규모로 국가, 대륙를 아우르는 원거리 망을 지칭

Intranet, InternetIntranet, Internet

  • Intranet
    집, 회사 등 폐쇄적으로 운영되는 네트워크

  • Internet
    전세계에서 접근이 가능한 공개적인 네트워크

통신의 원리

통신은 프로세스간에

통신은 호스트(컴퓨터)간에 이루어집니다. 맞는 말이지만 좀 더 정확하게는 통신은 프로세스 간에 이루어집니다. 호스트를 건물으로, 프로세스를 건물에 거주하는 사람이라고 생각하면 건물과 건물끼리 편지를 주고 받기보다는 집에사는 누군가 끼리 편지를 주고 받는 것과 동일합니다. 카카오톡 클라이언트 프로세스와 카카오사의 서버 프로세스와의 통신, 크롬 웹 브라우저와 구글사의 서버 프로세스와의 통신 등. 이처럼 통신은 프로세스간에 이루어집니다.

OSI 7 Layer

OSI 7 LayerOSI 7 Layer

추상화의 원리는 네트워크에도 적용됩니다. 프로세스간의 메세지를 편지 봉투에 넣어고, 받는이와 보낸이를 적고, 네트워크 망을 따라 편지를 배달하는 일은 모두 단계별로 분리되어 있습니다.

  1. Message
    프로세스가 전달하고자 하는 데이터

  2. Segment/Datagram
    보내는/받는 프로세스를 식별하기 위해 부가 데이터(Port)를 추가

  3. Packet
    보내는/받는 호스트를 식별하기 위해 부가 데이터(IP)를 추가

  4. Frame
    실제로 데이터를 보내는/받는 장치인 유선랜(Ethernet) 카드, WiFi 및 Bluetooth 카드 등의 장치를 식별하기 위해 부가 데이터(MAC Address)를 추가

MAC 주소와 IP 주소

Frame/Packet HeaderFrame/Packet Header

전송 매체(유선, 무선)를 따라서 데이터(Frame)를 송수신하는 장치에는 48bit의 고유한 물리적 주소인 MAC Address (Media Access Control Address)가 공장에서 제조 될 때 부터 할당되어 있습니다.

반면에 우리가 흔히 얘기하는 IP 주소는 일종의 가상 주소이며 불변하는 값이 아닙니다. MAC Address가 있음에도 불구하고 IP라는 주소 체계가 도입된 이유는 라우팅의 편리함에 있습니다. 라우팅(Routing)이란 데이터의 송신부터 수신에 이르는 배달 과정을 나타내는 말입니다. 비유를 하자면 MAC 주소로 라우팅을 하는 것은 주민등록번호로 편지를 보내는 것과 비슷합니다. 반면에 IP 주소는 우체국(전세계의 네트워크에 존재하는 수 많은 라우터들)에서 편지를 배달하기 좋도록 설계된 주소 체계라는 정도로 이해하고 넘어가겠습니다.

추가로 IP 주소는 하나의 호스트를 나타내는 주소지만 MAC 주소는 호스트에 연결된 물리적 통신 장치 하나를 나타내는 주소입니다. 예를 들어 유선랜(Ethernet)을 통해 인터넷에 연결하고 WiFi를 통해 인터넷을 공유하고 있는 상황(테더링)을 생각해보면, 두 네트워크 장치는 각각의 MAC 주소로 통신을 하면서도 같은 IP 주소로 통신을 하게 될 것입니다.

사설망과 NAT

IP 주소는 한정적인 자원

IPv4는 IP 주소 체계의 4번째 버전을 의미합니다. IPv4는 32bit의 길이로 설계 되었으며 따라서 2^32(약 43억)개의 주소를 갖습니다. 보통 사람이 읽기 쉽도록 8bit씩 4자리로 끊어서 10진수로 표기합니다. 즉 IPv4는 0.0.0.0 ~ 255.255.255.255의 범위를 갖습니다. 인터넷의 발전 속도에 비해서 43억개의 주소가 부족한 숫자였나봅니다. 2015년 말에 IP 주소를 할당하는 최상위 기관 ICANN에서 IPv4 주소의 고갈을 공식적으로 발표하였습니다. 지금은 128bit의 길이를 갖는 IPv6를 도입하고 IPv4와의 호환성 문제 등을 해결하며 IP 주소 체계의 전환을 앞두고 있습니다.

IPv4의 특수한 아이피 대역

용도대역비고
사설망10.0.0.0 ~ 10.255.255.255
사설망172.16.0.0 ~ 172.31.255.255
사설망192.168.0.0 ~ 192.168.255.255
호스트를 자신을 가리키는 내부 예약어 (localhost)127.0.0.1, localhost
호스트에 자신에게 할당된 모든 아이피 (사설망, 공인망 모두)0.0.0.0
브로드캐스팅 (모두에게)255.255.255.255

공인망과 사설망

인터넷이 발달하면서 IP 주소가 점차 부족해져 IP 주소의 할당이 힘들어졌습니다. 또한 IP 주소의 구입은 국가, 기관, 기업 수준에서 이루어지기 때문에 개인이나 민간 수준에서 IP 주소를 마련하고 네트워크를 구축해 인터넷에 연결하기도 힘들었습니다. 이에 IP 주소의 재사용을 위한 사설망(Private Network)이라는 개념이 생겼습니다. 위의 표처럼 특정한 IP 대역의 주소는 공인망(Public Network)에 할당하지 않아, 그 어떤 사설망에서라도 내부적으로 사용 할 수 있도록 정해두었습니다. 집에서 공유기를 쓰신다면 사설망을 구축하신 것입니다.

NAT (Network Address Translation)NAT (Network Address Translation)

NAT (Network Address Translation)

사설망 대역의 IP 주소는 수 많은 곳에서 재사용을 하기 때문에, 정작 고유한 호스트를 구분하기 위한 IP 주소 본연의 역할을 하지 못합니다. 때문에 사설망을 인터넷에 연결하기 위해서는 NAT (Network Address Translation)라는 기술이 필요합니다.
사설망을 벗어나 네트워크를 공인망(네트워크)에 연결하는 장치을 허브/게이트웨이/라우터/공유기 등으로 부릅니다. 이때 이 게이트웨이에는 공인 IP 주소가 할당되어 있고 이를 바탕으로 게이트웨이가 사설망의 여러 호스트들을 대표해서 본인의 IP 주소로 공인망에서 데이터를 송수신하게 됩니다. 이러한 기술을 NAT라고 합니다.

TCP/UDP와 포트

Frame/Packet HeaderFrame/Packet Header

네트워크가 발전하면서 굳어진 약속 체계들을 프로토콜(Protocol)이라고 합니다. 지금까지 Ethernet/Wifi/IP 등의 저수준 프로토콜에 대해 알아보았습니다. 네트워크 상의 데이터는 IP를 통해서 자신이 출발한, 도착해야 할 호스트를 구분 할 수 있습니다.
하지만 실제 통신은 프로세스간에 일어나기 때문에 호스트에 도착한 데이터는 운영체제에서 실행되는 수 많은 프로세스 중에 특정 프로세스를 구분 할 필요가 있습니다. 이를 위해서 포트(Port)라는 개념이 도입되었습니다. 프로세스는 운영체제에게 특정한 포트를 사용하겠다고 요청하고 2^16(약 6만)개의 숫자 중에서 한개의 숫자를 할당 받습니다. 이를 포트라고 합니다. 프로세스는 고유한 포트번호, 호스트의 IP 주소, 장치의 MAC Address를 통해서 네트워킹하게 됩니다.

TCP/UDPTCP/UDP

IP(Internet Protocol) 위에 TCP, UDP라는 두가지 프로토콜이 있습니다. TCP/UDP는 모두 포트 번호를 통해 프로세스를 구분하게 됩니다. 이 둘의 차이는 신뢰성있는 프로토콜(TCP)과 신뢰성 없는 프로토콜(UDP)입니다. TCP의 경우에는 보낸 데이터가 잘 도착했는지를 확인하고 오류시 이를 복구하는 등의 로직을 프로토콜 수준에서 구현하고 있습니다. UDP의 경우에는 단순히 데이터에 송/수신 프로세스의 포트 번호를 부착하는 프로토콜입니다. UDP의 경우는 데이터의 신뢰성보다 속도가 더 중요한 경우(미디어 스트리밍, 게임 등)에 쓰이곤 합니다. 이외의 경우는 보통 TCP를 사용하기 때문에 TCP/IP라는 단어는 인터넷 프로토콜을 의미하는 대표적인 단어가 되었습니다.

응용 프로토콜

먼 길을 걸어 TCP, UDP 까지 도착했습니다. TCP/UDP 위가 최종적인 응용 프로토콜, 즉 우리가 프로그램을 작성하는 위치가 되겠습니다. 우리는 프로그램을 작성하면서 TCP나 UDP 둘 중 하나를 선택해 네트워킹을 설계 할 수 있습니다. 물론 이 때 주고 받는 데이터는 바이너리가 될 수도 텍스트가 될 수도 있습니다.

널리 쓰이는 응용 프로토콜

프로토콜서버 프로세스의 포트번호용도
HTTP80웹 문서 전송
FTP21파일 전송
SSH22원격 셸
DNS53도메인에 해당하는 아이피 조회
POP3, SMTP, HTTPS, …

이 때 우리가 단순히 독립적으로 쓰이는 프로그램을 만든다면 자신만의 프로토콜을 만들어도 무관합니다. 우리가 만든 프로그램들 사이에서만 서로 이해 할 수 있는 약속이면 충분하기 때문입니다.

하지만 그와 달리 인터넷이 발달하면서 전세계적으로 쓰여온 프로토콜들을 쓰게되는 경우가 있습니다. 예를 들어 웹 서버나 웹 브라우저 프로그램을 만든다면 웹문서 전송 프로토콜인 HTTP라는 약속에 대해 공부 할 필요가 있습니다. 이처럼 널리 쓰이는 프로토콜들은 0~1023의 포트(Well-known Port)를 선점하고 있는데 프로세스가 운영체제로부터 0~1023 대역의 포트를 할당 받으려면 관리자 권한이 필요합니다.

서버-클라이언트, P2P

Server-Client / P2PServer-Client / P2P

마지막으로 프로세스간 네트워킹의 두가지 형태에 대해 알아보겠습니다.

Server-Client Network는 온라인 게임, 웹 서비스, 페이스북 앱, 카카오톡 앱, 음악/영상 스트리밍, 원격 쉘(SSH), FTP, 데이터베이스 등 대부분의 프로그램에서 사용하는 구조입니다. Server는 다수의 Client의 요청 데이터를 처리하고, 응답 데이터를 보내는 프로세스(웹 서버, 게임 서버, 카카오톡 서버 등) 입니다. Client는 중앙 Server에게 요청 데이터를 보내고, 응답 데이터를 받는 최종 사용자(End User)용 프로세스(웹 브라우저, 게임 앱, 카카오톡 앱 등, 보통 GUI를 제공) 입니다. 따라서 어떤 서비스를 서버-클라이언트 구조로 설계했다면 2개의 프로그램을 작성해야합니다.
(이전 표에서 Well-Known Port들은 모두 서버 측의 포트 번호를 의미하고 있습니다.)

P2P Network는 블록체인, 토렌트, 1:1 온라인 게임 등 Server, Client의 구분 없이 연결된 프로세스들이 동등한 작업을 수행하는 구조입니다. 따라서 어떤 서비스를 P2P 구조로 설계했다면 서버/클라이언트 역할을 모두 수행하는 단일 프로그램을 작성해야 합니다.

이 강의를 포함한 커리큘럼
저자

김동욱

개발 경력 약 10년, 전문 분야는 웹 및 각종 응용 소프트웨어 플랫폼입니다. Codeflow를 운영하고 있습니다.

2018년 05월 17일 업데이트

지원되지 않는 웹 브라우저거나 예기치 않은 오류가 발생했습니다.