강좌
클라우드/리눅스에 관한 강좌입니다.
네트워크 분류

TCP/IP (인터넷의 뿌리 TCP/IP 바로 알기)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.giftitle28.gif

글쓴이 : 선 아(kerygma@chollian.net)

 

네트워크로 모든 정보를 교류하는 지금 우리들은 넷맹이라는 새로운 단어를 접하게 됐다. 거대한 네트워크인 인터넷에서 탄생한 리눅스로 우리 모두 넷맹에서 탈출하자.

인터넷의 기본 프로토콜이며, 모든 유닉스 계열의 운영체제는 기본적으로 TCP/IP 프로토콜로 통신을 한다는 사실을 알고 있을 것이다.

TCP/IP (Transmission Control Protocol / Internet Protocol)

일단, TCP/IP를 이해하기에 앞서 네트워크 프로토콜의 개념을 이해하는 것이 순서일 것이다.
TCP/IP는 하나로 이루어진 프로토콜이 아니다. TCP/IP는 여러 가지의 프로토콜들의 집합이며, 이 집합을 필자는 “protocol suite”라는 용어로 표기하겠다.

 

네트워크 프로토콜

네트워크 프로토콜은 크게 4부분으로 나눌 수 있다.
(OSI 7 계층을 간략화했다고 할 수 있다.)

■ 물리 계층 프로토콜
실제적인 하드웨어가 통신하는 프로토콜이라 할 수 있다.
이더넷, 토큰 링, FDDI, ATM 등이 이에 속한다.

■ 네트워크 계층 프로토콜
네트워크 경로를 결정하는 프로토콜이라 할 수 있다.
TCP/IP protocol suite의 IP(Internet Protocol)가 이에 속한다.

■ 트랜스포트 계층 프로토콜
데이터 전송을 담당하는 프로토콜이라 할 수 있다.
TCP/IP protocol suite의 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)이 이에 속한다.

TCP : 연결 지향적인 프로토콜이다. 쉽게 말해서 데이터를 주고받을 때 데이터를 검사하여 이상 유무를 알리는 방식으로, 정확한 데이터를 보낼 수 있다.
Telnet, FTP, SMTP 등이 TCP 기반의 프로토콜이다.

UDP : TCP 와는 달리 비연결형 프로토콜이다. TCP 기본구조는 같으나, 데이터가 목적지에 도착하는 것에 대한 보장이 없다. 하지만, TCP와 관련된 overhead가 없으므로, NFS 나 DNS 같은 서비스에 보다 효율적인 인터페이스를 제공한다.
DNS, SNMP, NFS 등이 UDP 기반의 프로토콜이다.

■ 애플리케이션 계층 프로토콜
실제 응용프로그램에서 수행되는 프로토콜이라 할 수 있다.
TCP/IP protocol suite의 FTP(File Transfer Protocol), SMTP(Simple Mail Transfer Protocol), DNS(Domain Name Service), HTTP(Hyper Text Transfer Protocol), telnet 등이 이에 속한다.

 

IP 어드레스(IP Addresses)

IP 어드레스는 TCP/IP Protocol을 사용하기 위해서는 반드시 필요한 사항이다.

IP 어드레스의 구성

현재 사용하고 있는 IP어드레스의 구성은 IPv4의 규격을 따른다. IP 어드레스는 32비트로 구성이 되어 있으며, 보기 쉽도록 점(.)으로 구별된 4개의 숫자(10진수)로 표시한다. (8비트씩으로 나누기 때문에 표현 가능한 수는 0 부터 255까지 이다.)
- 때에 따라 2진수를 적용하여 생각하면 쉽게 이해할 수 있다.
IP 어드레스의 범위는.
0.0.0.0 ~ 255.255.255.255 (10진수)
00000000.00000000.00000000.00000000 ~
11111111.11111111.11111111.11111111(2진수)

하지만 위 영역의 모든 어드레스가 다 사용 가능한 것은 아니다. IP 어드레스 중에는 네트워크를 표시하는 부분이 있고, 호스트를 표시하는 부분이 있다. 어떤 부분이 네트워크와 호스트를 표시하는 지는 “클래스”에 의하여 결정된다.

 

클래스

네트워크 비트

호스트 비트

A클래스

8

24

B클래스

16

16

C클래스

24

8

* 편의상 비트로 표기했지만, 객관적인 용어로는 “flag”가 더 정확하다.

A 클래스 - 8 비트 의 네트워크 비트, 24 비트의 호스트 비트로 구성
B 클래스 - 16 비트의 네트워크 비트, 16 비트의 호스트 비트로 구성
C 클래스 - 24 비트의 네트워크 비트, 8 비트의 호스트 비트로 구성
이밖에, 특수 용도로 예약되어 있는 D클래스와 E 클래스가 있다.

 

클래스

현재 사용되고 있는 클래스는 3 가지이다.

■ A 클래스

IP 어드레스 중 가장 왼쪽의 8비트가 네트워크를 표시해 주며, 가장 왼쪽 비트는 0으로 고정되어 있다. 그렇기 때문에 아래와 같이 표시할 수 있으며,

- 0NNNNNNN.HHHHHHHH.HHHHHHHH.HHHHHHHH

0.XXX.XXX.XXX ~ 127.XXX.XXX.XXX 에 해당하는 범위를 가지고 있다.

A 클래스는128개의 각기 다른 네트워크가 존재하고, 하나의 네트워크에 1600만 여대의 호스트를 가질 수 있다.

**아래는 특별한 의미를 가지는 네트워크이다.

네트워크 0.0.0.0 은 디폴트 라우터에서 사용하며,
네트워크 127.0.0.0 은 루프백 어드레스(loopback Address)로 사용한다.

■ B 클래스

IP 번호 중 가장 왼쪽의 8비트가 네트워크를 표시해 주며, 가장 왼쪽 비트는 10으로 고정되어 있다. 그렇기 때문에 아래와 같이 표시할 수 있으며,

- 10NNNNNN.NNNNNNNN.HHHHHHHH.HHHHHHHH

128.XXX.XXX.XXX ~ 191.XXX.XXX.XXX 에 해당하는 범위를 가지고 있다.

B 클래스는 16,384개의 각기 다른 네트워크가 존재하고, 하나의 네트워크에 65,000여개의 호스트를 가질 수 있다.

■ C 클래스

IP 번호 중 가장 왼쪽의 8비트가 네트워크를 표시해 주며, 가장 왼쪽 비트는 110으로 고정되어 있다. 그렇기 때문에 아래와 같이 표시할 수 있으며,

- 110NNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH

192.XXX.XXX.XXX ~ 223.XXX.XXX.XXX 에 해당하는 범위를 가지고 있다.

C 클래스는 2,097,152개의 각기 다른 네트워크가 존재하고, 하나의 네트워크에 254개의 호스트를 가질 수 있다.

 

* 인터넷에서 사용하지 않는 네트워크

IP 네트워크를 사용하지만 인터넷에서 사용하지 않는 특별한 주소가 있다.

한 개의 A 클래스 네트워크 - 10.0.0.0
16 개의 B 클래스 네트워크 - 172.16.0.0 ~ 172.31.0.0
256 개의 C 클래스 네트워크 - 192.168.0.0 ~ 192.168.255.0

 

서브넷 마스크

네트워크 마스크라고도 불리 우며, 서브넷 마스크는 네트워크의 크기를 참고하는데 쓰인다.
(모든 장비들은 서브넷 마스크를 참조하여 자기가 속한 네트워크의 범위를 알 수 있다.)
네트워크를 구성할 때 서브넷 마스크는 매우 중요한 사항이다. 서브넷 마스크로 네트워크의 크기가 결정되며, 네트워크 어드레스, 브로드캐스트 어드레스, 그리고 뒤에 설명할 ‘서브넷’에서 구현되는 모든 마술(?)이 모두 서브넷마스크에서 이루어진다.

모든 네트워크 비트를 ‘1’로 바꾸고, 모든 호스트 비트를 ‘0’으로 바꾸면 된다.

그럼, 세 가지 클래스 네트워크의 기본적인 서브넷 마스크를 보자
(- 여기서 ‘기본적이란’ 단어를 썼다, 이유는 ‘꼭’ 이 아닌 때에 따라 변할 수 있기 때문이다.)

 

클래스

서브넷 마스크

A 클래스

255.0.0.0

B 클래스

255.255.0.0

C 클래스

255.255.255.0

 

A 클래스 네트워크의 서브넷 마스크 : 255.0.0.0
B 클래스 네트워크의 서브넷 마스크 : 255.255.0.0
C 클래스 네트워크의 서브넷 마스크 : 255.255.255.0

 

네트워크 어드레스, 브로드캐스트 어드레스

네트워크 어드레스는 호스트 비트가 모두 ‘0’ 이다.
- 서브넷 마스크를 참조한 지역적인 네트워크 그룹 전체를 말한다.

브로드캐스트 어드레스는 호스트 비트가 모두 ‘1’ 이다.
- 서브넷 마스크를 참조한 지역적인 네트워크 그룹 속한 모든 호스트와 ‘이야기’를 하기 위해 사용한다.

 

서브넷

서브넷은 아주 쉽게 말해서 하나의 네트워크를 여러 개의 서브 네트워크로 쪼개어 사용하는 기술이다. (서브넷 마스크와 혼돈하지 말 것)

‘왜 서브넷을 사용할까?’라는 의문점이 생길 것이다..
그것은 IP를 효율적으로 사용하기 위해서 이다.

실제적인 예를 들면,
B 클래스 네트워크는 65,000여대의 호스트를 가질 수 있다. 하지만, 65,000여대를 호스트를 가지고 있는 사업장은 많지 않을 것이다. 8,000 여대의 호스트가 있는 사업장에 B 클래스의 네트워크를 할당해 준다면 나머지 57,000여대의 호스트를 만들 수 있는 IP를 손해보는 셈이다. 만일, 있다하더라도 하나의 네트워크로 사용한다는 것은, 많은 트래픽이 발생한다. 당연히 네트워크 속도가 많이 저하된다.

그래서 서브넷을 이용하여 B 클래스 네트워크를 쪼개어 부서별이나 지사별로 할당한다면, 트래픽을 많이 줄일 수 있어 효율성을 높일 수 있다. 그리고 할당해주고 남는 IP들은 계열사나 고객들에게 나누어주어 사용할 수도 있을 것이다.(ISP 같이)
실제로 B 클래스 네트워크는 256개의 C 클래스 크기의 서브 네트워크로 나눌 수 있다. 물론, 그 보다 더 많은 수의 서브 네트워크로 쪼갤 수도 있고, 반대로 적은 수의 네트워크로 쪼갤 수도 있다. 그것은 어디까지나 네트워크를 어떻게 디자인하느냐에 달려 있는 것이다. 이렇게, 하나의 네트워크를 쪼갠 서브네트워크는 그 하나 하나가 독립적인 형태와 특성을 가지고 동작한다. 각기 다른 서브 네트워크끼리의 통신은 라우팅 같은 특별한 기술을 이용하여 사용한다.

요즘, 많이 생긴 게임방의 예를 들어보자...
보통 게임방들은 20여대에서 100여대의 PC를 보유하고 있다. 물론, 더 큰 게임방도 있을 것이다. 하지만, 대개 20여대에서 30여대를 가지고 있다.
만일 25대의 PC가 있는 게임방을 예를 들어보겠다.
보통 IP는 인터넷 전용선을 임대해서 쓰는 ISP(Internet Service Provider)에서 할당받는다. 만일 ISP에서 C클래스 네트워크를 할당해 준다면, 나머지 220여대에서 사용할 수 있는 IP를 사용할 수 없다. 하지만 서브넷을 이용하여 C 클래스 네트워크를 8개의 서브 네트워크로 나누어 각기 다른 8개의 게임방에 할당한다면, 이것이 ISP에서 본다면 상당한 이득이 생길 것이다.(물론, ISP에 IP를 금전적인 지불을 하고 할당받는 것은 아니다.)

 

서브넷은 어떤 식으로 나눌까?

의외로 간단하다 모두 서브넷 마스크에서 한다. 호스트 비트를 네트워크 비트로 바꾸어주면 된다.

하지만 서브넷을 나눌 때 주의할 점이 있다. 사용하지(?) 못하는 IP가 생긴다는 것이다.
모든 네트워크에는 하나의 네트워크 어드레스와 브로드케스트 어드레스가 존재한다. 하지만 하나의 네트워크를 여러 개의 서브넷으로 나눌 경우 서브넷의 갯수만큼의 네트워크 어드레스와 브로트케스트 어드레스가 생겨나기 때문이다. 그렇기 때문에 네트워크를 디자인 할 때 세심한 주의가 필요하다.

C 클래스 네트워크를 예로 들겠다.

 

서브넷

서브넷 구조

서브넷

호스트

전체호스트

255.255.255.0

110NNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH

-

254

254

255.255.255.128

110NNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH

2

126

252

255.255.255.192

110NNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH

4

62

248

255.255.255.224

110NNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH

8

30

240

255.255.255.240

110NNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH

16

14

224

255.255.255.248

110NNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH

32

6

192

255.255.255.252

110NNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH

64

2

128

 

게이트웨이(Gateway)

네트워크상의 정보나 데이터가 지역네트워크가 아닌 외부 네트워크(인터넷이나 다른 서브네트워크)로 가야할 경우 외부 네트워크와 연결이 되어 외부 네트워크로 나가는 통로 역할을 하는 장비이다. 물론 외부네트워크에서 지역 네트워크로 정보가 들어올 수도 있다. 이러한 기능은 라우팅이란 기술을 사용한다.

 

* 디폴트 게이트웨이(Default Gateway)

디폴트 라우터(Default Router)라고도 한다. 하나의 네트워크에 다수의 게이트웨이를 설치할 수 있다. 기본적으로 외부망을 이용할 때 사용하는 게이트웨이를  디폴트 게이트웨이라 칭한다. 보통, 인터넷과 연결이 되어 있다면, 인터넷과 전용선으로 연결되어 있는 라우터가 디폴트 게이트웨이가 된다.

디폴트 게이트웨이 설정은,

route 명령으로도 할 수 있으며,

형식은 route add default gw 디폴트게이트웨이IP 나 호스트명
ex)
[root@sunny /root]# route add default gw 192.168.1.254
또는
[root@sunny /root]# route add default gw router1.kerygma.co.kr

라우터 명령으로 디폴트 게이트웨이를 추가 할 경우 시스템을 재부팅시킬 경우 다시 입력해주어야 한다. 이러한 경우 재부팅해도 게이트웨이가 바뀌지 않도록, netcfg나 netconf 를 이용하여 디폴트 게이트웨이를 추가 하면 되고, 만일 이러한 프로그램이 설치되지 않은 시스템에서는 /etc/sysconfig/network 파일을 직접 편집하면 된다.

GATEWAY=xxx.xxx.xxx.xxx 인터넷과 연결되어 있는 라우터의 IP
GATEWAYDEV=네트웍 디바이스(보통 하나의 랜카드를 가지고 있다면 eth0이 된다.)

ex)
[root@sunny /root]# more /etc/sysconfig/network
NETWORKING=yes
FORWARD_IPV4=”no”
HOSTNAME=”sunny.kerygma.co.kr”
DOMAINNAME=kerygma.co.kr
GATEWAY=”192.168.1.254”
GATEWAYDEV=”eth0”
NISDOMAIN=””

 

라우팅(Routing)

서로 다른 네트워크끼리 통신하는 것을 라우팅이라 칭한다. 라우팅을 하는 장비들은 라우팅 테이블을 가지고 있다. 라우팅 또한 라우팅 테이블을 참조하여 이루어진다.

리눅스 머신의 라우팅 테이블을 보려면
route 나 netstat -r 을 입력하면 된다.

ex)
[root@sunny /root]# route
Kernel IP routing table
Destination      Gateway        Genmask           Flags  Metric Ref  Use Iface
192.168.1.100      *              255.255.255.255      UH       0       0     0eth0
192.168.1.0         *               255.255.255.0          U       0       0     0eth0
127.0.0.0             *              255.0.0.0                 U        0       0    0lo
default           192.168.1.254  0.0.0.0                  UG       0       0    0eth0

대개 라우터를 이용하여 라우팅이 이루어지며, 여러분이 가지고 있는 리눅스 머신들도 라우터로 사용할 수 있다. 단, 랜카드는 2장이나 때에 따라서 그 이상을 가지고 있어야 한다.

리눅스에서 라우팅을 가능케 하려면,
/etc/sysconfig/network 파일의
FORWARD_IPV4=no 를 FORWARD_IPV4=yes 로 바꾸어 준다.

 

DNS (Domain Name Service)

TCP/IP를 기반으로 하는 네트웍에서는 호스트로 IP로 찾는다. 하지만 그 수많은 호스트의 IP만 가지고 찾으려 한다면, 대단한 기억력의 소유자가 아닌 이상, 그 수많은 호스트를 외우고 사용한다는 것은 불가능할 것이다. 그래서 나온 방법이 호스트의 이름과 IP를 맵핑하는 방법, 즉 DNS(Domain Name Service)이다. 이 DNS를 수행하는 서버를 DNS 서버 또는 네임 서버라 한다. 하지만 리눅스에서는 DNS 서버보다 네임 서버라는 용어를 더 많이 사용한다.

웹 브라우저를 사용할 때 우리는 URL를 적는다.
http://www.linuxlab.co.kr 이런 식으로 말이다.
이런 식으로 호스트의 이름을 사용하여 호스트를 찾아갈 수 있다.

물론 그 호스트도 IP를 지고 있지만, 우리들은 IP를 외우면서 사용하지 않는다.
바로 네임서버가 IP로 변환해 주기 때문이다.
리눅스머신에서 인터넷을 사용할 때도 DNS 설정을 해주어야 한다.

/etc/resolv.conf 파일에 사용하는 네임서버의 IP를 적어주면 된다.

nameserver 164.124.101.2

* 물론, 네임서버도 호스트명을 가지고 있다.
보통 “ns.도메인”의 형식으로 사용하지만, 그것은 내부적인 관리를 위해서 주어지는 이름이고, 클라이언트에서의 DNS 설정에서는 호스트명(FQDN)을 적지 않는다.

보통의 경우 ISP에서 라인을 임대하여 사용하는 곳이나, 전화 접속으로 인터넷을 사용하는 곳에선 ISP에 있는 네임 서버를 이용하여 TCP/IP 기반의 네트웍인 인터넷을 사용할 수 있다. 하지만, 독자들이 다니고 있는 학교나, 회사 같은 곳에서도 네임 서버를 구축해놓고 사용하는 곳이 있을 것이다. 중규모 이상의 네트워크에서는 ISP의 네임 서버를 사용하는 것보다, 학교나 사내에 네임 서버를 직접 운용하는 것이 네트워크가 바뀌거나 호스트가 추가될 때 더 능동적으로 대처할 수 있다는 장점이 있다.
물론, 리눅스를 named를 이용하여 네임 서버로 사용할 수 있다.

 

ARP (Address Resolution Protocol)

여태까지 IP 주소가 어떻게 만들어지는지 보아왔다. 하지만 TCP/IP 프로토콜도 이더넷 기반 위에서 동작하는 프로토콜이다. 그렇다면 이더넷은 어떻게 디바이스(랜카드 등..)를 인식하고 확인을 할까? 라는 의문이 생길 것이다. 결국, 이더넷 프로토콜은 여섯 개의 옥텟 숫자로 된 이더넷 어드레스라는 것을 이용하여 호스트를 증명하는데, 이것은 IP 어드레스는 다른 성질의 것이다. 이더넷 어드레스는 하드웨어 제조사들 끼리의 약정에 의해서 미리 정해져서 나오는 것이고 이것 또한 서로 중복되는 일이 없다. IP 어드레스는 이더넷 어드레스 위에서 맵핑되는 형태를 가지고 있으며, 이러한 메커니즘을 ARP라고 부른다. 하나의 인터페이스에 여러 개의 IP를 가지고 있을 수 있지만, 이더넷 어드레스는 한 인터페이스에 하나만을 가지고 있다.

이더넷의 특징중의 하나가 브로드케스트로 호스트를 찾는다. 하지만 TCP/IP 기반의 네트워크에서 특정 호스트를 호출(ping 같은 경우)하면, 호스트와 IP 어드레스를 확인하고 그것이 일치한다면 호출하는 조회하는 호스트를 그 대답을 ARP로 보낸다. 그래서 송신측과 수신측의 호스트가 서로의 이더넷 어드레스를 알 수 있다.

이 ARP는 때로, 디스크 없는 클라이언트들이 부팅 할 때 사용되기도 한다.

arp 나 arp -a 이라고 입력하면 ARP 캐쉬에 저장되어 있는 목록을 볼 수 있다.

ex)
[root@study /root]# arp
Address     HWtype     HWaddress              Flags Mask        Iface
client3       ether         00:06:29:BC:0D:34      C                   eth1
clinet4       ether         00:60:08:3E:3B:05       C                   eth1
server1      ether         00:06:29:BC:0E:24       C                  eth1
gateway     ether         00:E0:B0:56:21:86       C                  eth0

 

TCP/IP와 관련된 데몬

Linux의 TCP/IP 네트워크 서비스는 많은 데몬에 의해서 지원된다. 이들은 백그라운드로 실행되며, 직접적으로 서비스를 지원하거나 다른 네트워크 프로그램에 의해서 사용되어지는 테이블을 관리한다. 다음은 가장 중요한 데몬들이다.

 

inetd

internet services daemon은 주요 TCP/IP 서버이며, 이것이 대부분의 네트워크 수행을 감독하는 책임을 지고 있다. 또한, 하나의 구체적인 작업을 하는 다른 데몬의 호스트를 감독함으로써 자신의 업무를 수행한다. inetd에 의해서 관리되는 서버들은 /etc/inet.conf 파일에 기술되어 있고, telnet, ftp, rlogin, rsh, rcp, finger 명령어들뿐만 아나라 pcnfs와 원격 talk를 포함한다.
* 관련된 명령어

 

telnet (가장 일반적으로 쓰이는 rloin의 형태이다.)

telent은 원격에서 호스트를 사용할 수 있게 해주는 기능이다.
리눅스에서는 기본적으로 텔넷을 지원해 준다.
telnet 호스트명 또는 telnet 호스트ip

ex)
[root@sunny /root]# telnet sophia
Trying 192.168.0.1...
Connected to sophia.kerygma.co.kr.
Escape character is ‘^]’.

Red Hat Linux release 6.0 (Hedwig)
Kernel 2.2.5-15 on an i686
login:

 

ftp

ftp는 원격에 있는 파일을 주고받을 때 사용하는 기능이다.
ftp 호스트명 또는 ftp 호스트ip

ex)
[root@sunny /root]# ftp sophia
Connected to sophia.kerygma.co.kr.
220 sophia.kerygma.co.kr FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:.
Name (sophia:nikky):

*만일 Windows 환경의 CuteFTP나 WS_FTP 같은 GUI 방식에 익숙한 유저라면 X-Window에서 gftp를 사용하면 된다.

 

finger

로컬이나 원격의 사용자 정보(마지막 로긴 시간, 로긴 위치, 메일 도착 여부)를 얻을 수 있다.

ex)
[root@sunny /root]$ finger root@sophia
[sophia.kerygma.co.kr]
Login: root           Name:
Directory: /root                    Shell: /bin/bash
Last login Sat Aug 15 11:55 (KST) on 0 from tty0
No mail.
No Plan

 

named

앞서 /etc/hosts 파일은 TCP/IP에 의해서 통신되는 모든 호스트들을 기술하고 있다. 이것의 기능은 name daemon에 의해서 지원 받게 된다. named가 수행되는 중이라면 /etc/hosts 근거리 네트워크상의 호스트들과 자주 접근하는 호스트들에 대한 정보를 가지고 있다. 따라서 사용자의 호스트가 /etc/hosts에 기술되지 않은 시스템의 주소를 필요로 했을 때 그 주소를 위해서 named를 참조할 것이다.

 

routed와 gated

route demon과 gateway routing daemon은 데이터의 어느 경로로 전송할지를 정할 때 사용되어지는 네트워크에 대한 동적인 정보를 관리한다. 이것은 부트 과정에서 많은 route 명령에 의해서 만들어지는 정적인 라우팅 테이블을 대체하게 설계되어진다. 이들 두개의 데몬 만이 하나의 시스템에서 수행되고, routed는 더욱 새로운 gated에 서서히 자리를 넘겨주고 있다.

 

rwhod

remote who daemon은 주기적으로 네트워크에 있는 모든 호스트에게 공중방송(broadcast) 정보를 발송하는 프로그램이다. 이 데몬이 전송하는 정보는 누가 이 호스트에 로그인 했는지를, 얼마나 오랫동안 로그인 했는지 등의 상황을 알려주는 것들이다. 사용자들은 rwho와 ruptime 명령을 가지고 원격 시스템의 상태를 알 수 있다.

불필요한 데몬의 비활성화

시스템 보안이나 성능 측면에서 몇몇 TCP/IP 데몬을 비활성화(disabling)할 수 있다.(각각은 정말 작지만 시스템에서 측정할만한 부하를 갖는다.) 당연히 특정 데몬들을 제거시키기 위한 일련의 순서가 있다. 만약 rwhod를 비활성화하면 rwho와 ruptime 명령은 작동되지 않는다. named를 비활성화하면 /etc/hosts는 사용자 시스템이 TCP/IP를 통해 통신하는 네트워크상의 모든 호스트를 기술해야만 한다. routed 나 gated 를  비활성화 한다면, 라우터끼리의 라우팅 테이블을 교환하는데 쓰이는 RIP을 사용할 수 없고 단순히 정적인(static) 라우팅 테이블을 만들어야 한다. inetd를 비활성화하면 TCP/IP는 작동되지 않는다.

 

이더넷 인터페이스의 초기화

ifconfig 프로그램으로 이더넷 인터페이스를 형성할 수 있으며 또한 이것을 초기화할 수 있다.

ifconfig 만 입력시킬 경우 현재 사용하고 네트웍 인터페이스의 상태를 표시해 준다.
만일 해당 인터페이스의 정보가 필요하면 “ifconfig 인터페이스명”을 입력하면 된다.

ifconfig로 이더넷 인터페이스를 추가시키거나 삭제할 수 도 있다.
여기서는 eth0:0 이라는 가상적인 인터페이스를 추가/삭제 해 보겠다.

[root@study /]# ifconfig eth0:0 192.168.1.200
[root@study /]# ifconfig
eth0   Link encap:Ethernet  HWaddr 00:10:4B:43:2F:5C
       inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
       RX packets:2415118 errors:334 dropped:0 overruns:347 frame:334
       TX packets:1879446 errors:0 dropped:0 overruns:0 carrier:0
       collisions:17631 txqueuelen:100
       Interrupt:11 Base address:0x320

eth0:0  Link encap:Ethernet  HWaddr 00:10:4B:43:2F:5C
        inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        Interrupt:11 Base address:0x320

lo      Link encap:Local Loopback
        inet addr:127.0.0.1  Mask:255.0.0.0
        UP LOOPBACK RUNNING  MTU:3924  Metric:1
        RX packets:384 errors:0 dropped:0 overruns:0 frame:0
        TX packets:384 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:0

이더넷 인터페이스를 삭제하려면,
[root@study /]# ifconfig eth0:0 192.168.1.200 down
*위의 경우에는 가상의 인터페이스를 추가/삭제 시켰지만, 새로 추가된 이더넷 인터페이스(램카드)도 이러한 방법을 적용시킬 수 있다. (하지만, 먼저 리눅스에서 그 랜카드를 먼저 인식하여야 한다.)

 

네트워크의 상태 보기

netstat 프로그램을 이용하여 TCP/IP 네트워크의 상태(라우팅 테이블, 활성중인 네트워크 연결의 상태, 각 인터페이스 정보)를 점검해 볼 수 있다.

netstat 의 명령 인자

 

인자

설     명

- a

모든 인터넷 연결에 관한 정보를 보여줍니다.

- i

모든 네트워크 장치에 대한 정보를 보여줍니다.

- c

계속적으로(초당) 갱신되는 네트워크 상대를 보내 줍니다.

- n

호스트 이름과 서비스 이름들을 해석하는 대신에 숫자 표현으로 리모트와 로컬 어드레스 그리고 포트 정보를 보여줍니다.

- M

IP Masquarading정보를 보여줍니다.

- r

커널 라우팅 테이블을 보여줍니다.

- t

TCP소켓 정보만 보여줍니다.

- u

UDP 소켓 정보만 보여줍니다.

- V

netstat의 버전 정보를 보여줍니다.

- w

raw 소켓 정보를 보여줍니다.

- x

Unix 도메인 소켓 정보를 보여줍니다.

 

NFS 관리 및 활용

여러분은 Network File System 이라는 것을 들어본 적이 있을 것이다. 바로 상대방의 파일 시스템 일부 또는 전체를 마치 자기 자신의 디렉토리인 것처럼 사용할 수 있게 해 주는 것이 NFS이다. 모든 유닉스가 NFS를 지원하며, 리눅스 또한 지원(서버/클라이언트)한다. NFS를 이용하면, 데이터들을 각각의 호스트에 중복되게 보관할 필요 없이 NFS 서버를 이용하여 관리할 수 있으며, 여러 대의 호스트의 파일시스템을 한데 묶어 저장공간을 최대한 활용할 수 있다. 또한 각각의 클라이언트들은 필요이상의 하드디스크를 가지지 않아도(심지어는 없어도) NFS를 통하여 작업할 수 있다. 물론 충분한 속도가 제공되어야 할 것이다.
리눅스를 이용하여 다른 유닉스 머신의 고용량 파일시스템을 사용할 수 있으며, 반대로 다른 유닉스 머신에 리눅스 파일시스템을 사용할 수 있게 할 수 있다.
하지만, 여기에서는 리눅스 머신간의 NFS만을 다루겠다.

 

리눅스 머신간의 NFS 활용

필자가 가지고 있는 리눅스 머신 sophia가 가지고 있는 파일시스템을 또 다른 리눅스 머신 sunny에서 NFS로 마운트 하겠다.

■ sophia 서버에서의 셋팅

1. /etc/exports 파일의 설정

먼저 /etc/exports 파일을 편집한다...

</etc/exports 파일예제>
/home sunny(rw,no_root_squash)

* sunny 라는 호스트명을 가진 원격호스트에 /home 디렉토리(하위 디렉토리포함)를  읽기/쓰기 권한으로 접근할 수 있다.

■ 공유할 디렉토리명 - /home

서버에서 공유하고자 하는 디렉토리를 절대 경로로 기입한다. root 파일 시스템이어도 되고 마운트된 디렉토리여도 상관없다. 즉, NFS 서버 쪽에서 인식 되어 있는 파일시스템이면 클라이언트쪽에서도 NFS로 공유할 수 있다.

■ 접근할 수 있는 서버 - sunny

만일 아무런 이름도 기입하지 않으면 모든 클라이언트에 대해 접근을 허용한다는 이야기이다. 접근을 제어할 경우에는 서버이름을 기입하고 각각 서버별로 다른 옵션을 지정할 수가 있다. 접근 서버는 다음과 같이 와일드카드를 사용할 수 있다..

ex) *.kerygma.co.kr, 192.168.0.*

■ 옵션 - rw

공유 자원에 대한 세부 옵션으로 기입하지 않아도 되나 시스템 보안이나 자원의 보안이나 자원의 보호를 위해 적절한 옵션들을 지정해주는 것이 좋다.

exports 옵션목록

 

옵션 목록

설명

rw

 읽기 쓰기 모드로 자원을 공유한다.

ro

 읽기 전용 모드로 자원을 공유한다.

noaccess

 지정한 자원에 대한 접근을 차단한다.

 

* noaccess

위의 표의 noaccess를 보고 “무엇 때문에 접근을 차단할 디렉토리를 /etc/exports에 적어야 하는가?” 라는 의문이 생기는 독자가 있을 것이다. noaccess 옵션을 사용하고자 한다면 exports에 등록하지 않는 것이 정상이다. 그런데 부득이 /home 이라는 디렉토리를 공유해야 할 경우 /home 이하의 디렉토리들은 모두 /home의 옵션이 적용이 된다. 이때 /home/httpd라는 디렉토리는 공개할 수 없는 경우 /home을 공유한 다음, 다시 /home/httpd에 noaccess 옵션을 적용하면 이 같은 문제를 해결할 수 있다.

ex)
/home            sunny(rw,no_root_squash)
/home/httpd   sunny(noaccess)

* sunny 라는 호스트명을 가진 원격호스트에 /home 디렉토리(하위 디렉토리포함)를  읽기/쓰기 권한으로 접근 할 수 있도록 하되, /home/httpd 디렉토리는 접근 할 수 없다.

ACL(Access Control List) - no_root_squash

 

옵션

설명

root_squash

기본 설정 값으로 root 계정의 UID(0)을 anonymous, nobody 등으로 매핑 시키는 옵션이다. 설정을 해제할 경우 no_root_squash옵션을 사용한다.

squaid_uids

anonymous mapping을 사용할 uid를 지정한다.

squaid_gids

anonymous mapping을 사용할 gid를 지정한다.

all_squash

모든 사용자들에 대해 anonymous mapping을 지정한다. FTP의 public 디렉토리 등을 NFS로 사용할 경우 유용하다. 기본설정은 반대 값인 no_all_squash이다.

map_static

가장 고급 옵션으로 uid mapping을 정적으로 처리할 경우 사용한다. 별도의 파일을 지정하여 다양한 uid mapping을 지정한다.

 

* 사실 ACL 설정이 관리자가 신경을 제일 많이 써야하는 부분이다.
NFS로 자원을 공유할 때 가장 신중히 고려해야할 부분이 서버측 자원의 소유주와 자원을 사용하는 측의 사용자가 서로 다른 수 있다는 점이다. 사용자 관리는 해당서버의 고유영역이기 때문이며, 만일 서버쪽에 등록되어 있지 않은 사용자가 서버쪽에 쓰기 권한을 가지고 파일을 만들었다면, 서버는 그 파일의 소유주를 누구로 해야할 지 판단할 수 없기 때문에 문제가 발생한다. 그래서 나온 것이 ACL 이며, 필자의 경우 리눅스 서버간의 유저정보(유저네임, uid, gid)를 동일하게 만들었고, 대부분 root 계정으로 사용하기 때문에 편의상 no_root_squash를 사용한다. 만일 복잡한 네트웍의 경우라면, 모든 유닉스/리눅스 머신의 유저정보를 맞추기란 불가능에 가깝다. 그렇기 때문에 적절한 ACL 옵션을 사용해야 할 것이다.

 

nfs 데몬의 실행

NFS 서버로 사용할 리눅스 머신에 클라이언트로부터 들어오는 NFS 자원요청을 처리해주기 위하여 NFS 데몬이 실행되어 있어야 한다.

X-Window를 사용하는 유저라면 Control Panel 의 Runlevel Editor를 이용하여 자신이 현재 사용하는 Runlevel에 대한 데몬 설정을 쉽게 할 수 있으면 해당 데몬을 실행/중단 시킬수 있다. 콘솔모드를 사용하는 유저라면 setup 입력하여 system services 란 항목으로 쉽게 데몬 설정을 할 수 있다.

콘솔에서 데몬 실행은
[root@sophia /root]# /etc/rc.d/init.d/nfs start
Starting  NFS  services:                     [  OK  ]
Starting  NFS  statd:                         [  OK  ]
Starting  NFS  quotas:                      [  OK  ]
Starting  NFS  mountd:                     [  OK  ]
Starting  NFS  daemon:                     [  OK  ]

참고로, 데몬을 중지시키려면
[root@sophia /root]# /etc/rc.d/init.d/nfs stop
Shutting  down  NFS  services:             [  OK  ]
Shutting  down  NFS  mountd:              [  OK  ]
Shutting  down  NFS  daemon:             [  OK  ]
Shutting  down  NFS  quotas:               [  OK  ]
Shutting  down  NFS  statd:                 [  OK  ]
이다.

 

exportfs 실행

NFS 데몬을 실행시킨 후 /etc/exports의 내용을 실제로 서버에 적용시켜야 한다.
exportfs -a 라고 입력하면 된다.

이제 서버의 설정은 되었고, 클라이언트 설정을 하자.

 

NFS 클라이언트 설정

NFS 서버로부터의 자원을 공유하는 클라이언트는 단순히 마운트만 하면 된다.

형식-
mount -t nfs 호스트명:/공유디렉토리 /마운트포인트

호스트명 - NFS 서버의 이름을 말한다.
공유디렉토리-  NFS서버의 exports에 포함된 공유디렉토리이며, 절대 경로를 적는다.
마운트포인트 - 클라이언트에 마운트할 디렉토리(미리 생성되어 있어야 한다.)

ex) mount -t nfs sophia:/home /mnt/nfs

 

* 참조 시스템

kerygma.co.kr 은 가상의 도메인이다.

sophia.kerygma.co.kr
레드햇 6.0 (커널 2.2.5-15)
ip : 192.168.0.254   (eth0   router0.kerygma.co.kr)
     192.168.0.1       (eth0:0 sophia.kerygma.co.kr)
     192.168.1.254   (eth1   router1.kerygma.co.kr)
     192.168.2.154   (eth2   router2.kerygma.co.kr)

sunny.kerygma.co.kr
레드햇 6.0 (커널 2.2.5-15)
ip : 192.168.1.100

nikky.kerygma.co.kr
NT Server 4.0 (sp3)
ip : 192.168.0.10

hosts 파일

127.0.0.1          localhost                    localhost.localdoamin
192.168.0.1      sophia.kerygma.co.kr      sophia
192.168.0.254   router0.kerygma.co.kr     router0
192.168.1.254   router1.kerygma.co.kr     router1
192.168.2.254   router2.kerygma.co.kr     router2
192.168.0.10     nikky.kerygma.co.kr        nikky
192.168.1.100   sunny.kerygma.co.kr       sunny

 

편집자 주)
이 글의 필자로 밝힌 선아는 필자의 본명이 아닙니다.
편집자가 메일서버 교체 과정에서 필자의 본명이 들어있는 메일(및 다른 여러메일)을 지워버렸으나 필자와의 연락이 닿지 않아 우선 필자가 리눅스 뉴스 그룹에서 자주 사용하는 선아란 이름을 썼습니다.(전자우편 주소는 필자 본인 것 입니다.)

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,039 명
  • 현재 강좌수 :  35,848 개
  • 현재 접속자 :  90 명