1993.1.21

SUBJECT: Introduction to TCP/IP 

DESCRIPTION:
0. Introduction
   * multi-vendor의 컴퓨터 사용 환경에서
     어떤 컴퓨터 vendor에도 의존하지 않고 사용할 수 있는 프로토콜로서
     OSI(Open Systems Interconnection:개방 시스템 상호접속), XNS(Xerox Network System),
     TCP/IP(Transmission Control Protocol/Internet Protocol)등의 프로토콜이 있는데
     그 중에서도 현재 가장 널리 사용되고 있는 프로토콜이 
     TCP/IP(Transmission Control Protocol/Internet Protocol)이다.
   * TCP/IP가 운용되는 LAN은 Ethernet 뿐만 아니라
     CCITT(International Telegraph and Telephone Consultative Committee:국제 전신전화 자문위원회) 권고
     X.25에 의거한 '공중 패킷교환망(Packet Switched Public Network)'이나
     DoD(United States Department of Defense:미국방성)의 ARPANET등을 포함한다.
     이와 같이 TCP/IP는 LAN 뿐만 아니라 광역망에도 널리 사용되고 있다.
   * 결국 TCP/IP는 서로 다른 범주(X.25 base의 WAN, building내의 LAN)의 네트웍에 물려 있는
     서로 다른 종류의 수 많은 machine들간에 통신을 가능케 하는 프로토콜이다.

1. TCP/IP 통신의 역사
   * 1969년 DoD는 여러가지 통신기술에 관한 연구와 실험을 반복하고 있었다.
     data를 '어떤 정해진 크기의 덩어리 = packet'으로 나누어 전송하는 
     장거리 패킷교환기술의 가능성을 심도있게 실험하고 있었다.
   * 그 때까지의 데이타 통신이라 함은 전화선(모뎀회선) 같은 것을 사용하였기에 
     한 회선이 이를 사용하는 사람들에게 점유되어 다수의 사용자가 회선을 동시에 사용하려면
     회선을 증설하는 방법밖에 없었다. 좀처럼 통신 비용을 줄일 수가 없었던 것.
     이에 반해 패킷교환기술이라는 방법은
     많은 사용자가 동시에 하나의 네트웍을 같이 쓸 수 있다고 하는 것.
     문제는 이 기술이 실용화 될 수 있는가 하는 문제였었다.
   * 이에 DoD가 선봉에 서서 최초의 패킷교환기술의 시범 케이스로
     4개의 노드(UCLA, UCSE-University of California Santa Barbara,
     SRI-Stanford Research Institude International, Utah University)를 포함한
     광역패킷 교환망을 구축하였다.
     ARPANET이라 불리는 네트웍의 시작인 것.
     ARPANET의 ARPA는 이 실험과 네트웍 개발에 자금지원을 한
     Advanced Research Projects Agency(미 국방성 고등연구 프로젝트국)의 약자이다.
   * 이 실험은 결과적으로 대 성공을 거두었다.
     패킷교환이라는 새로운 통신방식이 
     일반 데이타통신에서 실용화될 수 있다는 것을 충분히 보여준 것.
   * 이후 여러가지로 개량된 것이 추가되어 1972년 경에는
     ARPANET이 50 노드(20교환기)로 성장하고 일반에게 공개되기에 이른다.
   * 이즈음 DoD는 패킷교환망을 상용화한다는 최초의 실험목적을 끝내고
     연이어 제 2의 실험에 들어 간다.
     간단히 패킷교환망을 사용한다는 것 뿐만 아니라
     프로토콜 계층으로 말하면 패킷교환에 사용되는  계층보다 좀 더 위 계층까지 포함한
     종합적인 통신 프로토콜 체계를 만든다는 것이었다.
     당시 DoD의 입장에서는 이기종간 통신의 필요성을 강하게 느끼고  있었다.
     DoD가 사용하고 있는 컴퓨터는 세상에 있는 모든 것이라고 해도 좋을 정도로
     많은 종류를 포함하고 있었는데 각 메이커마다 별도로 접속되어 있으면
     데이타나 하드웨어 자산을 유효하게 활용할 수 없는 것.
     그렇다고 어느 한 메이커 방식만으로 통일시켜 버리면 
     모든 메이커에 공평한 비지니스 기회를 제공할 수 없게 된다.
     그래서 당연히 DoD도 OSI라는 표준 통신 방식을 착안하였지만,
     OSI의 프로토콜 스펙이 보다 명확해지는 것을 기다릴 여유가 없었다.
     당연히 DoD는 독자적으로 이기종간의 접속이 가능한 프로토콜 개발에 착수하게 된다.
   * UNIX와 TCP/IP의 접목:
     1975년 경 ARPANET의 한 연구그룹에서 TCP 프로토콜을 만들어 내었고 
     외부적으로는 이 당시 UNIX라는 OS가 대학, 연구소를 중심으로 널리 보급되던 시기이다.
     UNIX의 한 종류로서 UCLA의 4.x BSD(Berkeley System Distribution)의 경우는
     ARPANET의 이 두번째 실험에 참가하여 여기서 개발되는 여러 통신 프로토콜을
     OS level에서 porting하였다.
     ('TCP/IP통신의 모체인 ARPANET'과 'UNIX와 TCP/IP 통신을 접합시키는 역할을 한 UCB'에서는
      상위 레벨의 통신 utility에서 독자적인 통신기능을 개발하였다.
      군사상의 비밀 데이타도 포함된 ARPANET에서 개발된 utility들 - ftp, telnet등 - 은 
      사용하기에 다소 불편하지만 어느 정도의 시큐리티를 확보하고 있고
      버클리에서 개발된 것들 - rlogin, rcp, rsh등 - 은 대학에서 학생의 자유로운 발상을 속박하지 않는
      자유로운 연구를 할 목적에서 시큐리티를 사용하는 사람의 양심에 맡기고 있다. )
   * 1982년 경 DoD에선 그동안 개발된 통신 프로토콜을 정리한 TCP/IP를 표준통신방식으로 확정하였다.
     1983 ARPANET이 정식으로 TCP/IP를 채택하고
     Sun사에서 BSD계열의 SunOS를 통해 일반 사용자를 향한 제품으로서 TCP/IP의 제공을 개시한다. 
   * 이후 TCP/IP는 Ethernet 뿐만 아니라 Token Ring 등 IEEE802를 따르는 여러 LAN에서도
     동작토록 세력을 확장한다.
     TCP/IP하면 요즈음 UNIX의 통신세계에선 필수적이라 할 만큼의 비중을 갖는데
     TCP/IP가 산업표준화하면서 여타 OS에서도
     TCP/IP를 OS level에서 porting하여 지원하지는 않더라도
     최소한 자신의 OS와 동작할 수 있는 TCP/IP module을 option으로 제공한다.

2. TCP/IP와 Engineering Workstation
   * TCP/IP는 UNIX 기초하에 작동하는 Engineering Workstation을 사용하고 있는 
     사용자들 사이에서는 공통어가 되어 있다.
     'Ethernet 방식의 LAN'과 Engineering Workstation이 결합하여 만들어 내는
     '고속의 이기종간 컴퓨터 통신'은 이 TCP/IP에 기초한다.
   * TCP/IP의 발생 모태인 ARPANET은 광역망으로 분류되는 네트웍으로서
     LAN과는 직접 관련이 없는 것인데,
     '근거리 고속이라는 LAN의 통신기능'이 필요한 Engineering Workstation의 세계와
     이 TCP/IP가 결합함으로써  TCP/IP통신은 폭발적으로 확대되었다.
   * BSD계열의 UNIX는 기종에 상관 없이 OS level에서 TCP/IP 통신이 탑재되 있었고
     UNIX의 또다른 유형의 하나인 System V라 불리는 AT&T계의 UNIX에서도
     나중에 TCP/IP 통신의 우수함이 인식되어 각각의 컴퓨터 업체에 의해
     TCP/IP 통신 기능이 실현되었던 것.
   * Engineering Workstation은 3차원의 그래픽 데이타나 구조 해석을 위해
     비교적 대량인 데이타들을 빈번하고도 빠르게 전송하지 않으면 안되는 환경이었다.
     또한 여러 컴퓨터 업체들의 다양한 제품들 간에
     '이기종간 통신'을 위한 공통의 통신 프로토콜이 필요하였다.
     고속의 통신 매체인 Ethernet과 함께 TCP/IP 프로토콜은 이들 요구를 충분히 수용할 수 있었던 것.
     Sun Workstation이 client-server model, 네트웍 분산 환경, NFS, YP 등
     통신 분야에서 타 컴퓨터 업체들에 비해 진보된 서비스들을 제공할 수 있었던 것도
     일찌기 TCP/IP를 기본으로 채택하였기에 가능했던 것들이 아닌가 한다.

3. Internet의 등장
   * TCP/IP 통신을 전용으로 하는 Wide Area Network이다.
   * 흔히들 'Internet'을 아래 두 경우로 혼용하여 사용하고 있다.
     - Internet Protocol family:
          TCP, UDP(User Datagram Protocol), ARP(Address Resolution Protocol),
          RARP(Reverse ARP), ICMP(Internet Control Message Protoccol)
     - Internet이라는 wide area network

4. TCP/IP Protocol Structure

   1) TCP/IP Protocol Layer
      +--------------+--------------------------------------------------------+
      | Layer        | Network Services                                       |
      +--------------+--------------------------------------------------------+
      | Application  | DNS(Domain Name Service), telnet, ftp, rlogin, rcp ... |
      | Transport    | TCP, UDP, ICMP(Internet Control Message Protocol)      |
      | Network      | IP                                                     |
      | Data Link    | ARP, RARP, Ethernet과 같은 controller                  |
      | Physical     | Ethernet, Token Ring, serial(ptp, X.25...) ...         |
      +--------------+--------------------------------------------------------+

   2) Sender/Receiver Interaction
      * sending host의 각 protocol layer는 receiving host에 짝이되는 protocol layer를 가진다.
      * 각 protocol layer는 communication data에 header라 불리는 정보를 더하거나 삭제하는 기능을 수행.
      * sending host는 lower layer로 receiving host는 upper layer로 data를 보낸다.

               Sender                                    Receiver
      +----------------------+                    +------------------------+
      | +------------------+ |                    |   +------------------+ |
      | |    Application   | |                    |   |    Application   | | 
      | |     (source)     | |                    |   |   (destination)  | | 
      | +------------------+ |                    |   +------------------+ |
      |          ↓          |                    |            ↑          |
      | +------------------+ |                    |   +------------------+ |
      | |  Transport Layer | |                    |   |  Transport Layer | |
      | |      (TCP)       | |                    |   |      (TCP)       | | 
      | +------------------+ |                    |   +------------------+ |
      |          ↓          |                    |            ↑          |
      | +------------------+ |                    |   +------------------+ |
      | |   Network Layer  | |                    |   |   Network Layer  | |
      | |      (IP)        | |                    |   |       (IP)       | | 
      | +------------------+ |                    |   +------------------+ |
      |          ↓          |                    |            ↑          |
      | +------------------+ |                    |   +------------------+ |
      | |     Data Link    | |   Physical Link    |   |      Data Link   | |
      | |       Layer      |-+--------------------+-→|       Layer      | |
      | +------------------+ |                    |   +------------------+ |
      +----------------------+                    +------------------------+

   3) OSI 참조 모델과 TCP/IP의 Layer간 대응
      +---+------------------+      +------------------------------+
      | 7 | Application      |      |                              | 
      +---+------------------+      |   SMTP, DNS, FTP, TELNET     |
      | 6 | Presentation     |      |      rlogin, rcp, rsh        |
      +---+------------------+      |          .....               |
      | 5 | Session          |      |                              | 
      +---+------------------+      +-------+-------+--------------+
      | 4 | Transport        |      |  TCP  |  UDP  |    ....      |          
      +---+------------------+      +-------+-------+--------------+
      | 3 | Network          |      |             IP               |
      +---+------------------+      +--------------+---------------+
      | 2 | Data Link        |      |      ARP     |    RARP       |
      +---+------------------+      +--------------+---------------+
      | 1 | Physical         |      |    Ethernet, Token Ring      |
      |   |                  |      |    X.25, 고속 디지틀 회선    |
      +---+------------------+      +------------------------------+
      * data link layer와 TCP/IP의 data link, physical layer의 관계는 명확하지 않은데
        memo " OSI와 LAN 표준과의 관계"를 참조하면 좋을 것.

   4) TCP/IP의 각 Layer별 설명 
      ① Physical Layer
         * protocol model의 H/W level로 전자적 signal에 의해 제어된다.
      ② Data Link Layer
         * ARP, RARP
           이 protocol든 Network Layer와 Data Link Layer의 중간에 존재.
           ARP는 IP address를 Ethernet address로 mapping
           RARP는 Ethernet address를 IP address로 mapping
         * ARP, RARP는 OSI model의 Data Link Layer와 Network Layer에 걸쳐 있는 것.
           혹자는 이를 Network Layer라 분류하기도 한다.
         * packet의 형태로 data 전송
             packet = ethernet header + ip header + tcp header + data 
      ③ Network Layer
         * IP
           - IP address를 사용 data를 보내고 받을 수 있도록 IP header를 구성/해석
           - outgoing시(상위 layer → 하위 layer):
             상위 layer인 Transport Layer에서 받은 frame에 IP header를 붙인다. 
           - incoming시(하위 layer → 상위 layer):
             전송되어온 data가 분할(fragment)되었는지를 확인하여
             분할된 경우는 원래의 data를 조합하여 Transport Layer로 넘겨줌.
         * datagram의 형태로 data 넘겨줌
             datagram =  ip header + tcp header + data 
      ④ Transport Layer
         * addressing 방법 : port number
         * TCP
           - connection oriented, reliable protocol 이라 함.
             TCP connection에 의해 보내진 data는 반드시 대응되는(peer) 상대가 받게 된다. 
             상대가 data를 흘려버리지 않도록 flow control을 하거나
             전송중에 error가 발생한 경우 자동적으로 재전송.
           - data 전송시 일일이 virtual circuit(가상회선)을 설정 즉 "connection"을 확립해야 한다.
           - 사용 예
             data량/data 크기가 많아 conneciton의 확립과 절단으로 발생하는 번잡함이 무시될 수 있는 경우.
           - TCP header를 구성
         * UDP
           - connectionless, unreliable datagram protocol
           - datagram의 loss나 fail을 recovery할 방법이 없다.
           - 사용 예
             확실한 data 전송이 그리 중요치 않은 통신에 사용.
             신뢰성이 매우 높은 회선을 사용한 통신에 사용.
             사용자 프로그램등의  상위층이 확실한 data 전송을 대신할 수 있는 경우.
             한번에 많은 상대에게 data글 전달하고자 할 때
           - UCP header를 구성
         * TCP를 사용할지 UDP를 사용할지는 사용자에 의해 invoke되는 network application이
           어느 protocol을 사용하는지에 따라 다르다.
           한 예로, 사용자가 telnet을 사용하면 이는 TCP에 user request를 전달
                    사용자가 domain name service를 사용하면 이는 UCP에 user request를 전달
      ⑤ Application Layer
         * telnet
         * ftp
         * tftp
         * "r" command series
         * DNS



Revision History
Created        on Jan. 21 ,1993
Updated        on Jan. 24 ,1993