본문 바로가기

서버운영 (TA, ADMIN)/네트워크

[네트워크] 유닉스 네트워크

네트워크 개요


과거의 고전적인 네트워크의 개념과는 달리 최근의 네트워크는 과거와 비교할 수 없을 정도로 고속화되고 복잡화되어 가는 것이 현실힙니다. 그리고 많은 서비스들이 서로 통합되고 보완되어 현대의 네트워크는 큰 대역폭과 높은 성능을 요구하게 되었습니다. 그 결과 네트워크상에서 문제가 되는 트래픽이나 지연을 줄이기 위한 많은 대안과 새로운 아이디어가 창출되고 있습니다.


하드웨어의 대량생산과 그에 따른 질적 변화는 다양한 서비스를 창출하고 있습니다. 텍스트 중심의 메시지 체계에서 보다 시각적인 그래픽과 멀티미디어 환경으로의 변화는 네트워크 서비스의 개선을 재촉하게 되었습니다. 미래의 네트워크를 이용한 활용 분야는 그야말로 무궁무진하여서 사회 각 부분에 영향을 줄 것이며 미래의 통신 네트워크가 주는 충격은 과거 전화망이 가져온 충격에 버금갈 것입니다.


네트워크는 비교적 얼마 되지 않는 이론에 기본을 두고 있습니다. 그러나 실제 설치에서는 상당히 광범위하고 임의적인 세부 규칙을 따라야 합니다. 이러한 세부 규격은 다른 업체의 제품과 호환성을 보장할 수 있어야 하는 등의 범용성을 지녀야 합니다. 우리가 네트워크를 배우는 것은 단지 이론만을 배우는 것이 아니라 실제 상황에서 구현될 때의 문제점에 어떻게 대처하고 구성하느냐에 있습니다. 네트워크의 이해는 이론에 대한 충분한 이해와 이를 토대로 한 정확한 구현에 있습니다.

 

네트워크 관리자의 경우 이용 가능한 하드웨어와 소프트웨어를 사용하는 능력뿐만 아니라 생산성을 향상하기 위해 정보 흐름을 구성하는 방법을 이해하여야 합니다. 또한 네트워크 시설을 이해하여 소프트웨어와 하드웨어를 갱신, 성능의 감시를 통해 문제점을 신속히 파악하고 해결하여야 합니다. 사실 이런 능력들의 결여로 인해 네트워크 업체들을 찾게 되는데 그 이유는 네트워크 벤더들의 제품마다 특성이 다르고, 하나의 기능에 여러 가지 부가 기능이 더해진 제품들이 많기 때문에 벤더에 종속되기 쉽습니다. 그렇기 때문에 관리자는 자신의 네트워크만 안정적이면 된다는 안일한 생각보다는 여러 제품간의 특성과 장단점을 파악하는 실험적인 정신과 많은 경험을 필요로 합니다. 실제로 어떤 네트워크 업체의 한 팀들이 자사의 네트워크를 채용한 사이트로 직장을 옮기는 경우도 종종 있습니다.

 

네트워크 설계자의 경우 사용자의 요구와 새로운 서비스의 부가가치를 알아야 하고 네트워크에서의 가능한 서비스와 앞으로의 경향에 대해 잘 알아야 합니다. 네트워크는 끊임없이 발전하는 분야라고 생각합니다. 이것은 컴퓨터 관련 기술들과 관계되어 있고, 아직 개선되어야 할 부분이 많은 분야이기 때문입니다. 네트워크를 이해함에 있어서 기본이라고 할 수 있는 데이터 통신에 대한 이론은 비록 지루하고 조금은 어렵게 느껴질 수도 있으나 기본 원리만 이해한다면 향후 네트워크 관련 업무를 할 때 많은 도움이 될 것입니다.

 

최근 폭발적으로 늘어가고 있는 정보통신 업체의 숫자와 천문학적인 숫자의 투자 비용을 보면 정보시대라는 것을 피부로 느끼게 되지만, 사실 양적으로 늘어가는 정보통신 업체에 비해 양적, 질적인 정보통신 인력은 상당히 부족한 것이 현실입니다. 그렇기 때문에 정보통신 업체에서는 신입사원보다는 경력사원을 더 선호하는 실정이고, 정보통신 업계로 사회에 첫 발을 내 딛으려는 신입사원은 자신이 배워온 이론을 기초부터 다시 실습과정을 거치게 되어, 이론과 실제가 격리되는 현상을 경험하게 됩니다.

 

비단 이런 정보통신 기술자들뿐만 아니라 네트워크 프로그래밍에 입문하려고 하는 사람들은 남다른 계기나 경험이 필요합니다. 황금알을 낳는 거위에 비유되는 정보통신업이지만 외국업체의 장비와 솔루션에 잠식되어 있는 것이 현실입니다.

 

 

 

기본 개요


네트워크는 사전적인 의미로 '망 조직'이라는 의미를 가지고 있으며 전문적인 해석은 데이터 통신 그 자체를 말하며 단말(terminal) 장치간의 통신 경로를 구성하는 자원의 집합을 말합니다. 여기서 데이터 통신이란 사용자간의 실질적 정보 교환을 이루는 모든 것을 총칭합니다. 네트워크는 처음 고가의 장비(예를 들어 프린터, 플로터, 대단위 저장 매체)를 공유하여 사용하기 위해 이용되었습니다.

 

하지만 지금은 하드웨어와 소프트웨어는 눈부신 발전으로 전세계를 연결하는 네트워크가 구축되었으며 그 가운데 사용자간의 실질적인 파일이나 메시지 등의 교환도 가능하게 되었습니다. 현재는 오디오 및 비디오 신호를 포함한 멀티미디어 정보도 네트워크를 이용하여 전송이 가능합니다.

 

네트워크라고 하면 많은 사람들이 LAN(Local Area Network)을 떠올립니다. 하지만 LAN은 네트워크의 일부일 뿐입니다. WAN(Wide Aread Network), VAN(Value Added Network) 등 그 외에도 분류할 수 있는 많은 것이 있습니다. 현재 우리가 말하고 있는 네트워크를 간단하게 정의하면 사용자의 정보교환을 가능하게 하는 하드웨어와 소프트웨어 장치의 결합이라고 할 수 있습니다.


네트워크에 대한 많은 정의와 논의, 논쟁이 있지만 사실 일상 생활 속에서 우리는 많은 네트워크를 접하며 살고 있습니다. 네트워크는 이제는 전문 용어가 아니라 바로 우리 일상행활의 일부이고, 터전인 것이라고 해도 과언이 아닐 것입니다. 전화망은 가장 친숙하고 도처에 퍼져있는 음성 전달 목적의 네트워크라고 할 수 있습니다. 비록 단방향이지만 텔레비젼이나 라디오도 일종의 네트워크고 좁게는 하나의 전기제품의 내부도 전기의 흐름을 제어하는 회로로 구성된 하나의 네트워크라고 할 수 있습니다. 그렇기 때문에 네트워크는 하나의 정의로 시작한 학문이었고 특정한 사람들만이 하는 특별한 분야였지만 정보의 홍수 시대에 살면서 빠르고 정확한 정보의 공유라는 측면에서는 필연적인 것이라고 할 수 있습니다. 네트워크의 현실적인 정의는 시간과 공간을 단축시키는 편리한 가상 공간을 의미합니다. 그리고 또한 네트워크는 앞에서 정의한 목적을 위한 하드웨어와 소프트웨어의 긴밀한 조직체를 뜻합니다.

 


 

발전 과정


1830년경 사무엘 모르스에 의해 전신이 발명되고 1876년에 알렉산더 그레햄 벨에 의해 전화가 발명되었습니다. 최초의 전화 시스템은 사용자와 사용자가 직접 연결되어 있는 점대점(point to point) 방식이었습니다.

 

이 방식은 1880년 대에 와서 교환원이 수동으로 교환을 해주는 원시적인 교환 시스템으로 바뀌었습니다. 전자기식 교환기는 1890년대에 와서야 개발이 완료되었으며 지능화된 교환기는 1970년대에 와서야 설치되기 시작하였습니다. 이후 디지털 전송 방식이 개발되고 이것이 ISDN(Integrated Services Digital Network)의 기본이 되었습니다.

 

네트워크의 기본 철학은 '공유'입니다. 공유에 대해 한번 말해보겠습니다. 우리는 왜 매일 텔레비젼을 보는가. 왜 뉴스를 보는가 생각해 보겠습니다. 그 대답은 새로운 정보를 위해서일 것입니다. 과거의 정보에 대한 가치와 달리 현대의 정보에 대한 가치는 한 기업의 흥망을 좌지우지 할 정도의 힘을 갖습니다. 정보는 정보 그 자체의 가치 때문에 많은 또다른 가치를 창조합니다.

 

세상의 모든 일들이 점점 정보에 민감해져 갑니다. 특히 정보의 공유 차원이 지역적이었던 과거와 달리 점점 전 세계로 전역화되어가고 있는 글로벌 네트워크 차원의 정보 공유는 각 기업의 인터넷 사업의 참여와 전용선 설치로 가속화 되어가고 있습니다.

 

 


구성 요소


네트워크를 단순하게 분류하면 송신장치, 전송매체, 수신장치 로 이루어집니다. 네트워크에서의 기능은 크게 이 세 가지 중의 하나로 표현됩니다. 이 세 가지를 묶어서 통신링크(Communication Link)라고 하는데 통신링크는 네트워크에서 공유되는 요소 들입니다. 통신링크 공유의 중요성은 바로 비용과 연결되는 민감한 요소입니다.

 

이 통신링크의 공유는 보통 네트워크에서 백본(Back Bone)이라는 기술로 적용됩니다. 백본이라는 것은 우리 몸에서 척추를 이루는 뼈들을 의미하는데 보통 등뼈라고 합니다. 우리 몸의 신경들은 정말 복잡하게 퍼져있는데, 이러한 각 신경들은 모두 뇌를 향하게 되어 있습니다. 하지만 모든 신경이 다이렉트로 뇌로 연결되어 있는 것이 아니라 중추신경계로 향하게 되어 있고, 이 중추신경은 모두 모아져서 뇌로 이어지는 것입니다.

 

우리 몸은 그야 말로 정교한 네트워크의 구성이라고 할 수 있는 것입니다. 모든 지역 신경망들이 뇌로 향하는 백본을 공유하고 있는 형태라고 하면 이해가 쉬울 것입니다. 우리 몸에서 백본 신경망과 지역신경망의 분리를 실험하는 예가 바로 무릎의 반사신경을 이용한 실험일 것입니다. 무릎의 가운데 부분을 치면 우리의 의지와 관계없이 올라가게 됩니다. 이것에 대한 의학적인 해석은 무릎에서 받은 충격에 대한 신경반응이 백본을 거쳐 뇌로 가지 못하고 다시 무릎으로 되돌아가는 현상이라고 하는데 이것은 패킷이 네트워크의 서버에 도달하지 못하고 지역 라우터에서 다시 송신측으로 보네는 ICMP 메시지에 비유될 수 있습니다. 여하튼 통신링크의 공유의 목적은 하나의 공유 백본을 구축하여 각 지역의 연결을 구현하는 것입니다.

 

만약 모든 통신링크의 객체들간에 직저 연결을 해야 한다면 통신링크의 객체가 추가될 때 마다 기하급수적인 연결이 필요하게 될 것입니다. 네트워크를 우리가 가지고 있는 PC에 비교하면 여러 프로그램들이나 장치들의 중앙연산처리장치와 메모리등의 리소스에 대한 접근이라고 할 수 있습니다. 네트워크에서도 여러 노드에 걸쳐 퍼져있는 터미널이나 클라이언트의 전송을 제어하고 관리하는 중앙 처리장치인 서버가 이에 비유됩니다.

 

중앙에 위치한 서버는 각 클라이언트의 요구들을 모두 공평하게 처리하여야 할 것입니다. 만약 서버가 특정 터미널이나 클라이언트에 대해 독점적인 서비스를 허용한다면 많은 다수의 클라이언트들은 그 서비스가 끝날 때까지 기다려야 할 것입니다. 그것이 사용자들에게는 마치 클라이언트가 다운된 것처럼 보일 수 있을 것입니다.

 

그렇기 때문에 일정 단위로 데이터를 잘게 나누어 다룬다면 여러가지 장점을 취할 수 있습니다. 하지만 우리가 실제로 겪는 네트워크상에서의 문제는 잘게 나누어진 패킷의 유실인데 이러한 문제가 발생하면 다른 전체 데이터의 신뢰성도 부정될 수 있습니다.

 

송신장치(Transmitter)는 말 그대로 수신측으로 보낼 데이터를 만들어내어, 전송에 필요한 부가 데이터, 즉 식별부호, 에러검출 정보 등을 붙이거나 암호화하는 장치를 말합니다. 전송매체(Transmission Medium)는 송신측을 수신측으로 연결하여 주는 물리적 매체를 말합니다. 이 매체에는 가격과 속도, 매체의 특성에 따라 여러가지로 나뉘는데 보통 동축케이블, 구리선, 광섬유 등이 있고, 무선통신에서의 매체에 해당하는 빛의 매질인 자유공간을 지칭하기도 합니다.

 

수신장치(Receiver)는 송신장치로부터 받은 전송정보와 데이터를 구별하여 재조립하는 장치로 송신측의 에러검출 사양과 똑같은 사양의 코드를 가지고 전송데이터의 오류 여부를 판별합니다. 그리고 만약 오류가 검출될 경우 재전송을 요구하여 데이터의 무결성을 보장합니다.

 

 

 

에러 조정


네트워크상에서 오류가 발생하는 원인은 주로 물리적 전송매체의 불량, 트래픽으로 인한 교착상태, 바이러스, 잘못된 전송상태 설정 등이 있습니다. 이럴 경우 수신측에서는 수신패킷에 줕어오는 전송정보를 해석하거나 정해진 전송시간을 경과하였을 경우 송신측에게 재전송 메시지를 보내는데 전송정보의 해석단계에서 두 가지 방법 중 한가지로 해석합니다.

 

그 한가지는 긍정 확인(Positive Acknowledge)인데 이 경우 수신측은 패킷을 올바르게 수신한 경우에만 송신측에 확인 메시지를 보냅니다. 만약 전송 오류가 많이 발생할 것 같은 네트워크에서 긍정확인 방법을 택한다면 많은 효과가 있을 것입니다.

 

다른 한 가지는 부정 확인(Negative Acknowledge)인데 이는 수신측에서 받은 패킷의 오류 정보를 계산하여 오류라고 판단되었을 경우 송신측에 재전송을 요구할 수 있는 방법입니다. 네트워크가 위의 긍정확인 방식과 달리 신뢰성이 있을 경우 이 방법을 쓰면 효과적입니다. 이러한 오류제어에 대해 많은 알고리즘이 존재하고 네트워크 세팅시 설정가능하기 때문에 네트워크 관리ㅏ자나 설계자는 설치 네트워크의 상태를 파악하여 적절한 에러제어 설정을 하여야 할 것입니다.

 

 

 

다중 접근


네트워크는 네트워크상에서 공유되는 자원들, 예를 들면 서버의 하드디스크에 저장된 파일들, 네트워크상의 프린터, 데이터베이스의 데이터들, 서버를 통해 연결할 수 있는 다른 세그먼트의 네트워크 등에 대한 다중 사용자의 접근등을 기본으로 하고 있기 때문에 다중 접근과 관계한 네트워크 설계의 개념에 대한 이해가 있어야 합니다.

 

이더넷의 근간이 되는 ALOHA 시스템으로부터 시작하여 다중사용자의 연결을 통한 네트워크 자원의 공유라는 개념은 네트워크의 중요한 목표입니다. 우리가 보통 컴퓨터에서 메모리에 로드된 특정 번지의 데이터에 대해 다른 두가지의 장치에서 동시에 접근하려고 하면 공유에러 메시지가 나타납니다.
 

또는 데이터베이스 상에서 하나의 테이블에 저장되어 있는 정보에 대해 서로 다른 두 클라이언트 이상이 동시에 갱신을 실시하려고 하면 에러가 날 것입니다. 이러한 에러상황에 대해서 서버의 데이터 제어장치는 이러한 공유 위반사항에 대해 어떤한 규칙을 적용할 것입니다. 네트워크에서도 이러한 문제를 조절하는 어떠한 법칙이 있는데, 이것을 보통 프로토콜이라고 부르는 일련의 약속과 규칙에 의해 제어됩니다.

 

 

 

규모에 따른 분류


LAN이라 함은 근거리 통신망이라 해석되며 사무실의 한 층, 학교나 한정된 지역에 설치하여 독립된 각종 장치를 상호 접속시켜 통신할 수 있도록 구성된 컴퓨터 시스템의 총칭입니다.

 

WAN이라 함은 LAN의 상대적인 개념으로 LAN이 하나의 사무실이나 빌딩에 한정되어 있는데 반해 WAN은 하나의 도시 등으로 사용자가 1000명 이상이 되는 경우가 많습니다. 그 때문에 호스트 컴퓨터의 부담이 가중되어 초고속 처리가 가능한 컴퓨터를 사용할 필요가 있습니다.

 



WAN의 시스템 구성은 보통 몇 개의 LAN이 모여 그들이 고속 전송이 가능한 기간 회선으로 호스트 컴퓨터에 접속되는 형태가 됩니다. 그 LAN의 중심에는 처리 가능 노드가 설치되어 호스트 컴퓨터의 부담을 줄입니다. 보통 WAN은 각국의 전기 통신 주관이 개재, 제공하는 것입니다.


VAN은 부가가치 통신망이라 불리며 1960년대 후반부터 미국에서 나타난 것으로 각국의 공중 통신 업자, 우리 나라의 경우 한국 통신으로부터 회선을 빌려서 여기에 컴퓨터를 연결시켜 통신망을 구축하고 이 통신망으로 통신 업자가 제공하고 있지 않은 서비스를 제공하는 일을 말합니다.


우선 LAN만을 가지고 살펴봐도 Ethernet, Tokenring, Tokenbus, FDDI(Fiber Distribtued Data Interface), DQDB(Distributed Queue Dual Bus) 등의 많은 종류가 있습니다. 따라서 네트워크란 LAN을 두고 하는 말이라는 것은 나무를 보고 숲을 이야기하는 것과 똑같다고 할 수 있습니다.


네트워크는 전기통신의 기술에 최근의 컴퓨터 통신이 결합된 복잡한 신호 전송 장치라고 생각하면 됩니다. 우리가 다른 컴퓨터로 이미지나 텍스트, 동화상 등을 전송한다고 네트워크를 추상화 할 수 있지만 사실 네트워크를 통하여 전송되는 것은 0과 1의 비트의 이동일 뿐이고 물리적으로는 전압의 변화를 통한 신호의 전달입니다. 그리고 이 물리적 신호는 항상 매체를 통하면 왜곡이 되기 때문에 실제 송수신 신호는 예측할 수 없습니다.


그렇기 때문에 통신 기술자들은 전송의 정의를 재미있게 표현합니다. "전송은 신호에 잡음이 더해지는 것이다." 하지만 이러한 잡음들은 정보의 디지털화를 통해 방지할 수 있습니다. 여기서 디지털화라는 것은 일정 구간에서의 연속적 전압의 변화를 이진값인 0과 1의 조합으로 변환한다는 이야기입니다.


네트워크에서의 데이터는 항상 송신측과 수신측사이에 존재하기 때문에 전송의 정확성에 대한 근거가 필요한데 컴퓨터에서 다루는 이진 코드는 일단 단순하고(참 아니면 거짓) 일관성이 있고 논리적이기 때문에 컴퓨터와 통신의 결합은 정말 찰떡궁합이라고 할 수 있습니다.



패킷


패킷은 네트워크상에서 전송되는 데이터의 기본 단위로 사용자의 데이터에 헤더와 트레일러라는 오류탐지 비트가 더해져 수신측에서 받은 송신측 데이터를 검증합니다. 이러한 검증기능이 있기에 네트워크가 신뢰받을 수 있고, 발전할 수 있는 것입니다.


패킷 데이터는 크게 정적 데이터와 동적 데이터로 나뉩니다. 정적 데이터는 비트파일로 변환이 됩니다. 즉, 0과 1로 구성된 하나의 파일로서 보조 저장장치에 정적인 상태로 존재할 수 있음을 뜻하는데, 이 것은 비동기식 통신방법의 객체가 됩니다. 동적 데이터는 비트열로 변환됩니다. 즉, 이것은 메모리상에 존재하거나 정적 데이터의 구성 요소가 되며, 이것은 동기식 통신방법의 객체가 됩니다.




서비스에 따른 분류


서비스에는 먼저 동기식 서비스(Synchronous Services)가 있습니다. 이때 동기란 시간적인 관계가 일치되어 있는 것을 말합니다. 즉, 동기식 서비스란 데이터의 가장 기본이 되는 단위인 비트를 나타내는 각 신호의 발생 시점이 고정된 시간 기준에 관계하는 데이터 전송을 말합니다. 동기식 서비스로 데이터를 전송하면 전송되는 비트열은 모두 동일한 지연 시간을 가지고 전송됩니다.


다시 말하면 첫번째 데이터 비트가 목적지에 도착한 시간과 마지막 데이터 비트가 목적지에 도착한 시간이 동일하다는 뜻입니다. 따라서 비트마다 시간을 신호로 사용하여 송신하고 수신측에서 시간 신호에 의해 데이터를 수신하는 방식을 동기식 전송이라고 합니다.


동기식 통신(Synchronous Communication) 서비스는 일정한 지연(Delay)과 에러율로 비트열을 전송합니다. 즉 어떤 비트들은 정확하게 전송되지 않을 수 있지만, 비트열을 구성하는 모든 비트들이 일정한 지연후에 전송됩니다. '동기식'이라는 말이 의미하듯이 모든 데이터는 동시성을 가집니다.


예를 들면 우리가 전화를 걸게 되면 잡음도 섞이고 예상치 못한 혼선을 가져오게 되는데 이러한 잡음과 혼선에 대해 일정한 지연을 가진다는 것은 동시성을 의미하는 것으로 송신에 에러가 생겼다고 해서 전화를 거는 나의 목소리가 수신측에서 아주 늦게 들리거나 전혀 다른 목소리로 들리는 것은 아니라는 것입니다. 그리고 우리가 전화를 통해 한번 흘린 말이 잡음으로 인해 수신측에서 잘못 되었다고 해서 재전송을 하는 것은 아닙니다.


또 다른 서비스는 비동기식 서비스(Asynchronous Services)로 이는 문자 또는 그 이상의 적당한 단위, 즉 블록의 선두를 감지한 순간을 기준으로 하여 스타트 비트와 스톱 비트에 의해 송수신 동작을 합치는 방식을 비동기식 전송이라고 합니다.


비동기식 통신(Asynchronous Communication)의 데이터들(정확히는 비트들)은 패킷으로 나누어지는데 전송될 패킷들은 서로 다른 지연시간을 가지게 됩니다. 즉 따로 논다는 이야기인데 이 때문에 패킷들은 수신측에서 버퍼에 저장이 되어 다시 일련의 순서를 갖게 되는 것입니다.


이 버퍼라는 것은 특별히 보조 저장장치보다 빠른 메모리에 일정한 저장공간을 확보하여 입출력을 빠르게 하는 목적으로 만드는 것입니다. 중간에 버퍼를 두는 것이 얼마나 유용한가는 조금만 생각해 보면 쉽게 이해가 될 것입니다. 


비동기식 통신 서비스에 영향을 미치는 요소들은 에러율, 지연시간, 송신측의 신뢰성과 보안성들입니다. 비동기식 통신으로 동기식 서비스를 흉내낼 수 있는데 이것의 예를 들면 패킷음성 서비스입니다. 요즘 많이 사용하고 있는 인터넷폰도 한 예인데 수신측에서 자기 멋대로 날아드는 패킷을 버퍼에 모으고, 재조립해서 음성같이 순차적인 서비스를 에뮬레이트하는 것입니다. 이 비동기식 서비스의 비동시성으로 인해 이 통신방법은 주로 '자료를 구성하는 데이터'의 전송에 이용이 됩니다.


비동기식 서비스는 접속지향형 서비스와 비접속지향형 서비스로 나뉘는데 말 그대로 접속지향형이란 일단 접속을 설정해 놓고 순서대로 패킷을 전송한다는 이야기입니다. TCP 프로토콜같은 서비스가 접속지향형 서비스에 속하는데 이는 안정된 가상경로를 설정하고(송신측과 수신측의 일대일 경로) 패킷을 올바른 순서대로 전송하며 패킷의 손실을 허용하지 않는 안정된 전송 프로토콜입니다. 


접속지향 서비스(Connection Oriented Services)는 패킷을 순서대로 전달하고 그 전달을 확인하는 방식을 말합니다. 우편에서 등기를 생각하면 그 이해가 쉬울 것입니다.


비접속지향 서비스(Connectionless Oriented Services)는 패킷을 순서에 관계없이 개별적으로 전달합니다. 따라서 송신측이 보낸 데이터에 대한 보증이 없으며 수신측은 수신된 데이터를 순서 재배열 및 재조립하는 과정을 거쳐야 합니다. 따라서 때로는 에러를 가질 수도 있고 데이터의 일부가 손실될 수도 있습니다.


비접속 지향형 서비스는 접속지향 서비스보다는 좋게 말하면 융통성있다고 할 수 있고, 나쁘게 말하면 흐리멍텅한 서비스입니다. 나름대로 장단점이 있지만 비접속 지향형 서비스는 융통성에 중점을 둔 서비스입니다. 이 서비스는 가상경로를 설정하지 않고 모든 패킷에 순서도 없을 뿐만 아니라 송신 당시 여러 경로로 멀티캐스팅됩니다.


쉽게 말해서 흩어진다는 얘기입니다. 흩어진 패킷들에 대해 송신측은 책임을 지지 않으며 손실이 되면 그뿐입니다. 


이러한 흐리멍텅한 면이 있는 반면 속도면에서는 접속지향형 서비스를 능가하기 때문에 정확한 전송을 요하는 데이터 서비스에는 쓰이지 않고 주로 짧고 신속해야 하는 서비스에 쓰입니다. UDP 프로토콜이 이 서비스에 속하는데 주로 전자대화(채팅프로그램)나 메시지 서비스 등에 이 서비스를 사용합니다.


물론 프로그램 설계 당시에 이런 메시지 처리 부분을 TCP로 처리할 수도 있지만 확실히 UDP 서비스보다는 느리고, 오히려 TCP로 구현한 메시지 서비스는 딱딱한 느낌을 가져다 줍니다. TCP와 UDP의 패킷 구조를 보면 많은 면이 서로 닮았지만 UDP는 많이 단순화되어 있고 크기도 작습니다. 하지만 두 프로토콜 서비스는 서로 다른 포트를 씁니다.


또다른 서비스로 급송데이터 서비스가 있는데 이 서비스는 패킷에 우선순위를 부여하는 방식으로 최근의 스위칭 장비에서 이런 서비스를 응용하기도 합니다. 급송데이터 서비스는 급히 보내야 할 패킷을 전송대기중인 패킷들의 가장 앞부분에 위치시켜 전송합니다.


지금까지 여러가지 통신 서비스에 대한 분류한 것을 보았습니다. 모든 통신 서비스를 위의 분류에 포함시킬 수 있지만 최근의 서비스들은 상호 절충하거나 제거 통합하여 보다 최적화된 통신 서비스를 제공합니다. 자신이 사용하고 있는 통신서비스의 내요에 대한 파악은 네트워크를 이해하고 예측할 수 없는 네트워크상의 문제를 해결하는 실마리를 주는 중요한 요소 중 하나입니다.




토폴로지별 분류


토폴로지별 분류란 네트워크의 물리적 접속 형태별 분류인데 버스형, 링형, 스타형, 트리형 등이 있습니다. 먼저 버스형(Bus Topology)에 대해 살펴보면 모든 노드의 입력 리시버(Input Receiver)와 출력 드라이버(Output Driver)가 버스선에 직접 연결된 구조를 가집니다. 구성하기 쉽고 구성 단가가 낮은 장점이 있습니다. 일반적으로 많은 네트워크가 버스형으로 구성됩니다.


링형(Ring Topology)은 루프 모양의 전송로(Transmission line)에 복수의 단말(Terminal)이 접속되어 있는 형태입니다. 스타형(Star Topology)은 호스트 프로세서(Host Processor)는 중앙에 위치하고 각각의 프로세서가 호스트 프로세서와 통신하는 방식을 말합니다. 이 형태의 특징은 한 프로세서의 고장은 시스템 전체에 영얗을 미치지는 않으나 중앙의 제어 장치가 고장나면 전체 시스템이 마비되는 단점이 있습니다.


트리형(Tree Topology)은 나무가 하나의 뿌리에서 줄기가 나오고 다시 여러 개의 가지로 나뉘어 지듯이 하나의 호스트로부터 여러 개의 단말들이 가지처럼 접속되어 있는 형태입니다. 이런 계층 구조를 가진 네트워크는 결코 루프를 형성하지 않으며 단점은 하나의 단말로부터 다른 단말로의 경로가 굉장히 길어질 수 있습니다.




전송 방식별 분류


네트워크를 전송방식별로 분류해보면 크게 Broadband 방식과 Baseband 방식으로 나눌 수 있습니다. Broadband(광대역 전송) 방식은 시리얼 인터페이스로부터의 신호(베이스 밴드 신호)를 모뎀 등을 써서 변조시켜 송신하는 방법을 의미합니다. 변조 방법은 주파수 변조와 위상 변조 방법이 흔히 쓰입니다.


Baseband 방식은 신호의 변조 없이 송신하는 방식으로 인터페이스 회로의 조건에 따라 플러스와 마이너스를 사용하여 논리의 표현이 조합됩니다. 이것은 단지 하나의 신호만을 전송하게 됩니다.




프로토콜 설계


프로토콜의 의미가 단순하다고 프로토콜의 설계까지 간단한 것은 아닙니다. 물론 단순한 메시지만을 주고받는다면 설계라는 개념조차 적용하지 않아도 되겠지만 네트워크 상에서 복잡한 작업을 수행해야 하는 시스템 사이에는 프로토콜 설계가 만만치 않습니다.


네트워크 시스템을 개발하는 개발자들은 몇가지 규칙에 따라 프로토콜을 설계해야 합니다. 첫번째로는 변하지 않을 뼈대를 가지도록 만들어야 합니다. 즉, 새로운 메시지가 추가될때마다 프로토콜 전반이 변한다거나 다른 규칙이 변하면 안됩니다. 대부분 간단한 규칙만 적용해서 프로토콜을 정의하고 나면 생각지 못했던 부분이 추가되면서 변화가 불가피하게 됩니다.프로토콜이 변하면 시스템들이 모두 변해야 하는 문제가 발생할 수도 있고 기존의 메시지나 데이터가 무용지물이 될 수도 있기 때문에 처음 만들 때 여러 경우의 수를 대비해서 설계를 해야 합니다.


두번째는 에러 처리를 잘할 수 있도록 만들어야 합니다. 즉, 메시지의 종류와 메시지에 포함된 데이터의 내용이 정확히 일치해야 하고, 이를 확인할 수 있어야 합니다. 그래야 이를 어긴 메시지인지 알 수 있으며 필요할 때 에러 처리를 할 수 있습니다. 예를 들어 데이터를 삭제하는 메시지인데 생성을 위한 데이터가 포함되어 있다면 이를 확인한 뒤, 재전송을 요구하든지 에러처리를 하든지 해야 합니다.


세번째는 프로토콜이 너무 비대하면 안됩니다. 필요없는 내용을 너무 많이 포함시키거나 애매모호한 내용이 많이 들어가게 되면 프로토콜로써의 가치가 많이 떨어집니다. 이는 에러를 유발시키는 요인이 되기도 합니다. 프로토콜을 설계할때는 먼저 업체에서 많이 사용하고 있는 내용을 확인하는 것이 좋습니다. 그리고 이를 응용하고 적용하는 작업이 필요합니다. 어떤 작업이든지 마찬가지겠지만 프로토콜 설계작업 또한 설계시간에 하루를 더 투자하면 나중에 일주일을 절약할 수 있습니다.




네트워크 어드레드


시스템 상호간에 연결이 설정되려면 서로의 주소(어드레스)를 알아야합니다. 이때 사용되는 어드레스에 대해 간단히 살펴보면 먼저 이더넷 어드레스가 있습니다. 이더넷 어드레스는 물리적 주소 또는 맥(MAC) 어드레스라고도 불리는데 대체로 6옥텟(바이트)으로 네트워크 어댑터의 PROM에 기록되어 있습니다.


네트워크에 물려있는 호스트들은 각각 이름을 가지고 있는데 이러한 이름은 alias를 이용하여 별명으로 대체될 수도 있습니다. 호스트네임 또한 동일한 네트워크 내에서는 이름이 서로 달라야 합니다.


네트워크 어드레스에서 아주 중요한 어드레스는 역시 IP 어드레스입니다. IP 어드레스 또한 동일한 네트워크 내에서는 서로 다른 주소를 가지고 있어야 합니다. 만일 전세계 네트워크 망에 물려있는 시스템이라면 전세계적으로 유일한 IP 어드레스를 내부에 가지고 있어야 합니다.


IP 어드레스는 4옥텟으로 각 숫자는 점으로 분리하여 표시하고 표시할 때는 십진수를 이용합니다. 따라서 시스템이 가지고 있는 IP 어드레스는 0.0.0.0 ~ 255.255.255.255 중에 하나가 됩니다. IP 어드레스는 시스템이 속해있는 네트워크를 나타내는 부분과 해당 네트워크 속에서 시스템을 표시하는 부분으로 나뉘게 됩니다.


예를 들어, 192.168.100.101이라는 IP를 가지고 있다고 했을 때 3바이트는 네트워크 부분이고 1바이트는 시스템 부분이라면 192.168.100은 네트워크를 위한 번호이고 101은 시스템을 위한 번호입니다. 네트워크 상에서 해당시스템을 찾을때 처음 3개의 바이트를 이용해 해당 네트워크를 찾고 마지막 바이트를 이용해 해당 시스템을 찾게 됩니다.


그런데 몇 바이트까지가 네트워크 부분이고 몇 바이트가 시스템 부분인지 어떻게 알 수 있을까요? 이를 위해 IP 어드레스는 내부에 이를 계산할 수 있는 정보를 제공하고 있습니다. 먼저 IP 어드레스는 네트워크를 위한 부분을 이용하여 등급을 나누고 있는데 이를 클래스라고 부릅니다. 클래스는 아래와 같이 A~C 클래스가 존재합니다. 각각을 간단히 설명하면 다음과 같습니다.



  • A 클래스: 첫번째 바이트가 네트워크 부분. 나머지 3바이트는 시스템 부분. 따라서 네트워크를 제외한 부분만큼 호스트에 IP를 부여할 수 있다. 즉 255x255x255개 만큼
  • B 클래스: 두번째 바이트까지가 네트워크 부분. 나머지 2바이트는 시스템 부분, 따라서 255x255개 만큼 네트워크 속의 시스템들에게 IP를 부여할 수 있다.
  • C 클래스: 세번째 바이트까지가 네트워크 부분. 총 255개의 IP를 부여할 수 있다.


각 클래스들은 IP 어드레스의 첫번째 바이트의 최상위 비트를 이용하여 계산이 됩니다. 이를 간단히 소개하면 A클래스는 첫번째 비트가 0으로 세팅이 됩니다. 즉 A 클래스의 IP어드레스를 2진수로 표현하면 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx이 된다는 것입니다. 이를 십진수로 환산했을 때 첫번째 바이트는 0에서 127중 하나의 숫자를 가게 됩니다.


B클래스는 처음의 바이트의 최상위 비트가 10으로 세팅이 됩니다. 다시 말해 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx가 된다는 것입니다. 따라서 첫번째 바이트가 가질 수 있는 숫자는 128~191중 하나가 됩니다.


C클래스는 첫번째 바이트의 최상위비트가 110이 됩니다. 따라서 첫번째 바이트가 가질 수 있는 숫자는 192~223 중 하나가 됩니다. 이제 이러한 룰을 바탕으로 첫번째 바이트의 비트맵을 이용하여 IP의 클래스를 계산해내고 네트워크 부분과 시스템 부분을 분리한 후 해당 시스템을 찾을 수 있게 됩니다.




데이터 전송


유닉스에서 네트워크를 이용하여 데이터를 전송할 때 사용하는 가장 작은 단위는 패킷입니다. 패킷은 헤더와 메시지(body)로 이루어지는데 헤더 속에는 패킷을 보내는 시스템의 IP 어드레스, 패킷을 수신하는 시스템의 IP 어드레스 그리고 어떤 종류의 메시지가 있는지를 나타내는 정보 등이 포함되어 있습니다. 그리고 헤더를 제외한 메시지 부분에는 실제 보내고자 하는 데이터의 내용이 포함되어 있습니다.


패킷을 만들고 전송을 하게 되면 패킷을 발송하는 시스템은 패킷의 헤더를 보고 수신 시스템의 어드레스를 조사하게 됩니다. 만일 어드레스가 내부(로컬-local) 망에 있는 시스템이면 수신 시스템에 바로 패킷을 전송하게 됩니다. 내부 망에 물려있는 시스템이 아니면 패킷을 라우터에게 전송합니다.


라우터로 패킷이 전송되면 라우터는 Routing 테이블에서 수신 시스템이 포함되어 있는지 체크를 한 후 수신 시스템에게 패킷을 포워딩하게 됩니다. 만일 자신의 Routing 테이블에서 해당 시스템을 찾을 수 없다면 다른 라우터에게 패킷을 전송합니다.



NFS(Network File System)

유닉스는 다른 시스템에서 사용하고 있는 파일 시스템을 자신의 시스템속의 파일인 것처럼 사용할 수 있는 네트워크 파일 시스템 기능을 지원합니다. 서버로 사용되는 시스템은 자신의 파일 시스템을 원격지에 있는 시스템이 사용할 수 있도록 제공합니다. 클라이언트로 사용되는 시스템은 서버에서 제공하는 자원을 자기것인 양 활용합니다.


요즘은 윈도우에서 유닉스에 있는 파일 시스템을 네트워크 파일 시스템으로 활용할 수 있도록 만들어주는 삼바 서버를 많이 사용하고 있습니다. 회사에 유닉스 시스템이 있으면 유닉스와 유닉스 또는 유닉스와 윈도우 시스템 사이에 NFS를 구축해 보는 것도 좋을 것입니다.