카테고리 없음

[펌] TCP/IP 구조

achivenKakao 2005. 4. 13. 20:36
TCP/IP 구조


  TCP/IP 프로토콜의 강력함은 여러 회사에서 나온 광범위한 이종의 장치들이 상호 연동 하도록 할수 있는 능력에서 부분적으로 기인한 것이다. 그러나 많은 장치들을 지원하는 반면, 근본적인 호환성 문제가 대두될 수 있다. 여러 가지 다른 장치들이 연결되기 위해서는 그런 장치들의 소프트웨어와 하드웨어가 호환적이거나, 아니면 복잡한 인터페이스를 통해서 의미 있는 통신이 일어나게 해야 한다. 이런 호환성을 쉽게 하기 위해, 여러 가지 장치를 사용해서 복잡한 네트워크가 구성될 수 있게 하는 네트워크 구조가 개발되어 있다. TCP/IP 프로토콜들로 그와 같은 네트워크 구조가 이루어져 있다.
  현대의 컴퓨터 네트워크에서, 데이터 전송 기능은 한 네트워크를 구성하는 여러 가지 장치 안에 있는 복잡한 소프트웨어와 하드웨어들에 의해 수행된다. 이러한 복잡함을 처리하기 위해, 네트워크 장치에서 수행되는 소프트웨어 기능들이 독립적인 기능 계층들로 나누어져 있다. Figure 3.1에 도시한 바와 같이 4개의 소프트웨어 계층을 갖는 계층적 구조는 TCP/IP 프로토콜들로 구성되어 있다. 4 개의 TCP/IP 소프트웨어 계층은 그 계층 아래에서 동작하는 기반 네트워크 하드웨어 위에 구현된다. TCP/IP 기능 계층들 각각의 기능은 이 장의 뒤에서 기술한다.
  TCP/IP 통신 소프트웨어는 계층별로 나누어져 있어서, 응용 프로그램과 최종 사용자들을 지원하는 최상위 계층에서는 네트워크 통신에 관한 자세한 사항을 다루는 그 하위 계층들에 관한 것들을 알 수 없다. 인터넷의 한 호스트에서 실행되는 응용 프로그램이 다른 호스트에서 실행되는 응용 프로그램과 두 호스트가 바로 연결된 것처럼 용이하게 통신할 수 있는 것은 TCP/IP에 의한 것이다. 통신 프로그램을 실행하는 두 호스트간에 많은 라우터와 물리적인 네트워크들로 구성된 복잡한 인터넷이 있더라도 통신은 매우 간단한 것처럼 보인다. 통신하는 두 호스트는 통신 기능을 수행하기 위해, TCP/IP 구조의 4계층을 구현하는 소프트웨어를 각각 수행한다.

 Figure 3.1 TCP/IP 구조 계층




응용

전달

인터넷

네트워크 인터페이스
하드웨어

 
3.1 네트워크 구조

  네트워크 구조는 컴퓨터 네트워크를 구성하는 데 사용되는 하드웨어와 소프트웨어의 설계 및 동작에 관한 전반적인 계획과 규칙들의 집합이다. 네트워크 구조는 통신 방법에 관한 통신 프로토콜들의 집합을 정의한다.
  컴퓨터 네트워크에 시스템은 일반적으로 TCP/IP와 같은 특정한 네트워크 구조에 맞게 되어 있으며, 일련의 특별한 네트워크 구조에 맞게 되어 있으며, 일련의 특별한 통신 프로토콜들을 사용한다. 많은 이종의 네트워크 구조와 통신 프로토콜 시스템이 현재의 컴퓨터 네트워크에서 사용되고 있다.
  다음은 컴퓨터 네트워크 구성에 가장 자주 사용되는 컴퓨터 네트워킹 방안들이다.

  • XNS(Xerox Networking System)
  • Novell NetWare
  • DECnet Phase IV
  • DECnet/OSI
  • AppleTalk
  • NetBIOS
  • SNA(System Network Architecture) Subarea Networking
  • SNA APPN(Advanced Peer-to-Peer Networking)
3.2 통신 프로토콜

  네트워크 구조는 서로 다른 시스템의 각 계층에서 동작하는 통신 프로토콜(communication protocol)을 정의 하고 있다. 통신 프로토콜은 다른 기계의 같은 계층같에 교환되는 데이터 유니트의 형식을 정의하고, 데이터 유니트가 교환되는 방법에 대해서도 문서화하고 있다.   TCP/IP와 같은 계층 구조에서는 특정 계층에서 수행되는 프로토콜의 사용자는 일반적으로 그 바로 위 계층에서 수행되는 프로세스가 된다. 예를 들면, TCP/IP 인터넷 계층에서 실행되는 프로토콜의 사용자는 대개 전달 계층에서 실행되는 프로세스이며, 전달 계층에서 실행되는 프로토콜의 사용자는 대개 응용 계층에서 실행되는 프로세스이다. 응용계층에서 실행되는 프로토콜의 사용자는 대개 통신을 위해 인터넷을 사용하는 응용 프로그램이나 사람이 된다. 인터넷 계층과 전달 계층에서 동작하는 중요한 프로토콜은 기본적인 데이터 전달 서비스를 제공한다. 데이터 전달 서비스를 제공하는 통신 프로토콜은 그 프로토콜의 사용자에게 연결형 서비스 혹은 비 연결형 서비스를 제공한다.

연결형 프로토콜
  연결형 프로토콜(connection-oriented protocol)을 구현하는 프로세스는 전화회사에서 제공하는 서비스와 유사한 서비스를 제공한다. 이 프로토콜은 세 단계로 구성된다.
  • 연결 설정(전화 걸기) : connection establishment
  • 데이터 전달(연결을 통해 통화) : data transfer
  • 연결 해제(전화 끊기) : connection release
  통신이 이루어지기 전에 3자간의 합의가 있어야 한다. 3자란 통신하려는 두 상대와 데이터 전달 서비스 자체를 말한다. 핸드쉐이크(handshake)라고 하는 절차를 구현하는 메시지의 교환이 각 호스트에서 프로토콜을 수행하는 프로세스들간에 발생해야, 그들간에 연결(connection)이라고 하는 연관 관계(association)가 설정된다.
  연결형 프로토콜에 있어서 데이터 전달은 항상 통신하는 두 상대가 관련된다, 한 프로세스가 둘 이상의 다른 상대방에게 메시지를 전달하려면 각각에 대해 별도의 연결을 설정해서, 별도의 동작으로 각 상대방에게 메시지를 전달하여야 한다. 연결형 프로토콜에서 연결이 설정될 때에서는 수신측만이 확실하게 식별될 필요가 있다. 데이터를 전달할 때에 충분한 정보가 요구되는 것은 다만, 그 데이터가 관련된 연결을 식별할 때 뿐이다.
  연결형 프로토콜은 신뢰성 있고, 순차적인 데이터 전달 서비스를 제공하는 것으로 종종 인식 된다. 연결이 설정되어 있는 동안에 송신자는 각 메시지가 성공적으로 수신되었고, 메시지가 순서대로 수신된 것으로 가정할 수 있다. 무언가 잘못되면 연결은 해제되고, 관련된 두 상대에 연결 해제 사실이 통보된다. 연결은 통신하는 당사자나 프로토콜에 의해 언제든지 해제될 수 있다. 이것은 연결형 프로토콜의 고유한 특성으로서, 관련된 3자가 언제든지 독립적으로 동작에 오류가 있다는 사실에 기인한다.

비연결형 프로토콜
  비연결형 프로토콜(connectionless protocol)은 마치 우편 시스템처럼 동작한다. 비연결형 프로토콜을 실행하는 프로세스는 전송을 위한 메시지를 받을 때마다 최선을 다해서 그 메시지를 배달하려고 한다. 이는 우체국에서 주소가 적힌 편지를 받아서 해당하는 수신자에게 배달하려고 하는 것과 같다. 비연결형 프로토콜에 있어서 통신은 한 단계로 일어나며, 수신측과 송신측 간에 논리적인 연결을 설정한 필요가 없다. 사용자 프로세스는 프로토콜을 실행하는 프로세스에게 메시지를 넘기고, 메시지가 수신될 목적지 프로세스를 식별한다. 그런 다음, 프로토콜을 실행하는 프로세스는 그 메시지를 해당 목적지에 전달하려고 시도한다. 각 메시지는 원하는 수신자를 정확히 지정해야 하며, 그 메시지는 그 이외의 다른 메시지와는 독립적으로 취급한다.
  비연결형 프로토콜은 특히, 적은 양의 데이터를 전송해야 할 때는 연결형 프로토콜에 비해 프로토콜상의 오버헤드를 적게 초래한다. 적은 양의 데이터를 보내는데 걸리는 지연시간도 비연결형 프로토콜의 경우에 더 작은 것이 보통인데, 그 이유는 메시지 전송 전의 연결 설정에 시간이 걸리지 않기 때문이다. 비연결형 프로토콜은 한번의 요구로 여러 목적지에 메시지를 받았다는 응답을 보내지도 않는다. 또한 오류 복구 절차가 제공되지도 않는다. 필요한 오류 복구 서비스들은 상위 단계 프로토콜이나 통신 프로그램에 의해 제공되어야 한다.
  비연결형 프로토콜은 대개 최선 노력(best effort) 전달 서비스, 또는 흔히 데이터그램 (datagram) 서비스라고 하는 서비스를 제공한다. 송신측은 보내는 메시지가 실제로 원하는 수신측에 의해 수신될지 확실히 알수 없다. 비연결형 프로토콜은 신뢰성 있는 서비스를 제공하지 않는다.

비연결형 프로토콜과 연결형 프로토콜
  비연결형 프로토콜과 연결형 프로토콜간의 차이를 말할 때 신뢰성이라는 용어를 사용하는 것은 적절하지 않다는 것을 지적해둘 필요가 있다. 신뢰성있다는 말 때문에 연결형 프로토콜이 어떤 식으로든 비연결형 프로토콜보다 좋다고 생각하게 되기 십상이다. 그러나, 요지는 비연결형 프로토콜은 어떤 목적들에 좋고, 연결형 프로토콜은 다른 목적들에 더 적합하다는 것을 말하려는 것이다.
  예를 들어, 연결형 프로토콜은 신뢰성 있는 서비스를 제공하지만, 자주 오류가 발생하여 연결이 끊어져서 데이터 전송을 위해 매번 새로운 연결을 설정해야 하는 경우에는 매우 형편없는 서비스를 제공하게 될 수도 있다. 반면에, 비연결형 프로토콜은 백만 개의 메시지 중에서 999,999개의 메시지를 전달하는 매우 좋은 서비스를 제공할 수도 있다. 물론 상황에 따라서는 그 정도로 완전히 신뢰성이 있다고 할 수는 없다.
  비연결형 프로토콜은 종종 메시지가 100% 전달될 필요가 없는 응용에 적합하다. 비연결형 프로토콜은 또한 하위 계층에서 신뢰성이 중요한 경우에도 종종 적합한 경우가 있다. 그런 경우에 필요한 신뢰성 제어 매카니즘은 신뢰도가 낮은 비연결형 프로토콜이 동작하는 계층의 바로 위 계층에서 동작하는 프로세스에 의해 제공된다. 전송 오류는 상위 계층 프로세스에 의해 검출되고, 오류로 전송되지 못한 메시지들에 대해서만 재전송을 요구하여 오류를 정정하게 된다.

TCP/IP에서 비연결형 프로토콜과 연결형 프로토콜
  TCP/IP 프로토콜 모음(TCP/IP protocol suite)은 인터넷 계층에서 동작하는 비연결형 프로토콜인 인터넷 프로토콜(IP : Internet Protocol)을 기반으로 한다. 인터넷 프로토콜이 제공하는 서비스는 비연결형 전달 계층 프로토콜인 UDP(User Datagram Protocol) 또는 연결형 전달 계층 프로토콜인 TCP(Transmission Control Protocol)에 의해 사용된다. UDP와 TCP중 어느 것을 사용할지는 응용 프로그램이 신뢰성 제어를 제공하는 전달 계층 프로토콜을 필요로 하느냐의 여부에 달려 있다. IP와 UDP 및 TCP는 이 장에서 좀 더 기술하고, 다른 장에서 보다 자세히 기술한다.

3.3 OSI 참조 모델

  TCP/IP 프로토콜이 개발되고 있던 중에 국제표준기구(ISO : International Organization for Standardization)에서 컴퓨터 네트워크에 사용될 수 있는 통신 프로토콜의 국제 표준을 개발하기 야심찬 프로젝트가 진행 중이었다.
  1984년에 ISO는 OSI 참조 모델(Reference Model for Open Systems Interconnection) 또는 OSI 모델이라고 하는 개괄적인 컴퓨터 통신 모델을 정의하였다. OSI 모델이 최종적으로 국제 표준으로 채용되기까지는 OSI 모델과 완전히 부합하지는 않지만 TCP/IP 프로토콜이 컴퓨터 네트워킹 방법으로 자주 사용되었다.

OSI 모델의 목적
  OSI 모델은 개방 시스템들의 연결을 목적으로 하는 표준화된 개발 작업의 조정에 필요한 공통적인 근간을 제공하기 위해 설계되었다. 여기에서 개방(open)이란 용어는 표준안을 사용합으로써 한 시스템이 다른 시스템에 개방되어 있다는 의미이다.
  OSI 모델은 기계들이 서로 표준적이고 매우 융통성 있게 통신할 수 있는 방법을 기술하고 있으며, 거기에는 통신하는 각 기계에 포함되어야 하는 기능 계층이 정의되어 있다. OSI 모델은 네트워킹 소프트웨어 자체는 정의하지 않으며, 그 소프트웨어에 관한 상세한 표준도 정의하지 않는다. 다만, 각 계층이 수행해야 하는 기능들의 넓은 범주들만을 정의한다.

OSI 네트워크 구조
  또한, ISO에서는 OSI 모델의 여러 계층을 위한 포괄적인 표준들을 개발하였다. 이들 표준은 OSI 네트워크 구조(OSI network architecture)를 구성한다. TCP/IP 프로토콜은 OSI 구조를 구성하는 여러 가지 표준의 개발에 영향을 주었다.
  OSI 네트워크 구조를 구성하는 표준들은 오늘날 컴퓨터 네트워크를 위한 상품의 개발에 그리 튼 영향을 주지는 못하고 있다. 하지만 OSI 모델은 아직도 중요하다. OSI 모델과 관련 있는 개념과 용어는 네트워크 구조의 논의와 서술시의 기본 개념으로서 널리 받아들여지고 있다. OSI 모델은 현재 널리 사용되고 있는 다양한 통신 프로토콜을 분류하거나 하나의 네트워크 구조를 다른 네트워크 구조와 비교하는 데도 사용되는데, TCP/IP의 프로토콜은 계층 구조를 논의하는 과정에서 OSI 모델과 자주 비교된다. 이제 TCP/IP 기능 구조를 살펴보기 전에 OSI 모델의 7가지 계층을 소개한다.

OSI 모델 기능 계층
  OSI 모델은 7개의 기능 계층을 정의한다. 각 계층은 서로 다른 기능의 집합을 정의하는데, 그 의도는 각 계층이 다른 모든 계층에 최대한 독립적이 되도록 하는 것이다.
  상위 3계층과 하위 4계층간에는 근본적으로 다른 차이점이 있다. 상위의 3계층은 응용 프로그램 자신이 지향하는 서비스와 관련이 있다. 하위 4계층은 네트워크와 더욱 밀접하며, 어떤 프로그램도 이용할 수 있는 일반적인 데이터 전달 서비스를 제공한다.
  OSI 모델의 7가지 기능 계층을 Figure 3.2에 기술하였다.

Figure 3.2 OSI 모델 기능 계층


용용

표현

세션

전달

네트워크

데이터 링크

물리
  • 응용 계층(Application Layer) : 최상위 계층으로, 사용자 프로세스들이 접속되는 계층이다. 응용 계층은 응용 프로그램이 정보 교환을 위해 시스템의 연결 기능에 액세스할 수 있는 수단을 제공한다. 응용 계층에 의해 제공되는 통신 서비스들은 통신 프로그램 하부 계층의 복잡함이 드러나지 않게 한다. 응용 계층에서는 한 컴퓨터에서 실행되는 프로그램은 메시지를 보내고 다른 컴퓨터상에서 실행되는 프로그램은 데이터를 받는다. 응용 계층은 근원지 컴퓨터로 메시지가 전달되는 자세한 사항에는 관여하지 않는다.
  • 표현 계층(Presentation Layer) : 표현 계층은 통신 프로그램 사이에 교환되는 비트 스트림의 의미에 관련된 최하위 계층이다. 이 계층은 네트워크를 통해 전송되는 데이터의 정보내용을 보존하는 데 관여한다. OSI 모델에서는 표현 계층을 위한 두 가지 중요한 기능을 정의한다. 첫째로, 두 통신 시스템내의 표현 계층은 두 통신 프로그램에 의해 교환되는 메시지를 전달하기 위한 공통의 전송 구문을 협상해야 한다. 둘째로, 표현 계층은 다른 시스템이 어떤 형태로 데이터를 표현하는지에 대해 신경 쓸 필요가 없도록 해준다. 만약, 두 시스템이 BASIC 프로그램을 실행하는 퍼스널 컴퓨터라면 내부의 데이터 표현이 동일하기 때문에 표현 계층에서는 할 일이 별로 없다. 그렇지만 FORTRAN 프로그램을 실행하는 VAX 마이크로 컴퓨터가 COBOL 프로그램을 실행하는 IBM 메인 프레임과 연동되고 있다면, 표현 계층이 보다 중요해진다. FORTRAN 프로그램은 32비트 이진수로 정수를 표현하고, COBOL 프로그램은 팩형 십진수(packed-decimal)로 정수를 표현하므로, 표현 계층에서는 상대방이 이용하는 데이터 형식에 신경 쓰지 않고, 프로그램이 그들 자신만의 데이터 형식으로 작업할 수 있도록 적절한 변환을 수행한다.
  • 세션 계층(Session Layer) : 세션 계층은 두 통신 프로그램간의 다이얼로그(dialog)를 설정하고 그들간의 데이터 교환을 관리하는 역할을 한다. 이를 위해 세션 계층은 두 통신 프로그램간의 대화에 일정한 구조를 설정한다. 세션 계층은 세 가지 형태의 다이얼로그를 정의한다. 양방향 동시 대화(two-way simultaneous interaction)에서는 두 프로그램이 송신과 수신을 동시에 수행한다. 반이중 대화(two-way alternate interaction)에서는 프로그램이 송신과 수신을 번갈아 수행한다. 그리고 단방향 대화(one-way interaction)에서는 한 프로그램이 전송을 수행중일 때 다른 쪽에서는 수신만을 수행한다. 다이얼로그의 설정 이외에도 세션 계층 서비스는 다이얼로그 사이가 동기점(synchronization point)을 포함시켜, 다이얼로그가 인터럽트되는 것을 허용하고, 후에 동기점에서 다시 시작할 수 있게 한다.
  • 전달 계층(Transport Layer) : OSI 모델은 네트워크의 각 시스템을 두 가지 유형 중의 하나로 구분한다. 데이터의 근원 또는 목적지 역할을 하는 종단 시스템(end system)과, 경로배정 기능이나 중계 기능을 수행하는 중간 시스템(intermediate system)이다. 전달 계층은 통신하는 주 종단 시스템에서만 요구되는 최하위 계층이다. 오직 경로배정과 중계 기능만을 수행하는, 두 종단 시스템 사이에 있는 중간 시스템은 하위 3 계층만을 수행한다. 전달 계층은 신뢰성 있는 단대단(end-to-end) 데이터 전달 서비스를 제공하는 최상위 계층에 해당한다. 전달 계층은 컴퓨터간에 이동하는 비트 스트림의 실질적인 이동과 관련한 세부적인 사항을 상위 계층에 보이지 않게 한다. 전달 계층에서 수행되는 기능은 메시지 상실, 순서 뒤바뀜, 메시지 중복 등의 복구에 이용되는 단대단 무결성 제어(integrity control)를 포함한다.
  • 네트워크 계층(Network Layer) : 네트워크 계층은 경로배정과 네트워크를 통해서 한 시스템에서 다른 시스템으로 가는 데이터를 중계하는 데에 관여한다. 네트워크 계층은 패킷(packet)이라고 하는 데이터 유티트의 이동을 위해 상위 계층이 필요로 하는 서비스를 제공한다. 패킷은 한 종단 시스템에서 다른 종단 시스템으로 이동하며, 임의개의 데이터 링크와 임의개의 중간 시스템을 거쳐 전달된다. 통신을 원하는 두 종단 시스템에서 실행되는 응용 프로그램은 패킷이 전달되는 경로에는 신경을 쓸 필요가 없다. 종단 시스템과 중간 시스템 사이에서 동작하는 네트워크 계층의 긴능은 모두 이러한 경로배정과 중계 기능을 다룬다.
  • 데이터 링크 계층(Data Link Layer) : 데이터 링크 계층은 단일 링크 내에 있는 시스템간의 데이터 전송을 책임진다. 데이터 링크 계층 내의 제어 매카니즘은 프레임(frame)이라고 하는 데이터 유니트의 전송을 취급한다. 데이터 링크 계층이 기능은 때로는 오류가 있는 물리 회선을 통해, 상대적으로 오류가 없는 방식으로 데이터를 전송할 수 있게 한다. 이 계층은 비트들을 프레임으로 형성하는 방법과 전송 오류를 검출할 수 있는 오류 검출 매카니즘의 구현에 관여한다. 몇 가지 유형의 데이터 링크에 있어서, 데이터 링크 계층은 흐름 제어(flow control), 프레임 순서화(frame sequencing), 전송 오류 복구 등을 수행한다.
  • 물리 계층(Physical Layer) : 물리 계층은 통신기기 사이의 전기 신호, 광신호느 무선 신호 등과 같은 신호를 실제적으로 전송하는 역할을 맡는다. 각 통신기기의 물리 계층 매카니즘은 대개 비트 0이나 비트 1로 인식되는 신호의 생성과 검출을 제어하는 것이 얼마나 많은 비트로 구성되어 있는지, 전송되고 있는 데이터에 의미가 있는지에는 관여하지 않는다. 물리 계층에 있어서 송신측은 단순히 신호를 송신하고, 수신측은 단순히 이를 검출할 때름이다.
 
3.4 TCP/IP 기능 계층

  Figuer 3.4는 TCP/IP 구조의 기능 계층(functional layer)이 OSI 모델의 계층과 어떻게 비교될 수 있는지를 보여주고 있다. TCP/IP는 OSI 모델처럼 응용 중심의 기능을 3개의 계층으로 보여주고 있다. TCP/IP의 응용 계층은 OSI의 응용, 표현, 세션 계층과 거의 유사하다. TCP/IP의 전달 계층은 OSI의 전달 계층과 같고, TCP/IP의 인터넷 계층은 OSI 모델의 네트워크 계층과 같다. TCP/IP의 최하위 계층인 네트워크 인터페이스 계층은 OSI 모델의 데이터 링크 계층과 거의 유사하다. OSI 모델의 물리 계층에 해당하는 데이터 링크의 구현에 이용되는 물리적 장비는 TCP/IP 구조의 범위 밖에 있다. 어떠한 형태의 물리적 통신 회선이라도 그것을 위한 네트워크 인터페이스 계층 기능이 구현될 수 있으며 TCP/IP 인터넷에서 사용될 수 있다.
  다음 절에서 TCP/IP 구조를 구성하는 각 계층의 기능을 설명하고 각 계층에서 구동되는 주요 프로토콜을 소개한다.
Figure 3.4 TCP/IP와 OSI의 구조적 계층 비교
 
 
Figure 3.5 TCP/IP 구송요소와 주요 프로토콜
 

응용 계층 프로토콜과 서비스
  Figure 3.6에 가장 일반적으로 사용되고 있는 TCP/IP 응용 계층 프로토콜과 서비스를 도시하였으며, Figure 3.7는 이들에 대한 간략한 설명이다. 이들 프로토콜은 제 5장에서 기술한다.

Figure 3.6 대표적인 응용 계층 프로토콜과 서비스
 
 
Figure 3.7 대표적인 응용 계층 프로토콜과 서비스

최종 사용자 서비스

  • Ping 연결성 시험 : Ping은 Packet InterNet Groper의 약자로, 인터넷에서 두 호스트 사이의 연결을 확인하는 데 사용된다. Ping은 이 기능을 수행하는데 ICMP(Internet Control Message Protocol)라고 하는 인터넷 계층 프로토콜을 이용한다. ICMP는 이 장의 뒷부분에 소개하고, 제12장에서 자세히 다룬다. Ping을 이용할 때, 사용자는 보통 ICMP 반향 요청(Echo Request) 메시지를 다른 호스트에 전송하는 ping이라는 프로그램을 수행한다. 호스트가 ICMP 반향 요청 메시지를 수신하면 원래의 송신자에게 반향 응답(Echo Reply) 메시지를 반환한다. 반향 응답 메시지를 받을 때 마다 Ping은 처음에 보낸 반향 요청 메시지를 전송한 이후 경과 시간을 계산한다. 이는 Ping 사용자에게 특정 호스트와 데이터 교환에 걸리는 실제적인 왕복 시간을 제공한다.
  • Telnet 원격 로그인 : Telnet은 인터넷에서 사용자가 임의의 다른 호스트에 로그인할 수 있도록 해준다. Telnet 프로토콜은 로컬 telnet 소프트웨어(클라이언트)와 원격 telnet 소프트웨어(서버)사이에 클라이언트-서버 관계를 설정한다. Telnet은 클라이언트 역할을 하는 호스트와 서버 역할을 하는 호스트 사이에 필요한 데이터 전송을 취급한다. 이런 데이터 전송이 이루어 질 경우, 사용자는 실제 로컬 호스트와 통신을 위해 사용자 인터페이스 장치를 사용하고 있지만, 사용자에게는 자신의 원격 호스트에 직접 로그인 한 것처럼 보이게 된다.
  • Rlogin 원격 로그인 : Rlogin 서비스는 Telnet과 관련된 서비스이지만 UNIX 계열 운영체제에서만 제공된다. Telnet은 임의의 TCP/IP 호스트가 또 다른 TCP/IP에 로그인 할 수 있도록 해준다. 로컬 호스트와 원격 호스트는 완전히 다른 운영체제를 사용하고 있을 수도 있다. Rlogin 서비스는 보통은 로컬 UNIX 호스트의 사용자가 원격 UNIX 호스트에 로그인하기를 원할 때 사용된다. Rlogin은 Telnet에 비해 다소 사용하기 편하고 몇가지 부가적인 서비스를 UNIX 사용자에게 제공한다.
  • Rsh 원격 실행 : Rsh 원격 실행 서비스는 로컬 호스트에 있는 사용자가가 인터넷의 다른 호스트에 있는 운영체제 기능을 호출하거나 응용 프로그램을 실행할 수 있도록 지원한다. Rsh 서비스를 이용할 때, 사용자는 로컬 호스트에서 명령어를 입력한다. 이때 명령어는 전송되어 원격 호스트 상에서 실행된다. 명령어나 응용 프로그램의 실행 결과는 로컬 호스트의 사용자에게 반환된다. Rexec라고 불리는 Rsh와 유사한 서비스를 또한 TCP/IP 호스트 상에서 이용 가능하다.
  • FTP 파일 전달 : FTP(File Transfer Protocol)는 사용자 위주의 파일 전달 서비스를 구현한다. FTP는 사용자가 로컬 호스트와 원격 호스트간에 양방향으로 데이터를 전송할 수 있도록 해준다. FTP는 또한 이진 형태의 데이터나 ASCII 형태의 데이터를 포함하는 파일을 전송할 수도록 해준다. 어떤 버젼의 FTP는 EBDIC 형태의 데이터를 포함하는 파일을 전송할 수도 있다. 파일은 한번에 하나씩 전송될 수 있거나 혹은 단일 요청으로 여러 개의 파일을 전송할 수도 있다. 또한, FTP에서는 원격 디렉토리의 내용을 수신한다거나, 원격 작업 디렉토리를 변경하거나, 원격 디렉토리를 생성하거나 삭제할 수 있다. FTP는 보통 TCP와 같은 연결형 전달 계층 프로토콜을 이용한다.
  • NFS 원격 파일 액세스 : NFS(Network File System)는 인가된 사용자에게 원격 호스트에 있는 파일에 대한 액세스를 허용하는 것과 같은 고수준의 서비스를 구현한다. 시스템 관리자는 인터넷 상에서 NFS 파일 서버의 역할을 하는 하나 이상의 호스트를 지정할 수 있다. 그런 호스트들은 자신의 디스크에 지정된 디렉토리를 다른 호스트들이 액세스 할 수 있게 하는 NFS 서버 소프트웨어를 실행한다. 사용자는 NFS 마운트 디렉토리를 자신의 로컬 호스트의 디렉토리에 액세스하는 것과 같은 방법으로 액세스할 수 있다. 디렉토리가 원격 호스트상의 NFS 마운트 디렉토리라른 사실은 대개 로컬 호스트의 사용자에게는 투명하다.

자원 서비스
  • TFPT 파일 전달 : TFTP(Trivial File Transfer Protocol)는 로컬 호스트와 원격 호스트간에 양방향으로 데이터를 전송하는 기능을 제공하는 단순한 파일 전달 프로토콜이다. TFTP는 최종 사용자에 의해 바로 이용되지 않고 시스템 소프트웨어가 프로그램 코드를 다운로드하는 경우 등에 일반적으로 사용된다. TFTP는 고유의 신뢰성 제어 기능을 가지고 있으며, 전달 서비스의 최상위 계층에서 이용된다. 대부분의 TFTP 구현은 비연결형 UDP 전달 계층 프로토콜을 이용한다.
  • DNS 이름 변환 : TCP/IP 인터넷에 연결된 각 호스트들은 자신에게 할당된 최소한 하나 이상의 32비트 인터넷 주소를 가지고 있다(제4장 참조). 또한, 각 호스트가 인터넷 주소를 알지 못하더라도 쉽게 다흔 호스트를 참조할 수 있게 해주는 유일한 이름을 가지고 있다. 기본적인 TCP/IP 프로토콜은 모두 이 인터넷 주소를 사용하여 개별적인 호스트를 참조하는 데, 각 호스트들은 호스트 이름과 인터넷 주소를 서로 변환해 주는 이름 변환 기능을 구현해야만 한다. 소규모의 TCP/IP 인터넷에서는, 호스트 이름과 인터넷 주소 사이의 변환은 보통 hosts라는 자신의 환경 설정 파일에 의해 호스트 자신이 수행할 수 있다. 대규모의 네트워크에서는 이름-주소간의 관계를 각 호스트의 로컬 hosts 파일에 유지하는 것은 실제적으로 어렵다. DNS(Domain Name System)는 호스트 이름과 주소간의 관계를 모든 호스트에 유지하지 않고, 제한된 몇몇 장소에만 유지하는 디렉토리 서비스의 일종이다.
  • SMTP 전자우편 : 단순 전자우편 전달 프로토콜(SMTP : Simple Mail Transfer Protocol)은 전자우편 메시지의 전달에 이용할 수 있는 프로토콜이다. SMTP는 사용자에게 우편 기능을 제공하는 전자우편 소프트웨어가 사용될 수 있게 설계되어있으며, 최종 사용자가 바로 이용할 수 있도록 설계되지는 않았다. Mail 기능은 사용자가 메시지나 파일을 로컬 네트워크의 사용자나, 인터넷 상의 다른 네트워크의 사용자, TCP/IP 네트워크에 연결된 비-TCP/IP 네트워크의 사용자에게 전송하게 하는 기능을 제공한다. 여러가지 형태의 전자우편 시스템이 TCP/IP 환경에서 구현되었는데, 이들 중의 일부는 IBM 환경의 PROFS와 DISOSS, MCI Mail이나 CompuServe와 같은 공중 전자우편 메일 서비스 등 다른 네트워크의 전자 메시징 시스템과도 연결이 가능하다.
  • X 윈도우 시스템 표현 : X 윈도우 시스템은 그래픽 디스플레이 상에 윈도우 시스템을 구현하는 분산형 그래픽 표현 서비스(distributed graphic presentation service)들의 집합이다. 이 시스템은 응용 프로그램(클라이언트)과 그래픽 디스플레이 상의 윈도우를 제어하는 워크스테이션이나 터미널내의 윈도우 소프트웨어(서버) 사이에 클라이언트-서버 관계를 구현한다. 클라이언트와 서버는 다른 컴퓨팅 환경에서도 동작하며, 물론 같은 컴퓨팅 환경에서도 동작한다. X 윈도우 시스템은 그래픽 워크스테이션의 사용자가 한 스크린에 다중의 윈도우를 열 수 있게 해주며, 각 윈도우는 별도의 클라이언트 응용 프로그램에 의해 제어될 수도 있다. X 윈도우 시스템은 클라이언트 응용 프로그램과 서버 윈도우 소프트웨어 사이에 정보를 전송하는데 사용되는 프로토콜을 정의한다.
  • Kerberos 보안 : Kerberos는 분산 컴퓨팅 환경에서 크라이언트 요소와 서버 요소 사이의 상호 인증(authentication)을 제공하는 암호화 기반의 정보 보호 시스템이다. kerberos 시스템에서 각 클라이언트 요소와 서버의 요소는 주역(principal)이라고 하는 자신에게 할당된 유일한 주역 식별자(principal identifier)를 가지고 있다. 이들 주역 식별자들은 클라이어트와 서버가 자신을 식별하게 함으로써 이들이 서로 정보를 속임수로 교환하는 것을 막는다. 특정 서버에 접근하려는 클라이언트에 대한 인가(authorization)는 인증 서비스와는 독립적으로 구현 가능하다.
  • RPC 원격 프로시져 호출 : 원격 프로시져 호출(RPC : Remote Procedure Call) 매카니즘은 로컬 호스트에서 실행되는 프로시져가 원격 호스트에서 실행되는 프로시져를 호출할 수 있도록 해준다. 프로시져의 인자와 결과값은 투명하게 인터넷을 통해 전송된다.
  • NTP 분산 시간 : 네트워크 타임 프로토콜(NTP : Network Time Protocol)은 네트워크로 연결된 컴퓨팅 시스템들이 공통적으로 정확한 날짜와 시간을 유지할 수 있도록 하는 해주는 알고리즘을 구현한다.
  • SNMP 네트워크 관리 : 네트워크 관리 서비스는 TCP/IP에서는 단순 네트워크 관리 프로토콜(SNMP : Simple Network Management Protocol)을 구현하는 소프트웨어를 통해 제공된다. SNMP는 MIB(Management Information Base)를 정의하는 데, 이는 인터넷에서 관리되는 모든 객체를 정의하는 데이터베이스이다. SNMP는 또한 네트워크 관리 메시지들의 형식과 메시지를 교환하는 규칙을 정의한다. 네트워크 관리 메시지는 네트워크 관리 기능을 수행하기 위한 요청을 하거나 네트워크 상에서 발생한 이벤트에 관한 통보를 위해 이용된다.
 
3.6 전달 계층

  TCP/IP 통신 소프트웨어가 수행되는 대부분의 컴퓨팅 시스템은 일반적으로 많은 응용 프로세스들이 동시에 수행되도록 한다. 그러므로, 주어진 호스트 상에서 활성 상태의 많은 응용 프로세스들이 존재할 수 있으며, 이들이 동시에 TCP/IP 통신 서비스를 이용하기를 원할 수도 있다. 전달 계층의 기능은 TCP/IP 호스트에서 수행되는 응용 프로세스 사용자에게 단대 단 데이터 전달 서비스를 제공하는 것이다.

전달 계층 프로토콜
  전달 계층에서는 2가지 주요 프로토콜이 동작하며, Figure 3.8에 이들에 대하여 간략하게 기술하였다. 응용 프로세스는 데이터 전달 서비스를 요청하기 위해 UDP나 TCP를 이용할 수 있다. 사용되는 프로토콜은 응용이 최선 노력(best effort) 데이터그램 데이터 전달 서비스를 요구하는가 혹은 연결형 데이터 전달 서비스에 의한 신뢰성 제어 기능을 요구하는가에 달려 있다.
 
Figure 3.8 전달 계층 프로토콜

  • UDP : 사용자 데이터그램 프로토콜(User Datagram Protocol)은 가장 간단한 전송 프로토콜이다. IP 데이터그램 전달 서비스에 약간의 기능만 추가된, 최선노력 비연결형 전달 계층 프로토콜이다.
  • TCP : 전송 제어 프로토콜(Transmission Control Protocol)은 신뢰성있고, 순서적인 데이터 전달 서비스를 제공하는 연결형 전달 계층 프로토콜이다.
 

전달 계층 프로토콜
  인터넷 상의 각 호스트는 최소한 하나 이상의 유일한 인터넷 주소를 할당 받는다. 인터넷 주소는 인터넷 인터넷에 접속되어 있는 특정 위치를 유일하게 식별한다. 전달 계층 프로토콜이 하는 일은 근원지 호스트의 특정 프로세스에서 목적지 호스트의 특정 프로세스로 자료를 전송하는 것이다. 따라서, TCP/IP 전달 계층은 호스트에 할당된 인터넷 주소 이상의 주소지정 기법을 요구한다. 이 상위 수준의 주소지정 기법은 전달 계층 프로토콜 포트(transport layer protocol port)에 의해 제공된다.
  호스트에서 동작하는 각 응용 프로세스는 동일한 호스트에서 동작하는 같은 전달 계층 프로토콜의 다른 사용자들과의 구분을 위해 16비트의 전달 계층 프로토콜 포트 번호가 할당되어야 한다. TCP/IP 통신 서비스를 이용하는 각 응용 프로세스는 호스트에 하나 또는 그 이상의 포트 번호를 할당받는다. 근원지 응용 프로세스가 데이터를 전달 계층 프로토콜을 이용하여 목적지 응용 프로세스에게 보낼 때, 3가지 정보를 전달 계층 프로토콜에 보내야 한다.

  • 전송할 데이터
  • 목적지 응용 프로세스가 구동되고 있는 호스트의 인터넷 주소
  • 목적지 응용 프로세스에 할당되어 있는 목적지 호스트의 포트 번호

클라이언트-서버 관계
  통신을 위해 TCP/IP를 이용하는 대부분의 분산 응용은 제17장에 자세히 기술된 분산 컴퓨팅의 클라이언트-서버 응용의 구현에 이용된다. 클라이언트-서버 응용에서는 서버라는 하는 하나의 응용 요소가 클라이언트라고 하는 다른 호스트에서 실행되는 응용 요소를 위해 잘 정의된 서비스를 제공한다. 클라이언트-서버 응용에서 클라이언트는 서버와의 통신을 시작할 책임을 진다. 이때 클라이언트는 서버로 데이터를 전송하여 서비스 요청을 한다. 그러면 서버를 서비스를 수행하고, 클라이언트로 데이터를 반환하여 응답을 보낸다.
  이런 응용에서는 서버가 사용하는 포트의 번호를 알 필요가 있다. 이때 클라이언트는 서버가 그를 통해 응답하게 응답하게 될 클라이언트의 포트 번호를 서버에게 알려준다.

포트 할당
  TCP/IP는 0에서 255사이의 포트 번호만 사용하고, 다른 포트는 TCP/IP 사용자들이 할당하도록 남겨둔다. 포트 번호가 클라이언트와 서버의 프로세스에 할당되는 일정한 방식을 제공하기 위해, 포트 번호는 보통 아래와 같은 방법으로 지정된다.

  • 포트 0 : 사용되지 않음
  • 포트 1 - 255 : 잘 알려진 서비스를 위해 예약된 포트
  • 포트 256 - 1,023 : 그 밖의 예약된 포트
  • 포트 1,24 - 4,999 : 임시 클라이언트 포트
  • 포트 5,000 - 65,535 : 사용자 정의 서버 포트

    • 잘 알려진 서비스를 위해 예약된 포트 : 인터넷에서 유용한 서버들을 지원할 필요에 따라, 1에서 255사이의 예약된 포트 번호가 잘 알려진 서비스에 할당되어 사용된다. 잘 알려진 서비스를 위한 포트 할당은 표준으로 간주되고 있으며, 보통 TCP/IP를 지원하는 모든 호스트에서 통용된다. 예를 들어, TFTP(Trivial File Transport Protocol)는 잘 알려진 UDP의 포트 번호 69를 사용한다. TFTP 서버를 이용하고자 하는 FTP 클라이언트 응용은 TFTP를 구동하는 서버의 인터넷 주소를 알아야 하고, 호스트 상의 TFTP와 통신을 설정하기 위해 UDP 포트 번호 69를 사용한다. 잘 알려진 서비스에 이용되는 것을 포함하여, 예약된 포트는 IANA(Internet Assigned Number Authority)에 의해 할당되고 RFC에 의해 문서화된다.
    • 그 밖의 예약된 포트 : 256에서 1,023 까지의 포트 번호는 원래 UNIX 관렬 서비스를 위해 지정되었다. 이 포트 번호들 중의 일부는 현재 경로배정 기능과 같은 범용 목적의 서비스를 위해 이용되고 있다.
    • 임시 클라이언트 포트 : 클라이언트-서버 응용에서 클라이언트 프로세스는 서버와의 통신 설정을 위해 임의의 클라이어트 포트 번호중의 하나를 사용한다. 클라이언트와 서버 사이에 위치한 다이얼로그의 일부로서, 클라이언트는 사용하고 있는 임의 포트 번호를 서버에 보낸다. 대부분의 TCP/IP 통신 소프트웨어는 그 호스트에서 사용되지 않은 임시 포트의 번호를 얻기 위해 클라이언트 프로세스가 사용하는 동일한 기능을 수행한다.
    • 사용자 정의 서버 포트 : 사용자가 작성한 클라이언트-서버 응용은 서버 프로스스에 사용자 정의 서버와 그 클라이언트 사이의 관례에 의해 설정된다.
3.7 인터넷 계층

  TCP/IP 구조의 인터넷 계층은 한 네트워크의 호스트에서 호스트에서 인터넷 상의 다른 네트워크로 데이터가 전송되어야 할 때 이용되는 경로배정과 중계 기능을 제공한다. TCP/IP 인터넷 계층은 어떤 문헌에서는 네트워크(network) 또는 인터네트워킹(internetworking) 계층이라고도 한다. 인터넷 계층은 근원지와 목적지 호스트 그리고 호스트들 간의 경로 상에 있는 모든 라우터에서 동작한다. 각 메시지가 인터넷을 따라 전송되는 경로를 결정하는 경로배정이 바로 이 계층에서 일어난다.

인터넷 계층 프로토콜
  인터넷 계층에서 동작하는 TCP/IP 프로토콜을 Figure 3.9에 간략하게 기술하였다.
 
Figure 3.9 인터넷 계층 프로토콜

  • 인터넷 프로토콜 : 인터넷 프로토콜(IP : Internet Protocol)은 TCP/IP 프로토콜들 중에서도 핵심적인 프로토콜이다. 이는 인터넷으르 통해 패킷을 한 호스트에서 다른 호스트로 이동시키는데 이용되는 비연결형 최선 노력 데이터 전달 서비스를 제공한다.
  • 인터넷 제어 메시지 프로토콜 : 인터넷 제어 메시지 프로토콜(ICMP : Internet Control Message Protocol)은 IP 서비스를 이용하여 호스트들이 오류 상황에 대해 보고할 수 있게 하고, 예상하지 못한 상황에 대한 정보를 제공하도록 한다.
  • 주소 변환 프로토콜 : 주소 변환 프로토콜(ARP : Address Resolution Protocol)은 두 호스트가 같은 물리적 네트워크 상에 있을 때, 근원지 호스트가 목적지 호스트로 직접 데이터를 전달할 수 있도록 도와준다. 이는 근원지 호스트가 목적지 호스트의 인터넷 주소로부터 목적지 호스트의 물리적 하드웨어 주소를 결정할 수 있게 한다. TCP/IP 인터넷 주소는 제4장에서 기술 한다.
  • 역 주소 변환 프로토콜 : 역 주소 변환 프로토콜(RARP : Reverse Address Resolution Protocol)은 아직 자신의 인터넷 주소를 갖지 못한 호스트가 이를 얻도록 해준다. RARP는 일반적으로 자체의 디스크 기억장치가 없는 워크스테이션이나 지능형 터미널에 의해 이용된다.
  • 경로 배정 프로토콜 : TCP/IP 인터넷에서의 기본적인 경로배정 기능은 IP에 의해 수행된다. 하지만, 라우터를 사용하는 인터넷에서는 라우터들이 서로 경로배정 정보를 교환할 수 있도록 추가적인 경로배정 프로토콜을 사용하는 경우가 많다. 경로배정 프로토콜은 제13장에서 기술한다.

 
3.8 네트워크 인터페이스 계층

  네트워크 인터페이스 계층의 주기능은 하드웨어에 종속적인 기능을 다루는 것과 TCP/IP의 인터넷 계층에 표준화된 인터페이스를 제공하는 것이다. TCP/IP 프로토콜은 네트워크 인터페이스 계층이나 그 이하의 계층에서 이용되는 프로토콜에 대해 세부적인 것까지 언급하고 있지는 않다. TCP/IP의 네트워크 인터페이스 계층은 인터넷 계층으로부터 메시지를 받아들이고, 원하는 형태의 데이터 링크 기술을 통해 이들의 전송을 준비하는 역할을 하고 있다.
  개별적인 TCP/IP 네트워크는 아마 Ethernet이나 토큰 링, FDDI와 같은 LAN 데이터 링크 기술을 이용한 LAN일 수 있다. 또한, 개별적인 TCP/IP 네트워크는 점대점 전용회선이나 전화회선, 인공위성 링크, 특수한 디지틀 회선 등과 같은 WAN 데이터 링크 기술로 구현될 수도 있다. TCP/IP가 널리 사용되고 있는 이유중의 하나는 거의 대부분의 물리적 회선 및 데이터 링크 기술과 연동할 수 있기 때문이다.
  네트워크 인터페이스 계층의 중요한 기능의 하나는 호스트 컴퓨터에 설치된 NIC(Network Interface Card)가 수신하는 각 프레임을 검사하고 프레임이 어떤 인터넷 계층 프로토콜로 가야 하는지 결정하는 것이다. 이를 디멀티플렉싱(demultiplexing) 기능이라고 한다.

3.9 하드웨어 계층

  하드웨어 계층은 네트워크 인터페이스 계층 아래에 정의될 수 있지만, 사실 하드웨어 계층은 TCP/IP 구조의 범위를 벗어난다. 하드웨어 계층보다 상위에 있는 모든 계층은 인터넷에 연결되어 있는 호스트 컴퓨터 내에서 동작하는 소프트웨어로 구성되어 있다. 하드웨어 계층은 NIC 트랜시버(transceiver), 허브(hub), 커넥터(connector) 그리고 호스트를 물리적으로 연결해주는 케이블과 같은 물리적인 개체들과 관련 있다.
  트위스티드페어 케이블, 동축 케이블, 또는 광섬유와 같은 전송 매체를 이용한 어떤 형태의 물리적 네트워크 기술도 TCP/IP 인터넷에 채택될 수 있다. 필요한 것은 물리적 네트워크에 액세스하려는 컴퓨팅 시스템을 지원하는 네트워크 인터페이스 계층에서 동작하는 적절한 스프트웨어이다.

요약

  TCP/IP는 컴퓨터 네트워크의 설계와 운영에 관한 포괄적인 계획과 규칙을 포함하는 수많은 네트워크 구조들 중의 하나이다. 네트워크 구조는 기능 계층간의 인터페이스와 메시지들이 네트워크를 통해 교환되는 방법에 관한 통신 프로토콜을 정의하고 있다.
  TCP/IP를 포함하는 네트워크 구조들은 OSI의 참조 모델과 자주 비교된다. OSI 모델의 7계층은 응용 계층, 표현 계층, 세션 계층, 전달 계층, 네트워크 계층, 데이터 링크 계층, 물리 계층이다.
  TCP/IP 구조는 4개의 기능 계층으로 구성된다. OSI의 응용, 표현, 세션 계층에 대응되는 TCP/IP의 응용 계층에 인터넷을 사용하는 응용 프로그램들이 위치한다. OSI의 전달 계층에 대응되는 전달 계층은 단대 단 데이터 전달 서비스를 제공한다. OSI의 네트워크 계층에 대응되는 인터넷 계층은 경로배정과 중계 기능을 제공한다. OSI의 데이터 링크 계층에 대응되는 네트워크 인터페이스 계층은 물리적 네트워킹에 대한 인터페이스를 제공한다. OSI의 물리 계층에 대응되는 하드웨어 계층은 네트워크 인터페이스 계층의 하위 계층으로 정의될 수는 있지만 TCP/IP 구조의 범위 밖으로 간주된다.
  제4장에서는 TCP/IP 인터넷에서의 호스트 컴퓨터와 라우터에 대한 주소지 정법을 기술한다.