[ACSA 교육#11] 네트워크 서비스

이번 포스팅에서는 아주 일반적으로 사용되는 네트워크 서비스 몇 가지를 소개해볼까 합니다.

DHCP (Dynamic Host Configuration Protocol)

먼저 DHCP입니다. TCP/IP 네트워크상의 모든 단말은 IP주소가 필요합니다.
물론 수동으로 구성할 수 있지만, 수백/수천 개의 IP주소를 수동으로 할당했을 때 업무 부하가 얼마나 될까요?

더 최악의 경우는, 회사 내에 사용하기 위해 IP주소를 수동으로 설정한 노트북으로 집이나 카페로 갔을 때 네트워크가 맞지 않아 연결되지 않게 되고 매번 위치를 이동할 때마다 IP주소를 새로 설정해야 할 것입니다.
이러한 불편을 해소하기 위해 DHCP는 클라이언트 단말에 자동으로 네트워크 정보를 할당합니다.

따라서 단말이 부팅되면 자동으로 IP주소와 서브넷 마스크, 기본 게이트웨이 등 구성에 필요한 정보를 얻게 됩니다.

Goal 
Dynamically provide network information to clients 
DHCP Client 
UDP 67 
I need IP address settings 
UDP 68 
I can offer to you: 
IP address 
Subnet Mask 
Default Gateway 
DNS server IP 
DHCP Server 
Note: DHCP service can be implemented on routers and multilayer switches for small deployments.

이를 위해서 클라이언트는 네트워크상에 브로드캐스트로 DHCP 요청을 날리게 됩니다.

“모두들 주목해주세요! IP주소가 필요합니다.”

DHCP서버는 이 메시지를 듣고, 요청사항에 대해 답을 해주게 됩니다.
만약 요청사항이 적합하다면, 클라이언트는 필요한 정보를 받게 됩니다.
일전에 TCP와 UDP는 목적지 포트 번호를 헤더에 포함하여 수신할 애플리케이션 데이터 종류를 표시한다고 했습니다. DHCP 요청을 위해서 클라이언트는 UDP 67을 사용하고, DHCP 서버는 UDP 68을 사용하여 응답합니다.

대규모 환경이라면, 이러한 DHCP 서비스를 위해서 별도의 서버를 두게 합니다. 하지만, 소규모 환경에서는 라우터나 멀티-레이서 스위치가 그 역할을 수행하기도 합니다.

DNS (Domain Name Service)

데이터를 전송하고 수신하기 위해서, 네트워크에 위치한 모든 단말은 적합한 IP주소를 갖고 있어야만 합니다. 일반적인 기업 네트워크는 수백 또는 수천 개의 단말이 존재합니다. 이럴 때 우리는 두 가지 문제점이 있습니다.

  1. 연결되어야 할 대상 단말을 어떻게 식별할 것인가?
  2. 그리고 그 대상 단말의 IP주소(목적지 IP주소)는 어떻게 알아낼 것인가?

첫번째 문제를 해결하기 위해서 엔드포인트에 직관적인 이름을 할당할 수 있습니다. 예를 들면, “fileserver01” 또는 “루바루바-PC”와 같이 말입니다. 또한 그룹화된 장치들은  www.arubanetworks.com 처럼 일반적인 도메인을 붙일 수도 있습니다.

이러한 네이밍 방식은 컴퓨팅 장치를 보다 인간에게 친숙하게 만들어줍니다. 그러나 여전히 네트워크 장치들은 서로간 통신을 위해 L3 IP주소가 필요니다. 여기서 두 번째 문제가 다시 나오게 됩니다. 어떻게 도메인 또는 직관적인 이름으로 붙여진 장치의 IP주소를 알아내서 변환할 것인가?

Goal 
Map between names that humans like and IP addresses computers need 
I want to connect to 
arubanetworks.com 
Alice PC 
UDP 53 
What is the IP for 
arubanetworks.com? 
arubanetworks.com 
= 174.129.234.88 
Host to IP resolution 
DNS Server 
Note: DNS service cannot run in a router or multilayer switch.

DNS는 우리 인간이 친숙한 이름과 컴퓨터가 필요한 IP주소를 서로 연결해주게 됩니다.

클라이언트는 DNS서버로 UDP 53을 사용하여 유니캐스트 방식으로 물어봅니다. “www.hpe.com 의 IP주소가 무엇인가요?” 서버는 데이터베이스를 뒤져서 도메인 이름을 찾아봅니다. 그리고 레코드(Record)가 있을 경우, IP주소를 클리이언트에게 알려줍니다.
DNS는 일반적이고 작은 요청에 대해서는 UDP를 사용합니다. 하지만, “Zone Transfer”와 같은 대규모 작업에는 TCP 53을 사용하기도 합니다. 그리고 DHCP와 달리 DNS는 네트워크 장치에서 서비스하도록 하지 않고, 별도의 전용 서버를 사용하도록 권장합니다.

HTTP

HTTP 프로토콜은 웹 서버에서 클라이언트로 Hypertext 페이지를 전송하기 위해 사용됩니다. Hypertext 페이지는 태그와 링크로 이뤄진 문서를 말합니다. 사용자가 태그를 클릭했을 때 새로운 페이지로 이동하게 됩니다. 일반적으로 HTML(Hyper-Text Markup Language)나 XML(eXtensible Markup Language)과 같은 언어를 통해 태그를 사용합니다.

Goal 
Transfer hypertext pages from web servers to web clients 
Ease and flexibility 
GET: Client requests objects 
DELETE: Client requests object deletion 
• Users can easily interact with server-provided data 
POST. 
• No special application required — just a simple browser 
PUT. 
TCP 80: Unsecured HTTP 
TCP 443: Secure HTTPS 
GET arubanetworks.com 
Alice PC 
Servers accept client data 
Server request write data 
HTTP Server

HTTP 접근 기법은 유연한 통신 메커니즘을 제공합니다. 사용자는 다음과 같은 하나 이상의 접근 기법을 사용하여 쉽게 서버가 제공하는 데이터에 상호 작용할 수 있습니다.

  • GET: 클라이언트는 서버로부터 특정한 객체를 요청합니다.
  • DELETE: 클라이언트는 서버에게 특정한 객체의 삭제를 요청합니다.
  • POST: 서버는 요청 메시지의 Body내 실려온 데이터를 받아 들입니다. 일반적으로 그것을 저장하게 됩니다.
  • PUT: 클라이언트는 서버에 특정 데이터를 입력되도록 요청합니다.

클라이언트는 특정한 애플리케이션이 필요하지 않습니다. 단지 HTTP 세션을 처리할 수 있는 웹 브라우저만 있으면 됩니다.

HTTP는 매우 잘 알려진 프로토콜이지만, 대중적인 인터넷 사이트를 돌아다니다가 위험에 빠질 수도 있습니다. 왜냐하면 HTTP는 보안 메커니즘을 제공하지 않기 때문입니다. 즉, 해커가 모든 행위를 감시당하고 조작되어질 수 있습니다. 진짜 은행 사이트인줄 알고 접속했을 때 해커가 만든 가짜 피싱 사이트일 수도 있다는 것입니다. 아니면 내가 전송하고 보내는 데이터를 그대로 보고 복사할 수도 있습니다.

이를 방지하기 위해서 HTTP의 안전한 버전인 HTTPS를 사용하는 것을 권장합니다. HTTP는 TCP 80포트를 사용하지만, HTTPS 는 TCP 443 포트를 사용합니다. 

TELNET & SSH

네트워크 관리자는 수십, 수백 또는 수천 개의 장치를 구성하고 트러블슈팅해야할 수도 있습니다.

물리적으로 직접 연결하기 위해서는 건물을 가로지르거나 다른 도시로 가야만 할 수도 있습니다. 아마도 여러분은 사무실 자리에서 라우터나 스위치의 상태를 보고 구성해야만 할 수도 있습니다. 건물을 가로지를 필요 없이, 12층으로 올라갈 필요 없이, MDF 통신실에 쭈그려 앉을 필요 없이 간단하게 Telnet(텔넷)을 이용해서 네트워크 장치에 연결할 수 있습니다.

Goal 
Remotely connect to and control devices using a CLI 
Telnet client 
TCP 23 - Telnet (Unsecure) 
TCP 22 - SSH (Secure) 
Administrator's PC 
6300 login: admin 
Password : 
adrnin 
6300* 
Telnet service 
Switch

텔넷 프로토콜은 단말의 CLI(Command Line Interface)를 사용하여 원격으로 다른 장치로 접속하거나 제어할 수 있도록 해줍니다. 텔넷은 그래픽 인터페이스를 지원하지는 않습니다.

먼저 PuTTY 애플리케이션과 같은 텔넷 클라이언트를 사용하여 텔넷 세션을 맺습니다. 그런 후에 원격 장치에 실행되어야 명령어를 보내게 됩니다. 원격 장치는 당연히 텔넷 서비스가 동작하고 있어야 합니다.

HTTP와 마찬가지로 텔넷은 보안 매케니즘을 갖고 있지 않습니다. 해커는 여러분의 세션을 가로채고 아이디와 패스워드를 포함한 데이터를 가져올 수 있게 됩니다. 이러한 이유에서 많은 사람들은 텔넷 사용을 기피합니다. 그리고 대신 SSH(Secure Shell)을 사용합니다. SSH의 보안과 암호화 매커니즘을 제외하면 기능적으로는 텔넷과 동일합니다.

텔넷은 TCP 23을 사용하고, SSH는 TCP 22를 사용합니다.

FTP

FTP는 운영체제와 상관 없이 서버로부터 파일을 다운받거나 업로드 할 수 있도록 합니다.

FTP는 완전한 파일 전송을 위해 신뢰 가능하고 흐름 제어할 수 있는 TCP 프로토콜을 사용합니다. 데이터 전송을 위한 TCP 20을 사용하고 제어를 위해 TCP 21을 사용합니다. FTP는  서버로 접속하기 위해서 자격증명 확인을 위해 사용자 인증을 요구합니다.
그리고 클라이언트는 FTP 연결을 위해 전용 애플리케이션을 사용하지만, 간단하게 웹 브라우저를 이용할 수도 있습니다. 다만, 웹 브라우저에 http:// 대신 ftp:// 으로 접속해야만 합니다.

Goal 
Transfer files from a server, regardless the Operating System in use 
TFTP: Simple, low overhead 
Variations 
SFTP: Encryption/Security 
UDP port 69 
TCP port 22 
TCP 21 - 
Alice PC 
Command: Get File001 
TCP 20 
File001 
— File001 in transit 
FTP Server

그리고 두 가지 FTP 변형이 있습니다.

TFTP(Trivial File Transfer Protocol)는 FTP와 똑같이 동작하지만, TCP 대신에 UDP를 사용합니다. 더 적은 헤더 사이즈 덕분에 오버헤드가 줄어들고 결국엔 더 빠른 전송이 가능해집니다. 대신 신뢰 매커니즘이 없기 때문에 TFTP 애플리케이션은 별도의 신뢰성 체크가 내장되어 있습니다. TFTP는 UDP 69를 사용합니다.

또 하나의 변형은 SFTP(Secure File Transfer Protocol)입니다. FTP에서 제공하지 못하는 향상된 보안과 암호화를 제공합니다. SFTP는 SSH 세션 위에서 동작하고 일반적으로 TCP 22를 사용합니다.

이렇게 5~6개의 대표적인 네트워크 서비스를 알아보았습니다. 이 외에도 SMTP, SNMP, SYSLOG, NTP, LDAP 등등 많은 서비스가 존재하고, 각각의 서비스는 특수 목적에 의해 사용됩니다. 일반적으로 각 서비스는 개별 프로세스 ID를 갖게 되고, 개별 포트번호를 갖게 됩니다.  이러한 관계는 서버나 운영체제, 소켓 프로그래밍 등을 공부하실 때 특히 도움이 될 것입니다.

다음 포스팅에서는 지난 포스팅에서 언급했던 Wi-Fi 프레임에 대해서 한 번 짚고 넘어가보겠습니다.

ACSA 교육 과정이지만, 무선 AP는 유선 스위치와 연결되기 때문에 간단하게 소개하고 넘어가보겠습니다.