Subject : TN 3270 소개


     ● 개요

     일반적인 IBM 터미널인 3270 터미널군은 IBM 메인프레임
     어플리케이션과 밀접한 관계를 가지고 있고 현재도 수많은
     어플레케이션들이 운용되고 있다. TN3270은 메인프레임 환경에 TCP/IP
     망을 추가 지원하게되면서 기존 어플리케이션을 TCP/IP 프로토콜에
     맞춰 다시 작성하지않고 TCP/IP 망을 이용할 수 있게 하기위하여
     만들어 진 것으로, Telnet 프로토콜상에 3270 데이타 스트림이
     전송되게 하는 것이 주요 골자다.

     본 서에서는 TN3270 관련 기술 내용을 모두 다루지 않고 현재 IWW
     3.0이 지원하는 RFC 1646에 관해서만 언급하였으며, 주로 접속의
     이슈가되는 클라이언트-서버간의 Negotiation 과정과 그 기술적 의미를
     간단히 소개한다.

     ● RFC 1646 TN3270 Extensions (TN3287) 소개

     TN3287은 TN3270을 확장한 것(TN3270 Extensions: TN3270E)으로 TN3270
     Client가 TN3270 Server로부터 특정 디바이스(LUname)를 요구하는
     방법과 TN3270 프린터 서비스가 요구되는 방법 및 프린터 상태 정보를
     어떤식으로 서버에게 보낼것인가 등 크게 이 두 가지에 대해 정의한다.

     3270 터미날의 유일한 특징은 상태 정보를 out-of-band 데이타로 주고
     받을 수 있다는 점이다. 예를들면, 프린터의 종이가 없다든지 터미날의
     전원이 내려졌다든지 등과 같은 상태 정보는 결국 호스트
     어플리케이션에 의해 오류 검출 등을 목적으로 이용된다. 터미날은
     half duplex이고 블럭 모드로 동작하므로 결국, 언제 블럭이
     보내어지고, 언제 블럭이 끝나는지, 또 언제 보내어질 수 없는지를
     서로 연락할 필요가 있다. 이는 VTAM과 TCP/IP의 접속에 관련된 문제로
     VTAM을 사용하는 모든 시스템에 적용된다. (MV와 같이 VTAM을 사용하지
     않는 메인프레임 어플리케이션 시스템을 제외)

     VTAM/SNA는 계층적 망(Hierachical Network)이며, 3270 Terminal
     환경은 Terminal Controller와 그 Controller에 매달린 Terminal로
     구성된다. 여기서 Terminal Cpontroller는 PU(Physical Unit)라 하고,
     Terminal은 LU(Logical Unit)라 한다. VTAM/SNA는 네트웍상의 각 PU와
     LU에 유일한 이름을 부여하여, 이 것이 PUname, LUname이다.
     어플리케이션과 터미날간의 연결을 세션이라 하고, VTAM/SNA 터미날은
     실질적으로 in-band 정보와 out-of-band 정보를 주고 받는 2 개의
     세션을 가지며, 각각 어플리케이션에 직접 붙는 LU-LU 세션과 VTAM에
     붙는 SSCP-LU 세션이라 한다.

                                   [Image]

     out-of-band 정보중의 하나가 터미날의 상태 변화를 어플리케이션에게
     알리는 LUSTAT 메세지이며, 프린터 혹은 스크린이 데이타를 수신할
     준비(ready) 상태인지 아닌지를 나타낸다.
     LU-LU 세션에서도 터미날의 사용을 제어하는 Data Flow가 존재하며, 한
     세션내에서 전송되는 정보 블럭을 RU(Request Unit)이라 하는데, 어떤
     종류의 데이타를 담고 있는지, 데이타 길이가 얼마나 되는지, 다음
     데이타(RUs)가 더 있는지 등을 표시한다.

        * Bracket : 작업 단위의 종료를 표시
        * Chaining : 다른 RU가 더 있는지 여부를 표시

     Bracket이나 Chaining과 같은 VTAM/SNA 프로토콜의 어떤 부분이 사용될
     것인가에 대한 결정은 LOGMODE라 불리는 VTAM 테이블에 의해
     관리되는데, 이러한 테이블들은 LU-LU 세션이 시작될 때 선택되어
     프로토콜이나 RU에 포함된 단말 데이타의 종류를 셋엎한다.

        * LU type 1 : printer data without screen formatting data
        * LU type 2 : 3270 screen formatted data
        * LU type 3 : 3270 screen formatted data for a printer

     LOGMODE 테이블은 송수신되는 RU 크기와 스크린 크기 또한 갖고 있다.
     각 LU는 GEN이라 불리는 VTAM 구성의 일부분으로 LOGMODE 테이블
     엔트리를 갖고 있으며, 이러한 테이블 엔트리의 선택은 LU나 PU에
     의해서 조정되는 것이 아니라 connection 이 맺어질 때 사용자 혹은
     어플리케이션에 의해서만 선택된다. 실제 세션에 사용될 LOGMODE
     엔트리는 세션 로그온 타임시 보내지는데, 이 특별한 종류의 RU를
     BIND라 한다. 일단 BIND가 보내지면 세션 사용 규칙이 정해진다.

     TN3287 프로토콜의 목적은 일반적인 IBM 호스트 프린터 통신 기능을
     제공하는 것으로 TN3270 클라이언트로 하여금 3287 프린터 데이타
     스트림을 처리하게 한다.

     ● Client-Server Negotiation

     TN3287 데이타스트림에 대한 협상 조건은 다음 세 가지다.

        * BINARY : 이진 데이타 교환 가능성
        * TERMINAL-TYPE : 단말 종류 지정
        * TELNET IAC EOR : inbound 및 outbound 데이타스트림의 delimiter
          지정

     이 것이 구현됨으로 해서 호스트 어플리케이션이 LU1과 LU3 타잎
     데이타를 섞어 쓰는 것이 가능하다.

        * TN3287 Server
            1. Maximum RU size : 4K Byte
            2. LU Type은 메인프레임 어플리케이션으로부터의 bind에 의해
               결정, LU1인지 혹은 LU3인지 서버가 기억해야 함
            3. TELNET CLOSE 명령어 수신 즉시 서버는 자동적으로 세션을
               unbind해야 함
        * TN3287 Client
            1. IBM 3287 model 1 Type Printer
            2. LU1과 LU3 모두 지원 : LU1 데이타는 0x00로 시작, LU3
               데이타는 WCC로 시작 (0인 경우는 없음)

     ● Command Structure

     모든 TELNET 명령어은 적어도 2 Byte 이상의 Sequence이며, 항상
     명령어 시작을 알리는 IAC (Interpret-as-Command) 코드를 앞세운다.

     COMMAND Values

          IAC           Interpret as command        FF
          DO                                        FD
          WILL                                      FB
          WONT                                      FC
          SB            SuBnegotiation option       FA
          SE            Subnegotiation End          F0
          TERMINAL-TYPE                             18
          SEND                                      1
          IS                                        0

          EOR           End-Of-Record (SNA RU chain 19
                        끝)
          BINARY                                    0

          AO            Abort Output (end of        F5
                        bracket)
          IP            Interrupt Process           F4
          AYT           Are You There               F6
          BREAK                                     F3

     TELNET COMMANDS의 예

          S: [IAC DO TERMINAL-TYPE]     --- "터미날 타잎 협상 시작하자"
          C: [IAC WILL TERMINAL-TYPE]   --- "좋다, 원하면 내 터미날
                                        타잎 정보를 보내주마"
          S: [IAC SB TERMINAL-TYPE SEND --- "그럼, 네 터미날 타잎은
          IAC SE]                       뭐냐?"
          C: [IAC SB TERM TYPE IS       --- "내 터미날 타잎은
          IBM-3287-1 IAC SE]            IBM-3287-1이다."
          S: [IAC DO END-OF-RECORD]     --- "EOR 전송 시작하자"
          C: [IAC WILL END-OF-RECORD]   --- "나는 EOR 보내겠다"
          S: [IAC WILL END-OF-RECORD]   --- "나도 EOR 보내겠다"
          C: [IAC DO END-OF-RECORD]     --- "EOR 전송하기로 하자"
          S: [IAC DO TRANSMIT-BINARY]   --- "8 BIT 이진 데이타 전송
                                        시작하자"
          C: [IAC WILL TRANSMIT-BINARY] --- "나는 이진 데이타 보내겠다"
          S: [IAC WILL TRANSMIT-BINARY] --- "나도 이진 데이타 보내겠다"
          C: [IAC DO TRANSMIT-BINARY]   --- "이진 데이타 전송하기로
                                        하자"

     ● TN3270 Printer Status Message

     TN3270 Client가 Server에게 보내는 프린터 상태 메세지

     메세지 형식

     SOH   %   R   S1  S2  IAC     EOR
     01    6C  D9

     S1 : Status/Sense Byte 1

          0    1   2   3    4 5      6     7
          0    0   0   0    0 US     DE    0

               US (Unit Specify) --- "error 발생"
               DE (Device End) --- "서버로부터 받은 데이타를
               잘 처리했음"

     S2 : Status/Sense Byte 2

          0    1   2     3      4     5     6   7
          0    0   CR    IR     CD    DC    0   OP

               CR (Command Rejected)    "invalid 3270
                                        command 발생"
               IR (Intervention
               Required)                "Printer Not Ready"
               CD (Component
               Disconnectioned)         "Printer Power Off"
                                        or "Printer Cable
                                        Not Connected"
               DC (Data Check)          "Invalid print data"
               OP (Operation Check)     "illegal buffer
                                        address"
                                        or "incomplete order
                                        sequence"

                    SNA Sence Code

               CR         0x10030000
               IR         0x08020000
               CD         0x08020000
               DC         0x10010000
               OC         0x10050000

     Print Data 송수신의 예

          S: 0x00 [3270 Print Data] --- LU1 Type Data
          C: [S/S with DE] IAC EOR  --- "잘 처리 했음"
          S: 0x00 [3270 Print Data]
          IAC EOR                   --- End of Chain or LU Type 변경
          C: [S/S with IR] IAC EOR  --- "Paper Jam 발생"
          C: [S/S with DE] IAC EOR  --- "위 문제 해결"
          S: 0x00 [3270 Print Data] --- LU1 Type Data
          S: [3270 Print Data]      --- Data 계속
          S: [3270 Print Data]      --- Data 계속
          S: [3270 Print Data] IAC
          EOR                       --- Data Chain 끝
          C: [S/S with DE] IAC EOR  --- "잘 처리 했음"
          S: 0x00 [Last 3270 Print
          Data] IAC EOR             --- 마지막 Print Data
          C: IAC EOR                --- "잘 처리 했음"
          S: IAC AO                 --- End-of-bracket (End of print
                                    job)

     ● Error Conditions

     성공적인 협상 완료후에도 오류가 검출되면 Server와 Client간에
     "WONT/DONT" Telnet Sequence를 주고받은 다음 Client는 NVT 모드로
     복귀한다.

     COMMAND Values

          WILL "보내주겠다"                       FB
          WONT "못 보내주겠다"                    FC
          DO "받아들이겠다"                       FD
          DONT "못 받아들이겠다"                  FE

     TELNET COMMANDS의 예

          S: [IAC DO TN3270E]        --- "TN3270E Data 받아들이겠다"
                                     ( RFC1647 지원하냐? )
          C: [IAC WONT TN3270E]      --- "TN3270E Data 못 보내주겠다
                                     ( RFC1647 지원안됨 )
          S: [IAC DO TERMINAL-TYPE]  --- "TN3270 Data 받아들이겠다"
                                     ( 터미날 타잎 협상 시작하자 )
          C:[IAC WILL TERMINAL-TYPE] --- "TN3270 Data 보내주겠다
                                     (좋다, 원하면 내 터미날 타잎
                                     정보를 보내주마)

----------------------------------------------------------------------------

Revision History

작성일자 : 97.03.10
작성자 : 이민호

수정일자 :
수정자 :