tcp/ip

sky_orca_by_hontor-d9jtvpeTCP/IP 기반의 네트워크 제품을 사용해본 경험이 있는 사용자라면 적어도 IP 주소체계,
라우팅, 그리고 인터넷 프로토콜의 기본적인 동작 방식 정도는 이해하고 있을 것이다.

그러나 정식 교육을 받지 않았다면, 아마도 네트워크의 회선 또는 애플리케이션의 관점에서
TCP/IP가 어떻게 동작하는지 정확하게 알지 못할 것이다.

이 장에서는 그러한 관점에서 TCP/IP를 소개하여 네트워크 트래픽의 본질을 제대로
이해할 수 있도록 돕고자 한다.

간략한 인터넷의 역사

TCP/IP가 어떻게 그리고 왜 그렇게 동작하는지 이해하려면 먼저 네트워크 프로토콜의
기원과 인터넷의 역사를 이해해야 한다. 그래야 TCP/IP의 설게 원칙과 그에 따른
오늘날 의 쓰임새를 제대로 이해할 수 있다.

TCP/IP가 개발되던 당시의 전형적인 컴퓨터 네트워크에서 TCP/IP는 혁명적인
첫걸음이었다. 컴퓨터의 상용화 초기(1960년대 말) 에는 대부분의 회사에서 모든 정보
처리 능력을 대형 시스템에 집중시켰다.

이런 시스템은 고유의 네트워크 구조와 프로토콜을 사용하였으며, 그러한 고유의 네트워크
프로토콜을 사용하여 중앙 호스트와 통신하는 터미널과 라인 프린터를 통신 컨트롤러에
연결하는 것이 전부였다.

대부분의 초기 컴퓨터 네트워크는 고유의 네트워크 프로토콜과 서비스를 위해 이런
계층 구조를 채택하였다.

사용자가 연산 처리 능력의 향상을 요구하면, 시스템 관리자는 다른 공급업체로부터
다른 시스템을 도입하는 대신 기존의 플랫폼에 새로운 컴포넌트를 설치히거나 기존의
모델을 더 새롭고 큰 모델로 교체하였다.

다른 기종간의 연결은 예를 찾을 수도 기대할 수도 없었다. 지금까지도 IBM 터미널을
디지탈 (DEC, 지금은 컴팩에 인수되어 역사 속으로 사라졌다) 시스템에 연결하여
제대로 동작할 것이라고 기대하는 것은 무리다.

이는 각 장비마다 사용하는 프로토콜이 서로 완전히 다르기 때문이다.

국방 분야에서 컴퓨터의 사용이 더욱 중요해지자, 특히 미 육군은 주요 연구소와 기관이
연산 처리 자원의 공유를 통해 조직의 경계를 넘어 연구 과제와 수퍼컴퓨터를 공유해야
할 필요성을 절감했다.

그러나 각 기관들이 서로 호환되지 않는 시스템을 사용하였으므로 한 기관의 사용자는 다른
기관의 연산 처리 서비스를 사용할 수 없었다. 더 나아가, 각 기관은 서로 다른 컴퓨터 언어,
하드웨어, 네트워크 장비를 사용하였으므로 어떤 프로그램을 다른 시스템에서 실행하도록
이식하는 것도 쉬운 일은 아니었다.

미 국방부(DOD)의 ARPA(Advanced Resaerch Projects Agency)는 자원의 공유를 증진
시키는 정책의 하나로 연구 기관들을 잇기 위해 공급업체로부터 독립적인 네트워크의 개발을
총괄하게 된다.

각 기관이 고유의 네트워크 기술을 이용하는 컴퓨터를 사용하고 있었으므로 공급업체로부터
독립적인 네트워크릃 개발하는 것이 가장 중요한 일이었다.

1969년 사설 패킷 교환 네트워크에서 이 작업이 시작되었으며, 후에 이 네트워크는
ARPAnet으로 알려지게 된다.

ARPAnet은 각각의 데이터 단위가 개별적인 개체로서 미국 내에서 라우트되도록 한 세계
최초의 광역 패킷 교환 네트워크였다. 이전의 네트워크들은 특정 두 지점을 전용선을
이용해서 종단간(end-to-end)으로 연결하는 회선 교환 네트워크였다.

반면 ARPAnet은 기관들을 망형 토폴로지(mesh topology)처럼 서로 연결하여, 한 곳에서
전송된 데이터가 여러 경로를 통해 목적지에 전달될 수 있도록 하였다.

이런 설계는 탄력성과 내장된 결합 허용 기능 때문에 채택되었다.

즉 어떤 기관이 폭파되거나 네트워크에서 제거되어도 네트워크에 연결된 나머지 기관에는
영향을 주지 않는다.

같은 시기, 다른 네트워크 공급자도 ARPAnet의 기관들과 서로 연결하기 시작하였다.
이런 각종 네트워크 들이 서로 연결되면서 ‘인터넷(Internet)’이라는 용어가 사용되기 시작하였다.

그 후 몇년 동안 ARPAnet에는 더 많은 기관들이 참여하게 되었고, 다른 네트워크도 개발되었으며,
이더넷 등 새로운 네트워크 기술이 널리 사용되기 시작하였다.

이 모든 변화의 결과, 네트워크를 ARPAnet의 패킷 교환 토폴로지에서 허용하는 것 보다
더 높은 계층에서 처리해야 한다는 요구가 나왔다.

서로 다른 물리적 네트워크를 통해 데이터를 교환할 수 있도록 하는 문제가 중요해졌으며,
물리적 네트워크가 ARPAnet의 같은 광역 네트워크이든 이더넷과 같은 근거리 네트워크 토폴로지든

상관없이, 어떠한 물리적인 토폴로지에 속한 소프트웨어에서도 네트워크 프로토콜이 구현되어야 한다는
것을 의미했다.

TCP/IP의 탄생

1973년에는 서로 다른 네트워크 토폴로지를 사용하는 시스템을 연결하기 위한 소프트웨어
기반의 네트워크 프로토콜인 TCP/IP 프로토콜의 개발이 시작되었다.

1978년 에 이르러(오늘 우리가 사용하는 것과 같은 버전인) IP 버전 4의 개발이 완료되었으며,
ARPAnet에서 IP로 실질적인 전환은 그 4년  뒤에 시작되었다. 그 무렵, 버클리에 있는
캘리포니아 주립대학교에서는 연구 단체에서 널리 사용되던 운영체제인 유니스(Unix)
의 자유 배포 버전에 TCP/IP를 같이 묶어 배포하기 시작하였다.

TCP/IP가 도입되어 폴 넓게 사용되면서 컴퓨터 네트워크 역사에 커다란 지각 변동이
일어났다.

TCP/IP가 도입되기 이전에는 거의 모든 네트워크 토폴로지에서 하드웨어 기반의
네트워크 노드가 중앙 호스트로 트래픽을 전송하고, 중앙 호스트는 송신 시스템을
대신하여 목적지 노드에 데이터를 전달하였다.

예를 들어 [그림 1-1]은 호스트 중심 네트워크 구조를 보여 준다.

이 모델에서 장비들은 모든 네트워크 트래픽을 조정하는 중앙 시스템에 연결된다.
따라서 터미널 사용자는 화면의 테스트를 인쇄할때 조차도 프린터에 직접 데이터를
전송하지 못한다.

대신 사용자가 중앙 호스트에 데이터를 전송하면, 중앙 호스트는 변환하여 프린터로
전송한다.

그러나 TCP/IP를 사용하면, 각 네트워크 장비는 중앙 호스트를 거칠 필요 없이 다른
장비와 직접 통신할 수 있는 네트워크 시스템으로 취급된다.

IP 네트워크에서는 각 장비가 (그림 1-2)와 같이 자신의 네트워크 서비스만 책임지는
자율적인 단위로 동작하기 때문에 거의 무법 상태가 된다.

하향식(Top-down) 모델로는 넓은 지역에 걸쳐 분포된 수백만 개의 장비를 지원하지
못한다.

그러나 TCP/IP가 이런 식으로 설계되었기 때문에 전국적인 규모의 애플리케이션 및 자원을
공유할 수 있다. 게다가 TCP/IP 의 설계 모델은 네트워크의 일부가 손상되는 경우에도
동작하지만, 호스트 중심 모델은 중아 호스트가 파괴되거나 손상되면 네트워크
전체의 동작이 멈추게 된다.

오늘날의 인터넷

ArPanet은 시간이 흐르면서 TCP/IP를 사용하는 개방적인 ‘네트워크들의 네트워크’
로 발전하였다. ARPAnet에는 교육 기관, 상업 목적의 기업, 그리고 기타 조직들이
망형 네트워크로 상호 연결되었다. 하지만 지금은 이런 망형 구조도 훨씬 더 구조직인
체계로 대체되어 찾아보기 힘들다.

요즘 대부분의 조직은 서로 직접 연결하기보다 네트워크 트래픽을 다른 시스템 네트워크로
중계하는 로컬 네트워크 접속 서비스 사업자를 경유해서 서로 연결된다.

일반적으로 지국촌 단위나 국가 단위의 주요 연결 서비스를 제공하는 상위 레벨의 인터넷 서비스
회사(ISP)의 수는 손에 꼽힐 정도로 숫자가 적다.

이런 ISP의 대부분은 대규모 네트워크를 전문으로 하는 전시통신 회사들이다.

상위 레벡의 망사업자 밑에는 사용자에게 직접 지역 네트워크 접속과 저속의 연결 서비스를
제공하는 지역 네트워크 접속 서비스 회사가 있다(이런 중간 계층의 서비스 공급자를 ‘인터넷
접속 서비스 회사(IAP)’라고 부른다). [그림 1-3]은 이런 구조를 보여 준다.

겉으로 보기에 인터넷은 몇 개의 주료 네트워크 회사가 전세계적인 대규모 ‘백본’ 서비스를
제공하고, 이런 네트워크 의 대역폭을 재판매하는 수많은 2차 서비스 사업자 등
으로 구성되어 있다고 볼 수 있다.

그러나 좀 더 자세히 살펴보면 이런 구조의 밑단에는 네트워크에 실질적으로 트래픽을
생성하는 조직이 존재한다.

인터넷의 정의

상호 연결된 네트워크가 많다고 해서 그것이 ‘Internet(인터넷’이 되는 것은 아니다.
‘internet(소문자 i)’이란 네트워크들을 서로 연결시키는 것 또는 서로 연결된 네트워크
들을  말한다.

예를 들어, 애플토크(AppleTalk)와 몇 개의 라우터를 사용하여 매킨토시 네트워크들을
묶을 수 있다. “Internet(대문자 I)’이라는 용어는 초기에 ARPAnet과 기타
연구용 네트워크를 포함하였던 TCP/IP 기반 시스템 등으로 이뤄진 전세계적인 네트워크를 지칭한다.

현재까지 복수 계층의 네트워크 설계를 제공하는 수많은 사설 및 공중 네트워크가 존재해 왔다
(1980년대의 사설 SNA(System Network Architecture의 줄임말로, IBM 고유의 네트워크
프로토콜) 네트워크가 그 좋은 예다).

따라서 인터넷은 TCP/IP 프로토콜을 사용하여 호스트간(host-to-host) 연결을 지원하는
네트웤들의 집합이다.

이와 같은 방식으로 연결된 네트워크는 스스로 결정하는 지능적인 종단 시스템들로
구성되어 있으며, 각 종단 시스템은 자신이 선택한 어떤 호스트와도 통신할 수 있다.
인터넷은 (많은 사설 네트워크와 같이) 중앙 기관에서 통신을 제어하는 네트워크가 아니라,

서로 자유롭게 통신할 수 있는 자율적인 호스트들의 집합이다.

흔히들 쉽게 간과하지만, 이는 인터넷과 다른 네트워크를 구별빗는 중요한 특징이다.
예를 들어, 많은 사설 네트워크에서는 사용자가 다른 네트워크의 사용자에게 메일을
보낼 수 있도록 메일 배달 서비스를 제공하지만, 미리 정의된 메일 게이트웨이 서비스를
거쳐야 한다.

인터넷은 이와는 반대로 중앙 시스템을 거칠 필요 없이 사용자가 직접 매일을 교환할 수 있게 한다.
이런 맥락에서 인터넷은 자율적인 호스트들의 집합이다.

그러나 호스트들이 서로 직접 통신하는 것만으로는 인터넷이 만들어지지 않는다. 많은
네트워크에서 사용자는 다른 네트워크의 호스트외 직접 통신할 수 있지만, 그렇다고
그 네트워크 자체가 인터넷의 일부로 간주되지는 않는다.

예를 들어, 많은 DECnet 네트워크는 이런 기능을 제공해 왔으며 노벨(Novell)사도
IPX를 통해 이와 유사한 서비스를 제공해왔지만, 이런 네트워크들을 인터넷이라고
부르지는 않는다.

인터넷을 다른 네트워크들과 구별짓는 마지막 주요 기준은 인터넷 표준에 의해 정의
된 개방적인 프로토콜과 절차를 자발적으로 준수하여 호스트간 연결을 제공하는
네트워크들의 집합이라는 점이다.

따라서 네트워크가 인터넷의 일부가 되기 위해서는 인터넷 프로토콜과 표준을 사용하여
공급업체로부터 독립적인 네트워크 환경을 제공해야 한다.

일치된 프로토콜과 서비스를 사용하는 것인 인터넷의 올바른 동작을 보장한다는 점에서
인터넷을 정의하는 가장 중요한 기준이라 하겠다.

예를 들어, 사설 네트워크에서 처럼 사용자들이 서로에게 메일을 직접 보낼 수 있게 하는
것만으로는 인터넷이라고 하기에는 불충분하다.

사용자들이 같은 프로토콜과 서비스를 사용하여 메일을 교환하더라도 그러한 프로토콜이
인터넷 표준으로 정의되어 있어야 한다.

TCP/IP의 구조

TCP/IP가 지닌 ‘분산’이라는 특성을 이해하기 위해서는 TCP/IP가 폭 넓은 범위의
기능을 제공하는 모듈화된 프로토콜의 집합이라는 것을 알고 있어야 한다. TCP/IP
는 단일한 체제로 이뤄진 프로토콜이 아니라, 웹 브라우징과 같이 애플리케이션에 특화된
기능에서부터 IP나 TCP와 같이 하위 레벨 네트워크 프로토콜에 이르기 까지 다양한 프로토콜의

집합이다.

OSI(Open Systems Interconnect) 참조 모델은 네트워크의 기능을 물리적인 배선에서
네트워크 애플리케이션에 이르기까지 여러 계층으로 나누어 다른 종류의 프로토콜을 서로 비교하는
보편적인 도구로 사용되고 있다.

따라서 TCP/IP와 OSI 참조 모델을 비교해 보면 각각의 주요 프로토콜이 서로 어떻게 작용하는지
쉽게 이해할 수 있다.

OSI 참조 모델은 네트워크가 제공하는 여러 가지 기능을 7개의 계층으로 나뉘어 식별한다.
7개의 계층은 단일 시스템에서 사용되는 여러 프로토콜을 비교하는 데 사용할 수 있다.

OSI 참조 모델의 각 계층은 독특한 기능을 가지며, 전체 모델이 올바르게 동작할 수 있도록
계층들간에 서로 의존한다.

각 계층은 자신의 바로 상위 계층이나 하위 계층과 통신을 하며, 한 계층에서 문제가 발생하면
그 계층이 주위의 계층에 피드백을 제공해야 한다.

OSI 참조 모델은 다양한 네트워크 서비스를 논의하는 데 매우 유용한 도구다. 예를 들어,
로컬 프린터에서 문서를 인쇄하는 간단한 네트워크 서비스를 살펴보는 데에서도 OSI
참조 모델을 사용하여 동작 방식을 결정할 수 있다.

이 모델을 사용하여 노벨(Novell) 네트워크에서 인쇄가 이뤄지는 방식과 TCP/IP 네트워크에서
인쇄가 이뤄지는 방식을 결정할 수 있다.

이 예들은 모두 같은 모델을 사용하므로, 이들은 같은 목적을 위해 매우 다른 기술을 사용하더라도
서로 비교해 볼 수 있다.

그러나 모든 네트워크 기술이 7개의 계층으로 이뤄져 있는 것은 아니다. 또 이들이 모두
OSI 참조 모델의 7개 계층과 완벽하게 일치하지도 않는다.

대부분의 경우 제한적이고 특정한 부분 외에는 OSI 참조 모델과 일치하지 않는다.
그렇지만 조근만 생각하면 이들 모두를 OSI 참조 모델과 비교할 수 있다.

OSI 참조 모델이 널리 사용되는 이유는 바로 이러한 유용성 때문이다.

OSI 참조 모델의 7개 각 계층과 그 목적을 알압노다. 여기서는 OSI 참조 모델
이 실질적인 구현에는 직접적인 의미가 옅은 개념적인 모델임을 주의해야 한다.

물리 계층

물리 계층은 네트워크에서 서로 다른 시스템을 연결하는 데 사용되는 물리적인
배선(cabling)과 관련이 있다. 직렬(serial) 및 병렬(parallel) 케이블 , 이더넷 및
토큰링 배선, 전화 회선, 그리고 이런 배선 시스템에서 사용되는 특정 커넥터와 잭(jack)
등이 모두 이 계층에 속한다.

배선과 커넥터 등을 엄격하게 표준으로 규정하지 않았다면, 장비 공급업체들마다 서로 동작할 수 있는
배선과 커넥터를 제작할 수 없게 되어 통신이 불가능해졌을 것이다.

따라서 모든 배선 시스템은 매우 엄격한 표준을 준수하여, 네트워크 장비들이 적어도 전압이나
저항의 차이를 염려할 필요 없이 서로 통신할 수 있도록 해야 하는 것이 물리 계층의 기준이다.

데이터 링크 계층

데이터 링크 계층은 물리 계층을 통해 정보가 전달되는 방식을 정의하며, 물리 계층이
정상적으로 동작하는가를 확인한다.

공중 전화 네트워크나 라디오, 텔레비전 등의 몇몇 네트워크는 아날로그 사인파을 통해
정보를 전달하는 반면, 대부분의 컴퓨터 네트워크는 각이 진 디지털 펄스를 통해 정보를
전달한다.

만약 물리적 배선을 통해 정보를 전달하는 데 문제가 발생한다면, 이 게층은 정보를
재전송하거나 네트워크 계층에 오류를 통보하여 그러한 오류를 처리해야 한다.

네트워크 계층

네트워크 계층은 네트워크에서 시스템들의 주소를 확인하거나 시스템간의 실질
적인 데이터를 전달하는 데 사용된다.

네트워크 계층은 네트워크의 물리적 특성을 고려하여, 데이터 링크 계층이 패키지를 물리
계층으로 전달할 수 있도록 정보를 패키지에 저장한다. 예를 들어, 물리 계층이 전화 회선이라면,
네트워크 계층은 데이터 링크 계층이 아날로그 회선을 통ㅎ 패키지를 전달할 수 있도록 정보
를 패키지에 저장한다.

마찬가지로 물리 계층이 디지털 이더넷 LAN이라면 네트워크 계층은 정보를 이더넷에 적합한
디지털 신호로 캡슐화하여 물리 계층에 전달되도록 데이터 링크 계층에 전달한다.

네트워크 계층에서 무결성 검사를 하지 않는 네트워크도 많다. 네트워크 계층은 데이터 링크
계층에서 오류 보고를 하지 않는 한 네트워크가 정상적으로 동작한다고 가정하고 단순히 패키지로
전달하는 서비스만 제공한다.

신호가 발신될 수 있다면 그 신호가 수신될 수 있다고 가정하는 텔레비전과 라이도
방송의 동장 방식과 같다고 할 수 있다.

많은 디지털 네트워크 기술은 이런 접근 방식을 채택하고 있기 때문에 전달상항을
추적해 확인하여 통신 신뢰성을 보장하는 것은 한 단게 상위인 프로토콜 계층에서 수행하도록
구성되어 있다.

전송 계층

전송 계층은 네트워크 계층에서 제공하지 않는 신뢰성을 보장한다. 여기서 신뢰성이란
기본적인 전달 서비스에 대한 신뢰성으로, 특정 애플리케이션이나 서비스에 대한
것이 아니다.

전송 계층은 네트워크 계층이 효율적으로 동작하는지 확인해야 할 책임이 있으며, 효율적이지
못한 경우에는 재존송을 요구하거나 상위 계층에 오류를 통보한다.

상위 레벨 서비스가 전송 계층을 이용해야 하므로, 네트워크 소프트웨어의 설계에서
이 계층이 포함되어 있으면 전달 서비스를 보장할 수 있다.

그러나 모든 시스템에서 전송 계층의 신뢰성을 보장하는 것은 아니다.
브로드캐스트 메시지처럼 필수적이지 않은 서비스에 대해서는 신뢰성을
보장하지 않는 전송 계층을 이용하는 네트워크도 많다.

세션 계층

세션 계층은 시스템, 애플리케이션, 사용자간의 연결을 설정하는 역할을 한다.
세션 계층은 이런 요구를 상위 계층으로부터 전달받아 , 하위 계층을 이용하여
연결을 협상(negotiate)한다.

일단 연결이 설정되면 세션 계층은 상위 계층들이 서로 통신할 수 있는 네트워크 인터페이스를
제공한다. 상위 계층에서 통신이 끝나면 연결을 종료시키는 것도 세션 계층의 임무다.

표현 계층

표현 계층은 애플리케이션과 서비스가 세션 계층을 통해 연결을 설정할 때 일관성 있는
인터페이스를 제공한다.

이런 인터페이스를 세션 계층에 놓을 수는 있지만, 이것은 세션 계층에 불필요한 부담만
가중시키는 결과를 초래한다. 오히려 세션 계층은 데이터의 유효성을 확인하거나

다른 확장 서비스를 고려할 필요 없이 세션만을 관리하는 것이 다 효율적이다.

표현 계층에서 제공하는 서비스의 예로 애플리케이션의 성능을 향상시키는 압축을
들 수 있다. 이런 기능은 항상 필요한 것이 아니므로 전송 계층에서 구현하거나
애플리케이션에서 개별적으로 개발하는 것보다 표현 계층에서 구현하는 것이

효율적이다.

응용 계층

마지막으로 응용 계층은 HTTP와 POP3 같은 사용자의 응용 프로토콜에 네트워크
인터페이스를 제공한다.

이 계층을 사용자에게 데이터를 표시하는 사용자 애플리케이션과 혼동해서는 안 된다.
사용자 애플리케이션은 완전히 다른 서비스이며, OSI 참조 모델의 범위를 벗어난다.

모든 네트워크는 어떤 형태로든 OSI 참조 모델의 7개 계층을 사용해야 하지만, 모든
네트워크 설계가 7개 계층 모두와 정확히 일치하는 프로토콜과 서비스를 제공하는
것은 아니다.

TCP/IP도 OSI 참조 모델의 모든 계층과 일치하지 않는 네트워크 설계 가운데 하나이다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.