원문: http://warpproject.org/trac/wiki/Exercises/13_4/IntroToSDK


Introduction to the Xilinx Software Development Kit (SDK)

(compatible with WARP v3)


In this exercise, users will be introduced to a tool that is used heavily in WARP development: the Xilinx Software Development Kit (SDK). Users will use these tools to construct a simple "Hello World" software project that prints messages via UART to a terminal running on the user's PC and controls the User I/O on the board to run on and off LEDs and display numbers on the hexadecimal displays.


유저는 SDK를 사용하여서 (간단한 example 을 구현한다.) 헬로월드 따위를 PC로 전송하여 터미널에 디스플레이 할 수 있고 몇가지 I/O 포트 제어 및 LED 제어가 가능할 것이다. SDK는 이클립스의 IDE와 유사하며, 그리고 주로 사용하는 언어는 C와 C++ 이다. 이를 통하여 마이크로 블레이즈 CPU를 제어한다. 



The SDK will look very familiar to users who are comfortable with the Eclipse IDE. Basically, the SDK allows users to write custom C or C++ code to execute on the MicroBlaze processor. Furthermore, it natively supports step-by-step debugging of code as well as code profiling.


Prerequisites

필요한 준비물은 아래와 같다. PC와 연결한 와프 보드와 인터페이스 JTAG이 필요하다. +정전기 방지에 대한 숙지.

보드만 구매하면 낭패를 볼수있으니, 반드시 호환되는 JTAG 케이블도 함께 구매하길 바란다. 

  • You have a WARP v3 board
  • ESD protection for the WARP board (wrist strap, etc)
  • External USB JTAG cable and a micro USB cable for UART
  • Complete installation of ISE System Edition 13.4
  • Set up a terminal on your computer using PuTTY or an alternative. Instructions to do this are available instructions here.



Instructions

매우 간단한 예제를 따라하면서, 새프로젝트의 생성 및 디버거 툴을 사용해보면서 익숙해지는 과정을 상세히 설명하고 있습니다. 주석이 필요한 부분만 달고 나머지 부분은 직접 따라해보길 권장합니다.


  1. Download the WARP v3 Template Project. Note: any template for your version of the hardware will work fine for this exercise as only the SDK is necessary. In general, when FPGA hardware designs must be generated, the "lite" template will build the quickest, but it lacks peripherals like Ethernet that may be necessary for designs other than this simple Introduction to the SDK exercise.

    앞서 이야기한 예제를 실행하기 위해서, 위의 링크의 프로젝트를 다운로드 합니다. 이는 섹션4의 마지막 파트에서 설명하게되는 프로젝트 예시파일과 같습니다. (* Template Projects) 실행을 위해서는 SDK가 반드시 필요합니다. 일단적으로 FPGA 하드웨어 디자인들이 생성될때, lite 버전의 템플릿들은 빠르게 생성되지만 그것은 이더넷과 같은 주변장치를 제외하기 때문에 초기 학습에 적합하지 않습니다.


  2. Extract the archive into a folder on your hard drive. Note: this folder must not contain any spaces in the path (this includes folders such as "My Documents" in Windows; Please note that in Windows 7, the Desktop folder can be used, "C:\Users\<username>\Desktop", whereas in previous versions of Windows the Desktop folder was under the "Documents and Settings" directory and could not be used).

    어쨌거나 템플릿 프로젝트 파일의 압축을 풀고, 해당폴더는 최상위 폴더여야 합니다. 

  3. Launch the Xilinx SDK from the Start Menu. It will ask you to select a workspace. Click "Browse ..." and navigate to the "SDK_workspace" folder in the archive you just extracted. Do not check the box for "Use this as the default and do not ask again." We recommend the convention of using a single workspace per hardware project; checking this box will make this difficult. More useful tips for using the SDK are available here. Click OK.

    시작메뉴의 자일링스 SDK를 실행시킨다. SDK작업폴더로 이동한다. default 설정을 유지한다. 이 옵션을 선택하지 않으면 귀찮아 진다. 더 많은 정보는 here 링크를 참조하세요.

  4. Rather strangely, the Xilinx SDK does not automatically know about software drivers to custom peripherals in your XPS project. You have to explicitly tell the SDK where to find your hardware project. This is a step you have to do with every new SDK workspace. In this exercise, we do not have any custom peripherals, but it is still a good habit to get into. Click on the "Xilinx Tools" menu item and select "Repositories." Here, you want to ensure two things:
    • In Local Repositories, you want to point the SDK to the folder that contains the XPS project system.xmp file. Click on "New..." and navigate to and select this folder.
    • In Global Repositories, you want the SDK to point to the edk_user_repository folder on your hard drive. Unlike the local repositories, the SDK does remember this setting across workspaces. You'll only need to manually add the edk_user_repository the first time you run the SDK.

      자일링스 SDK는 자동적으로 소프트웨어 드라이버를 찾거나 알지 못합니다. 따라서 당신이 명확하게 지정해주어야 합니다. 이는 새로운 SDK workspace를 생성할때마다 반복해야 합니다. 실질적인 SDK와 XPS의 사용법은 직접 실행을 통하여 익숙해지길 권합니다.


  5. In the template project you downloaded, we have provided a template software project. We now need to add it to the workspace. Click on File→Import...

    다운로드한 템플릿 프로젝트는 현재의 작업영엑 추가해야한다. 클릭후 파일메뉴에서 불러오기 선택.
    (이제부터 아래의 메뉴얼의 내용대로 진행하세요. 앞으로 추가설명이 필요한 부분만 주석처리 하겠습니다.)

  6. Click the + next to "General" and select "Existing Projects into Workspace." Then click "Next."

  7. In the "Select root directory:" click "Browse..." Then, navigate to the "SDK_workspace" folder in the extracted archive and click "OK"

  8. Three projects have now been populated in the "Projects" area of the import window. Make sure all of these are checked. Do not check "Copy projects into workspace" because these projects are already in the SDK_workspace folder. Click "Finish."


  9. The three projects now appear in the "Project Explorer" on the left of the screen:

    세개의 프로젝트에 대한 정보를 이름과 관련된 파일들로 분류하여 설명합니다. 

    • The "*_hw_platform" contains all of the necessary hardware-specific information for the project. This includes any custom FPGA cores that the project may have. This comes from the Xilinx Platform Studio (XPS) tool. Instructions for using this tool to generate hardware platform information for the SDK is available in the Introduction to XPS exercise.
    • The "*_bsp" is a "Board Support Package" and it contains the software drivers for the peripherals contained in the hardware platform.
    • The "*_example" project is the top-level software project that you will modify to add a print of "Hello World" to the UART.

  10. Click the + button next to the "*_example" project. Then open the "src" folder by clicking the + button next to it. Finally, double click the "*_example.c" file to open it in the editor. At this point, you can look through this source code and see that it will print some messages to the terminal and will count upwards, displaying the current count on the hexadecimal displays on the WARP board and the LEDs.

  11. Right click on the "*_example" software project in the Project Explorer and click "Generate Linker Script." Here, we will assign instruction and data pieces of our code to various pieces of memory in our XPS hardware project. Assign the following:
    • The code sections to "ilmb_cntrl_dlmb_cntlr"
    • The data sections to "xps_bram_if_cntlr_0"
    • The heap and stack to "xps_bram_if_cntlr_1"

  12. Click "Generate" and then "Yes" to the message that says you are going to overwrite an existing linker script. The console will print messages and end with "Finished building: *_example.elf.elfcheck"

  13. Make sure your WARP hardware is powered on (fan should be running). Also make sure the WARP hardware is connected via JTAG (for programming) and connected via micro USB (for terminal communication) to your computer.

  14. Click the "Xilinx Tools" menu item and then "Program FPGA." Then click Program. This will load the hardware design onto the board. It will not load the software project.

  15. Open up a terminal emulator on your computer and configure it to accept your COM port with speed 57600 baud.

  16. The SDK is somewhat sensitive on what project has "focus" when you tell it to do something like load a design onto the board. Make sure the "*_example" project is highlighted. If it is not, click on it so that it will be.

  17. Click the menu item "Run" and then click "Run." A window will pop up asking you to select a way to run your "*_example" program. Click "Launch on Hardware" and then okay.

  18. The project is now running! You should see the LEDs and hexadecimal displays on the board incrementing twice a second. Furthermore, your terminal should be printing.

  19. Try to modify any of the prints in the code with your own custom strings. Click save. The SDK will automatically recompile the project. Download it again through the "run" menu.

  20. Also, find the usleep(250000) line inside the userio_example() function. This line is telling the processor to wait for half a second before incrementing the displays upwards. Replace this with usleep(500000) and you should see the board count half as fast.


Discussion

The purpose of this exercise was to take you through the whole process of writing software for an existing hardware project. In the System Generator Peripheral Export exercise, you will develop a custom FPGA peripheral core and control it via custom software.


Additional Questions and Feedback

If you have any additional questions about this exercise or other feedback, please post to the ​WARP Forums.




원문: http://warpproject.org/trac/wiki/GettingStarted/WARPv3/IntroToTools




WARP v3 Getting Started Exercises

Developing custom applications on WARP requires using design tools from Xilinx. These tools are sophisticated (i.e. they're complicated) and can be daunting to a new user. We've created some simple exercises that introduce the core tools most WARP users will use.


WARP에서 어떠한 사용자정의의 어플리케이션을 개발하기 위해서는 자일링스에서 제공하는 디자인툴을 사용해야 합니다. 이러한 툴은 매우 정교하지만 복잡하지는 않으며, 우리는 몇가지의 간단한 예제들을 제공합니다. 이 예제들은 핵심적인 툴들을 소개하면서 동시에 WARP 유저들이 빈번하게 사용하고 스터디 하게 될 것입니다.



Basic Design Structure


All WARP reference designs are built using the Xilinx Embedded Development Kit (EDK). The EDK enables construction of designs with both a processor, for running custom software, and custom hardware cores for real-time processing and connecting to off-chip hardware.


모든 WARP 레퍼런스 디자인은 자일링사의 내장 개발키드 (EDK)를 통해서 빌드됩니다. EDK는 사용자 정의 소프트웨어의 동작을 위한 절차와 사용자 정의형 하드웨어 기술들(실시간 처리 및 확장 하드웨어 연결) 등을 가능하게 해줍니다. 


그래서 EDK는 2가지의 주요 툴을 포함하는데, 

The EDK includes two primary tools:


- Xilinx Platform Studio (XPS): integrates the hardware cores for a design, including the MicroBlaze processor, memory, peripherals and interfaces for off-chip hardware

- Xilinx Software Development Kit (SDK): a full suite of software compilation and debugging tools for the MicroBlaze processor

자일링스 플랫폼 스튜디오 (XPS) 와 자일링스 소프트웨어 개발 키트 (SDK) 이다. 
XPS는 MCU와 메모리 주변 I/O 디자인을 위한 소트프웨어, SDK는 컴파일 및 디버깅 도구.


The basic structure of WARP reference designs is illustrated below.






WARP 레퍼런스 디자인의 기본적인 구조는 위의 그림과 같다.



The major components of this architecture are:


MicroBlaze soft processor: The MicroBlaze is a processor core implemented in the FPGA fabric and is supplied by Xilinx as part of the EDK. This processor replaces the hard PPC405 core familiar to users of WARP v1 and v2. WARP보드는 Virtex-6 FPGA 보드(마이크로 블레이즈를 사용하는)위에 올라가서 구동된다. 즉 상위 어플레케이션 단은 WARP (FPGA를 제어한다) 지만 실질적인 구현은 FPGA를 통해서 실행된다. 여기선 1세대 2세대 와프의 CPU 코어 패밀리에 대해서 간략히 이야기 한다.


Memories: the Virtex-6 FPGA includes a large number of "block RAMs", or internal RAM blocks which can be interconnected to form arbitrarily sized memory areas accessible to the MicroBlaze. These block RAMs are used for cache, instruction and data storage. 사용되는 메모리는 블락 타입의 램 또는 내부 메모리를 마이크로 블레이즈 CPU를 구동 및 돕기 위해서 사용된다. 블락 메모리는 주로 명령구문 처리와 데이터 저장/캐시 를 위해서 사용된다.


Processor bus: a standard bus connects the MicroBlaze to each core in the system. Current reference designs use a bus called PLB; future designs will migrate to the newer AXI standard. 프로세서 명령어들이 이동하는 통로인 버스는 시스템안에서 각각의 코어와 CPU에 연렬된다. 이러한 버스는 PLB로 불리우며 현재 데이터 및 명령등이 이동하는 통로로 사용된다.


Peripheral cores: a collection of peripheral cores compose every hardware design. Some are provided by Xilinx (like the UART and Ethernet MAC). We have designed others (like the WARP v3 user I/O and radio interface cores).병렬 코어들은 모든 하드웨어를 구성하는 디자인으로 사용됐다. 유아트나 이더넷 맥이 제공되었다.


Off-chip resources: these blocks represent the other hardware on WARP v3 besides the FPGA, like the radio interfaces, FTDI USB-UART transceiver and Marvell Ethernet PHYs Off 칩은 기존의 통합 MCU에서 많이 쓰던 온칩과는 반대로 칩안에 모든 연산 입출력 저장장치가 모두 들어있는 형태가 아니라 따로 구성되어있는 형태를 의미한다. 따라서 이들은 다른 보드에 올려져있고 이는 어떠한 연결된 버스에 의해서 제어되고 해당 버스는 USB형 변환된 유아트나 이더넷등으로 명령어가 이동하여 제어된다.


The MicroBlaze processor and connected cores are all implemented in the FPGA fabric using XPS. The output of the XPS flow is a "bitstream" with the fully synthesized and implemented hardware design. This bitstream integrates the MicroBlaze, the standard peripheral cores, your custom cores, I/O assignments and clock configurations. However the MicroBlaze instruction and data memories are blank in this bitstream.

The XPS-generated bitstream (and its associated hardware specification) is the starting point for an SDK project. The SDK compiles custom code for the MicroBlaze, along with drivers for the various cores included in the XPS hardware design. The output of this process is an "elf" file, the software binary ready for execution by the MicroBlaze. The elf binary is combined with the XPS-generated bitstream to program the FPGA with the final hardware+software design.


지금까지 기본적인 소프트웨어와 와프의 구조 및 제어방식에 대해서 설명하였다, 이제는 실질적인 연습코드를 사용하여 제어를 진행해보자. 앞서 이야기 했듯이 와프의 제어를 위해서는 자일링스에서 제공하는 개발툴이 필요하다. 이것이 자일링스 플랫폼 스튜디오 XPS이고, 이안에 자일링스 SDK가 설치되어서 와프와 연결되어 효과적으로 제어할 수가 있게 된다







원문: http://warpproject.org/trac/wiki/GettingStarted/WARPv3/Tools


본 페이지는, 두번째로 WARP를 잘 사용하기 위한 툴들과 장비들에 대해서 설명한다. 간단히 말하자면 WARP에서 사용되는 여러 칩셋들과 표준 프로토콜을 구동하기 위한 소프트웨어들에 대한 설명이다. 


    OS

We recommend Windows 7, 64-bit for all WARP development. That said, the Xilinx tools also support:

  • Red Hat Enterprise 5 Workstation
  • Red Hat Enterprise 4 Workstation
  • SUSE Linux Enterprise

So, these OS choices should also be okay. However, many of the other tools listed here rely on Windows, so appropriate replacements must be found.

OS는 윈도우 7을 추천한다.


    Xilinx Tools

A full installation of the Xilinx tools (System Edition), fulfilling all Xilinx licensing requirements, is necessary for building custom FPGA designs (i.e. hardware). An SDK-only installation (with less stringent licensing requirements) is also available and can be used if the user only wants to update software designs. For example, this reduced installation would be appropriate for customizing the MAC behavior of our 802.11 Reference Design.

커스톰 FPGA 디자인의 구성을 위해서 자일링스 full 인스톨은 필수적으로 요구된다.

하지만 SDK만을 설치해도 소프트웨어 디자인 업데이트가 가능하다. 예를들면, SDK만 설치해도 

802.11 레퍼런스 디자인의 MAC 동작을 사용자 정의형태로 구성 및 실행이 가능하다.   

    Matlab

Matlab is required for Xilinx System Generator and also for the WARPLab design flow.

매트랩도 자일링스 시스템의 생성을 위해서 요구된다. 



WARPLab은 싱글 또는 다중 안테나의 메세지 전송 및 컨트롤을 위한 빠른 프레임 워크로 사용될수 있다. (확장성을 가지는 장점) WARPLab 레퍼런스 디자인은 많은 통신물리계층의 구현 및 테스트를 가능토록 하는  프레임 워크입니다. 그리고 이 레퍼런스 디자인은 여러대의 WARP 노드를 이더넷 연결을 통하여 매트랩으로 제어 및 신호처리 할수 있도록 도와줍니다. 

The WARPLab reference design is an implementation of the WARPLab framework that allows many physical layer designs to be constructed and tested. The reference design combines MATLAB and FPGA implementations of the WARPLab framework modules that allow for easy extensibility and customization. While the reference design uses MATLAB to control nodes and perform signal processing, it also allows applications with strict latency requirements to move time critical processing in to the FPGA. The latest WARPLab 7 reference design runs on both WARP v2 and WARP v3 hardware. Users with WARP v1 hardware should use WARPLab 6.


WARPLab 7 is a complete rewrite of the original WARPLab framework. This rewrite was created and is maintained by engineers at ​Mango Communications.


**WARPLab 7에 대한 포스팅은 방대해서 나중에 따로 추가할 예정**

    TortoiseSVN

Any SVN client can be used, but we recommend TortoiseSVN if the user is using the Windows operating system. Instructions for downloading the WARP SVN repository are available here.

TortoiseSVN 의 사용을 권장합니다.

이 SVN이 무엇인지 알기 원한다면 아래의 링크를 열어보시기를 추천합니다.

https://tortoisesvn.net/about.html

TortoiseSVN은 GPL 기반으로 개발되었습니다. (비상업적 목적의 라이선스; 누구든지 수정 및 배포가능) 자유로운 개발 및 수정/ 업그레이드가 가능합니다. 





    PuTTY ¶

PuTTY is used to communicate with the WARP board via UART. Instructions for setting up PuTTY are here.

PuTTY는 PC-WARP간의 통신을 위해서 사용되는 통신 프로토콜입니다. 자세한 내용은 링크 "here" 를 눌러서 확인하세요. 


    Wireshark

Wireshark is a network protocol analyzer. It will show you, at the Ethernet link level, the packets entering and leaving your PC. This can be very useful for debugging interactions between your computer and a WARP node.

와이어샤크는 매우 유명한 네트워크 프로토콜 분석기이다. WARP는 이더넷 링크를 사용하기 때문에 PC와 WARP간의 디버깅을 위해서 유용하게 사용될 수 있다.

     WinDD

WinDD is a port of Unix's 'dd' command. This is used for writing SD cards with your hardware/software designs for running on WARP v3. This allows a WARP v3 node to load a design without downloading over JTAG (very useful for larger deployments). Details of this process are provided here.

SD카드를 구동하기 위한 소프트웨어.

     FTDI Drivers

WARP v3 uses an FTDI usb chip to provide UART connectivity. These drivers create a virtual COM port on your computer that PuTTY can open. More details are available in the user guide and USB UART howto.

     Visual C++ 2010 Express

The WARPLab design flow currently uses a user-compiled library for Matlab to speak to the boards using UDP. Visual C++ 2010 Express is required by Matlab to compile this library.

     Windows SDK

The Windows SDK is also required for compiling Mex functions in Matlab.



   Recommended Equipment for WARP

When using WARP, there are a couple of pieces of equipment that you may find useful to have in your lab space.

    Computer

  • The Xilinx design tools can be very demanding. Depending on how complex the design is that you are building, Xilinx estimates RAM usage for building for the XC6VLX240T FPGA that is in WARP v3 to be typically 3.7GB and as much as 6.5GB (source). Further discussion of system requirements are available here on page 53.
  • It is very useful to have a computer that contains two Network Interface Cards (NICs). For example, you may want one Ethernet card to accessing your computer network or internet, and another card to communicating to the WARP boards over Ethernet.

    효과적인 실험셋팅을 위하여 PC에 2개의 이더넷 카드가 있다면 "WARP-이더넷(PC)" "인터넷-이더넷(PC)"로 구성하여 인터넷사용과 동시에 WARP 연결이 가능하다. 

     Other Useful Accessories

  • Gigabit Ethernet Switch
  • Ethernet cables
  • Micro USB cables


원문: http://warpproject.org/trac/wiki/GettingStarted/WARPv3/Hardware



WARP는 총 3가지 버전이 존재합니다. 제가 구매한 모듈은 왼쪽의 v3이기에 앞으로 모든 내용은 v3을 따라 가겠습니다.




먼저 The Key Components of the Hardware 를 알아보고,  WARP v3 Hardware Users Guide 를 알아볼 예정입니다. 


The Key Components of the Hardware


Throughout the documentation in this wiki and in theforums, we will refer to different components of the hardware by certain terminology and acronyms. In this section, we list these components along with a high-level description of what each component is responsible for.


실제 제가 가진 WARP v3는 아래와 같이 생겼습니다. 





그리고 각 부분의 명칭은 아래와 같으며, 각 파트에 대한 간략한 설명도 되어있습니다.




  • User I/O: This collection of push buttons, LEDs, hexadecimal displays, dip switches, and debug header pins is used for interacting with the board. Designs can read values from the switches and push buttons and can write values to the displays and LEDs. The debug header can be used for any number of purposes, such as providing a convenient way for one WARP board to trigger the action of another board over a wire.

    입력/출력 포트는 일반적인 MCU와 같이 LED와 16진 디스플레이, 스위치, 디버거핀 등이 존재합니다. 디버거핀은 어떠한 액션을 실행하기 위한 트리거로써 사용되며 이는 아마 다른 문서에 자세한 설명이 존재 할것으로 보입니다.

  • Radio Interfaces A & B: These interfaces provide the radios that allow designs to communicate at the 2.4GHz and 5GHz bands. For each radio interface, digital I and Q values from the FPGA are taken through digital-to-analog converters and are delivered to the transceiver for upconversion (i.e. wireless transmission). Wireless reception follows the reciprocal process where I and Q analog streams are taken from the transceiver through analog-to-digital conversion and are then delivered to the FPGA. The interfaces are labeled "RF A" and "RF B" on the board and in our reference designs.

    WARP는 WLAN에 초점을 맞춘 플랫폼이기때문에, WiFi가 주로 사용하는 2,5 GHz 대역의 주파수를 사용하는 라디오 인터페이스가 있습니다. 기본적인 무선신호의 전송을 위한 기능을 FPGA를 사용하여 수행하며 (디지털->아날로그 변환과 변조) 송수신기를 분리하여 RF A와 B로 명명합니다.

  • SDRAM: This DDR3 SO-DIMM provides extra memory beyond the block RAM inside the FPGA. The WARP v3 kit ships with a pre-tested 2GB SO-DIMM.

    역시 좋은 플랫폼답게, SDRAM 메모리를 가지고 있습니다.

  • Device label: This label shows the FPGA device on the WARP v3 board. This device is used in a number of places during the development process (such as exporting a peripheral core from Xilinx System Generator), so this label is present for convenient lookup.


  • Virtex-6 FPGA: Under the fan, the FPGA serves as the central processing system for the WARP board.

    펜(fan)아래에는 본 FPGA보드의 핵심적인 CPU가 있습니다. 

  • FMC HPC Slot: The FPGA Mezzanine Card High Pin Count slot provides connectivity to an existing ecosystem of hardware as well as future WARP-specific modules.

    FPGA 중이층 핀 포트가 존재하지만, 여기에 대한 설명의 웹페이지가 유실되어서 아직은 본 포트의 존재를 모르겠습니다. 추후 업데이트 하겠습니다.

  • Serial #: This is the unique serial number for the WARP board. This number is also programmed into an EEPROM on the board prior to shipping, allowing software running on the hardware to read this information.

    WARP의 고유번호가 적혀있습니다. 해당번호는 모듈내부의 EEPROM에 새겨져서 배송되기 때문에 제품의 식별번호로 사용됩니다.


  • Ethernet A/B: The two 10/100/1000 Ethernet ports provide high-speed connectivity between the board and a wired network. The ports are labeled "ETH A" and "ETH B" on the WARP v3 board and in our reference designs.

    WARP는 2개의 고속 이더넷 포트를 제공합니다. 포트의 라벨은 ETH A와 V로 표기됩니다.

  • JTAG: The JTAG connector allows direct programming of the Virtex-6 FPGA using a Digilent or Xilinx JTAG cable.

    WARP는 FPGA 프로그래밍을 위한 JTAG 커넥터를 제공합니다.

  • SD Card: An alternative to programming the board over JTAG is to use the SD card. This allows non-volatile storage of programs that will automatically download and execute upon insertion of the SD card.


  • UART: The micro-USB connector on the board allows programs on the board to print messages to a terminal running on a computer.

    마이크로 USB 커넥터의 형태로 (보드-PC간의) UART통신도 사용이 가능합니다.

  • Power Switch: The power switch controls power to the board. The "off" position is where the switch is furthest away from the power jack. The "on" position is where the switch is closest to the power jack.

    파워스우치로 아래의 파워잭과 멀리 떨어진 위치일때가 OFF입니다. 가깝게 토글하면 

  • Power Jack: The power jack is where the 12V power supply that comes with the WARP hardware should be plugged in. Note: the power switch should be in the "off" position whenever the power plug is inserted or removed. This allows the circuitry controlled by the switch to properly sequence the power regulators on the board.

    WARP는 12V 전원 공급장치로 연결되며, 전원잭을 연결할때마다 파워 스위치는 OFF 상태에 위치해야합니다. 주의하십시요. WARP는 프로토타입으로 제공하는 플랫폼이기에 회로 쉽게 손상을 줄수있는 행동을 삼가하고 다룰때 신중해야합니다. 특히 정전기에 취약하기 때문에 접지 손목 스트랩과 같은 정전기 예방 솔루션을 사용하여서 작업하기 바랍니다. 

The Xilinx Virtex-6 FPGA 는 복잡한 프로그램 구동시 상당한 열을 발생하기 때문에 쿨러의 사용이 중요합니다. 아래의 그림과 같이 점퍼가 연결되어있어야 동작합니다.  




Each board will be shipped with this jumper connected. This jumper should not be removed. Verify that it is present before using the board.




Installing an FMC Module


WARP v3 includes a FMC HPC slot which can host an FMC module (a.k.a. FMC daughtercard). The FMC connector requires considerable force to mate and separate boards. It is essential you brace the WARP v3 board when mounting/removing FMC modules, to avoid flexing the PCB and breaking solder joints under the FMC connector and FPGA.


The video below shows the proper technique for connecting an FMC module. Do not simply press the FMC module down. Always prevent flexing the WARP board by pinching the FMC module and the WARP board together.





드디어 위에서 언급한 FMC HPC Slot의 쓰임에 대해서 나왔습니다. 동영상은 FMC 커넥터에 모듈을 연결하는 방법을 알려줍니다. 단순하게 FMC모듈을 눌러서는 안되고 동영상을 참조하여 장착하여 파손을 미리 방지 하기 바랍니다. 또한 FMC 모듈을 제거할때도 아래의 영상을 참조하여 적절한 방법으로 제거하기 바랍니다. 
(즉, 무작정 힘으로 하면 안되고, 보드의 튼튼한 부분 (예를들면 마운트) 을 붙잡고서 탈부착을 해야합니다.)




* 앞으로의 연구에 사용할 일이 있어서 WARP 플랫폼 공부에 대한 흔적을 깨작깨작 제 맘대로 남기고자 합니다. 

  제 생각대로 해석하고 진행하는 부분들이 많기 때문에 틀린부분이 다소 많을수 있습니다. 

  그냥 참고용으로만 봐 주세요. *



WARP를 알아가는 모든 내용들은 아래의 공식 홈페이지를 참조하여 진행합니다.


http://warpproject.org/trac/wiki/GettingStarted/WARPv3


아래는 WARP 시작을 위한 페이지입니다. 모든 페이지는 본문내용 + 네이게이터 BAR가(아래그림) 존재합니다. 


 <- 한눈에 잘 정리된 네비게이터를 잘 활용하면 좋습니다.



This "getting started" guide is intended as a resource for new users of WARP v3. The idea of this guide is to present the initial steps in order to get "up and running" with the hardware and to minimize the amount of time it takes a new user to start doing their own interesting research on the platform. This guide is broken up into four pieces. We highly recommend new users read all of them.


  1. Getting to Know the Hardware - A tour of the WARP v3 hardware and important information for proper handling of the board.
  2. Recommended Tools and Equipment - A list of the hardware and software tools we recommend for using the WARP hardware.
  3. Getting Started with the Xilinx tools - Some initial exercises using WARP with the Xilinx design tools.
  4. Additional Resources - Extra resources and reference material for users as they begin their own research on WARP.



저는 위의 순서번호에 맞게 차근차근 하나씩 스터디를 해 볼 예정입니다. (시작일 2016.05.02)

일단 무엇부터 시작할지 결정하기 위해서 전반적인 웹페이지 구성에대해서 알기 위하여 무작적 하나씩 다 들어가서 클릭해보았습니다. 그래서 대강 정리해보면 아래와 같은 구성으로 읽어보면 된다는 것을 알았습니다. 번호는 위의 WARP Start 페이지의 1~4번호를 참조하여 작성했습니다.



1. http://warpproject.org/trac/wiki/GettingStarted/WARPv3/Hardware

2. http://warpproject.org/trac/wiki/GettingStarted/WARPv3/Tools

3. http://warpproject.org/trac/wiki/GettingStarted/WARPv3/IntroToTools

 3-1. http://warpproject.org/trac/wiki/Exercises/13_4/IntroToSDK

 3-1-2. http://warpproject.org/trac/wiki/HardwareUsersGuides/WARPv3/TemplateProjects

 3-2. http://warpproject.org/trac/wiki/Exercises/13_4/IntroToXPS

 3-3. http://warpproject.org/trac/wiki/Exercises/13_4/SysGenExport

4. http://warpproject.org/trac/wiki/GettingStarted/WARPv3/Resources

 4-1. http://warpproject.org/trac/wiki/HardwareUsersGuides/WARPv3 

       : WARP user 메뉴얼에 대한 내용입니다. 

5. http://warpproject.org/trac/wiki/WARPLab

6. http://warpproject.org/trac/browser

7. http://warpproject.org/trac/wiki/WARPLab


8. 802.11 Reference Design: Changelog 
  
http://warpproject.org/trac/wiki/802.11




WARP Projects 는 Template Projects 말고도 802.11 Reference Design, WARPLab Reference Design, and OFDM Reference Design 에 대한 프로젝트 예제들을 포함하고 있습니다. 필자의 주 타겟은 WARP를 사용한 WALN 통신구성이기 때문에 subsection 8 이후 내용은 802.11 참조모델 디자인에 대해서 포스팅 할 예정입니다.  




복잡해보이지만, 결국 WARP를 잘 다루기 위해서는 먼저 하드웨어 대한 이해와 코드와 디버깅을 작성하는 소프트웨어 툴의 이해 그리고 프로젝트 제작으로 볼수가 있고, 이를 지원하기 위한 포럼과 예제 코드들이 존재한다는 것을 알수가 있습니다.


각각의 웹페이지들의 내용진술에서 이전 페이지들을 참조할수도 있는데, 이는 이전 내용들을 다방면으로 숙지해야만 이해가 가능하다는 의미입니다. 따라서 이리저리 페이지들을 옮겨다니며 공부를 해야하는 번거로움이 존재하기 때문에, 위와 같은 하나의 큰 줄기를 잡아놓는다면 현재까지의 공부진행상태가 어디까지인지 명확하게 파악하여 효율적으로 스터디를 진행 할수가 있습니다. 







Citation: http://users.jyu.fi/~timoh/TIES327/WPLS.pdf

*This contents refer to Dr. Zheng Chang's slidels. It does not utilize commercial uses. Thanks. *



Fundamentals of Physical Layer Security



최근 물리계층보안이라는 "Physical Layer Security (PLS)" 에 대한 연구가 관심을 많이 받고 있다. (이하 PLS로 부르겠다.)

이는 컴퓨터 네트워킹에서 주로 다루는 Open System Interconnect (OSI) model에서의 최하위 계층인 물리계층(PHY)(에서의 보안 달성을 연구하는 분야이다. 우리는 물리보안이라는 명명에서 흔한 인식의 오류를 접하는데, PLS는 Physical Layer네트워크에서 하드웨어 차원에서의 보안을 의미하는 것이 아니다. 오히려 통신이론과 같은 학문적인 분야에서의 PHY에서 다루는 다양한 기법들에 대한 해석과 고찰을 통하여 새로운 인식의 차원에서 보안을 달성하는 것이다.


PHY contains

–Definition of Hardware Specifications         –Encoding and Signaling

–Data Transmission and Reception            –Topology and Physical Network Design

ex) 핵심 기술들은 CDMA, OFDM, MIMO 등이 있다..


과거의 통신시스템에서 보안은 High Layer에서의 authentication, confidentiality, privacy 에 대한 이슈로 공개키나 비밀키, 암호화 기법 향상과 같은 방법으로 주로 발전해왔다. 하지만 지금은 정보이론과 신호처리, 암호학의 발전도가 높아짐에 따라 보안 시스템을 디자인 할때부터 물리계층의 불안전성에 대한 고려를 해야한다고 주장되고 있다. 예를 들면, Noise와 Fading은 Wireless Communications 에 있어서 하나의 장애요소로 보아왔지만, 정보이론의 관점에서 이들을 이용하여 Messages 를 잠재적인 도청자나 비인가 노드로부터 추가적인 보안키없이 숨길 수 있다고 제안되고 있다. 만약 위와 같은 방법으로 통신 Data Rate의 큰 희생없이 Cost-efficient way으로 PHY계층에서 보안을 달성할수 있다면 이는 PLS에 있어서 매우 의미있는 솔루션이 될 수 있다. 



앞서 설명한 예가 PLS에 대한 기본 예시가 되겠지만, 명확한 이해를 위해서 아래의 컨셉도를 살펴보자.

3개의 터미널이 존재하며, 왼쪽에서부터 송신노드 T1, 적법한 수신노드 T2, 도청자 T3 이다. 만약 T2와 T3 노드간의 채널이 T1에서 전송한 신호가 Fading이나 Path-loss 를 겪는 이유로 서로 채널상태가 다르다면, 그리고 T3의 채널만 심각한 성능저하를 겪는다면? 이를 통하여 도청노드 T3은 T1 노드가 송신하고자 하는 본래의 신호를 수신 및 복원할 수 가 없게 되고, 이를 통하여 우리는 보안을 달성할 수 있게 된다. 아래의 그림은 PLS에서 주로 사용되는 기본적인 도청채널모델을 보여준다.



                  그림. Wiretap Channel Model


따라서, PLS는 기존의 보안통신체계가 통신채널의 물리적인 실체를 고려하지 않았던 점을 고려함으로써, 통신장애요소로써 제거와 회피에만 신경을 쓴 Noise나 Fading 요소를 보안달성을 위한 긍정적인 요소로 이용한다. 따라서, PLS는 더욱 더 실질적인 통신 모델인 Wiretap channel model을 사용하여 (Main channel 과 Eavesdropper’s channel 를 구분하는 모델) 보안달성을 위한 솔루션을 연구한다.  (PLS 컨셉에 대한 핵심진술문장)




정보이론의 관점에서 위 그림은 Alice는 송신(TX)노드가 합적인 노드인 Bob에게 메세지 신호(M)을 전송하는 과정을 보여준다. 그림에서 Eve는 도청자로써 동일한 채널에서 송신 메세지를 수동적으로 도청하기만 한다. 본 모델에서, 공통적인 메세지인 M0는 Bob과 Eve모두에게 전달되지만 비밀메세지인 M1은 Bob에게만 전송된다. 이와 같이 PLS의 관점에서, 최대 목표는 비밀 메세지인 M1의 전송률 (Secrecy Capacity) 을 Maximize 하는 것이다. 

(가정사항)

1.Z should provide no information about M1 

2.Y can be decoded into M with negligibly small probability of error




아래의 수식은 위와 같은 시나리오, 가우시안 도청 채널 모델에서의 보안용량 수식을 보여준다.

Secrecy Capacity of Gaussian Wiretap Channel : 


지금까지 PLS에 대한 연구는 다양한 방법으로 시도 되고 있는데, 아래와 같이 몇가지로 분류 할수가 있다.

– Preprocessing Scheme

• Coding

• Key generation

• Artificial Noise Scheme

– Game Theoretic Scheme

– Signal Processing

– Cooperation Communications




* 추계적 과정의 의미는? 수학적으로 일부의 결과를 가지고 전체의 결과를 예상하여 계산하는 것.


위키에서 설명하는 Renewal theory의 의미는 아래와 같다. 


Renewal theory is the branch of probability theory that generalizes Poisson processes for arbitrary holding times. Applications include calculating the best strategy for replacing worn-out machinery in a factory and comparing the long-term benefits of different insurance policies.


Renewal theory는 푸아송과정을 모체로하는 확률이론의 한 분야이다. 본 이론이 쓰이는 예는, 공장에서 낡아빠진 장비의 교체 주기를 계산하거나, 전구의 수명이 다하는 것을 예상하여 아 주 긴주기에서의 교체주기를 예상하여 손이익을 계산하고자 할때 사용 될 수 있다. 


Introduction

A renewal process is a generalization of the Poisson process. In essence, the Poisson process is a continuous-time Markov process on the positive integers (usually starting at zero) which has independent identically distributed holding times at each integer i (exponentially distributed) before advancing (with probability 1) to the next integer:i+1. In the same informal spirit, we may define a renewal process to be the same thing, except that the holding times take on a more general distribution. (Note however that the independence and identical distribution (IID) property of the holding times is retained).



푸아송을 배울때 알게되는 Inter-arrival time 이라는 개념이 본  Renewal theory를 설명할 때 사용되었으므로 푸아송을 참고하기 바란다.  Renewal theory는 holding time을 제외한 더욱 일반적인 분포라고 볼수가 있다. 


Formal definition[edit]

Sample evolution of a renewal process with holding times Si and jump times Jn.

Let S_1 , S_2 , S_3 , S_4 , S_5, \ldots  be a sequence of positive independent identically distributed random variables such that

 0 < \mathbb{E}[S_i] < \infty.

We refer to the random variable S_i as the "ith" holding time. \mathbb{E}[S_i] is the expectation of S_i.

Define for each n > 0 :

 J_n = \sum_{i=1}^n S_i,

each J_n referred to as the "nth" jump time and the intervals

[J_n,J_{n+1}]

being called renewal intervals.

Then the random variable (X_t)_{t\geq0} given by

 X_t = \sum^{\infty}_{n=1} \mathbb{I}_{\{J_n \leq t\}}=\sup \left\{\, n: J_n \leq t\, \right\}

(where \mathbb{I} is the indicator function) represents the number of jumps that have occurred by time t, and is called a renewal process.


holding times S1~Sn은 각각 IID를 따르는 Random variable을 의미하며 그 평균값은 0보다 큰 양의 값이다.

그냥 간단히 말해서, 예를들어, 푸아송 분포에서 미리 선정한 arrival rate값에 따라 사건을 발생시켰을때의 각 사건들의 발생은 서로 IID하며 그때의 사건마다 주기는 J1~ Jn까지라고 할수가 있다.


*Holding time이란? 만약 어떤 공장에서 사용하나 기계들이 존재할 때, 다른 하나의 기계가 고장나기전 하나의 기계가 고장났을때, 두 고장시간 사이의 시간간격이라고 볼 수 있다. (기계의 고장=이벤트로 볼수가 있으므로, 두 이벤트가 발생할때, 그 두 이벤트 발생시간 사이의 시간간격을 말한다.)


만약 어느 특정한 사건 n시점에서의 사건으로가서 생각해보자. 

Jn은 n번째가 되기에 필요한 Si [1,n] 시간의 모든 합이라 할수있으며, 

Jn에서 그 다음 사건인 n+1 사이의 interval은 [Jn,Jn+1] 이라고 정의하며, 이를 renewal intervals라고 부른다. 


Random variable Xt 는 위와 같이 정의되는데, Jn이 시간 t 안에 포함된다면 그때의 최 상한선 값을 Xt라고 부르며

이를 renewal process라고 한다. 

Renewal-reward processes[edit]

Let W_1, W_2, \ldots be a sequence of IID random variables (rewards) satisfying

\mathbb{E}|W_i| < \infty.\,

Then the random variable

Y_t = \sum_{i=1}^{X_t}W_i

is called a renewal-reward process. Note that unlike the S_i, each W_i may take negative values as well as positive values.

The random variable Y_t depends on two sequences: the holding times S_1, S_2, \ldots and the rewards W_1, W_2, \ldots These two sequences need not be independent. In particular, W_i may be a function of S_i.



Y축 값 W1~Wn 값들은 IID 조건을 만족하며 유한할때,

이때 Random variable Yt는 1부터 Xt 까지의 모든 W값들의 합 으로 정의된다.

W는 -와 +값으로 표현이 가능하며, 이를테면 손해와 이득에 대한 표현이 가능한 변수이다. 

따라서 Wi = rewards 는 시간 t에서 연속적인 cost의 losses/gains의 총합을 말한다.



In probability theory and statistics, a sequence or other collection of random variables is independent and identically distributed (i.i.d.) if each random variable has the same probability distribution as the others and all are mutually independent.[1]

The abbreviation i.i.d. is particularly common in statistics (often as iid, sometimes written IID), where observations in a sample are often assumed to be effectively i.i.d. for the purposes of statistical inference. The assumption (or requirement) that observations be i.i.d. tends to simplify the underlying mathematics of many statistical methods (see mathematical statistics and statistical theory). However, in practical applications of statistical modeling the assumption may or may not be realistic. To test how realistic the assumption is on a given data set, the autocorrelation can be computed, lag plots drawn or turning point test performed.[2] The generalization of exchangeable random variables is often sufficient and more easily met.

The assumption is important in the classical form of the central limit theorem, which states that the probability distribution of the sum (or average) of i.i.d. variables with finite variance approaches a normal distribution.

Note that IID refers to sequences of random variables. "Independent and identically distributed" implies an element in the sequence is independent of the random variables that came before it. In this way, an IID sequence is different from a Markov sequence, where the probability distribution for the nth random variable is a function of the previous random variable in the sequence (for a first order Markov sequence). An IID sequence does not imply the probabilities for all elements of the sample space or event space must be the same.[3] For example, repeated throws of loaded dice will produce a sequence that is IID, despite the outcomes being biased.


줄여서 i.i.d.는 어떠한 랜덤 확률변수의 집합이 있을때 각각의 랜덤 확률변수들은 독립적이면서 (자기 사건의 발생의 영향이 다른 랜덤 확률변수에게 미치지 않을 때) 동일한 분포를 가질때를 의미한다.

예를들어서, 이항확률 분포 (성공 or 실패)를 가지는 동전던지기를 3회 실시한다고 가정하자.

각각의 시행은 이전이나 이후의 시행에 영향을 주지않는 독립시행이며 각각의 시행에서 나오는 동전의 앞,뒤에 대한 결과값의 분포는 동일한 이항확률 분포를 따르기 때문에 이는 i.i.d.라고 할수 있다.



만약 이를 코드화나 모델링화 시킨다면, 변수의 값을 선택할 때 정의된 동일한 확률분포에서 표본을 선택한다면 이를 i.i.d.한 확률 표본이 된다고 할수가 있다.





출처 : http://www.zdnet.co.kr/news/news_view.asp?artice_id=00000039135625


데이터 통신과 네트워크 디자인을 희망하는 사람이라면 누구나 알아야 하는 테크닉이 바로 큐잉 이론입니다. 전산학을 비롯한 거의 모든 컴퓨터 네트워크와 통신 분야의 디자이너들에게 큐잉은 시스템의 행동 특성을 빠르게 분석, 설계, 그리고 평가할 수 있게 해주는 주요한 툴로 사용되고 있습니다.

이번 연재에서는 이러한 큐잉을 대기와 처리의 관점에서 네트워크에 어떻게 적용되는지 설명하고 두 가지 예제를 함께 풀어보겠습니다. 

노드와 링크의 조합인 네트워크에는 데이터의 트래픽 조절과 혼잡 제어가 필요합니다. 트래픽 조절이란 고속도로에서의 교통상황처럼 데이터 송신 노드(source node)에서 목적 노드(destination node/sink node)로 데이터가 전송될 때 목적 노드 쪽에서 데이터를 너무 빠르게 처리하거나(자원 낭비) 너무 느리게 처리(낮은 효율)하지 않도록 하는 것을 말합니다. 

혼잡 제어는 2개 이상의 노드로부터 링크를 통해 데이터를 전송할 때 데이터 충돌을 피하거나 해결하기 위한 방법입니다. 이상의 방법들은 높은 데이터 전송 효율을 목표로 하는 네트워크엔 꼭 필요한 요소이며 네트워크 디자이너들은 이러한 트래픽 관리를 통해 현 상태와 앞으로의 네트워크 상태를 가늠할 수 있어야 합니다. 

이와 같은 데이터 통신과 네트워크 디자인을 희망하는 사람이라면 누구나 알아야 하는 테크닉이 바로 큐잉 이론(Queuing Theory)입니다. 독자들은 아마도 큐(queue)라는 용어를 자료구조 관련 서적에서 대기 행렬이라는 용어로 접해보았을 것입니다.

다시 이해를 돕자면 큐는 먼저 들어온 데이터가 먼저 처리되는(First In First Out) 데이터의 저장 형태라고 할 수 있습니다. 이러한 것은 큐잉의 기본 개념에 불과합니다. 전산학을 비롯한 거의 모든 컴퓨터 네트워크와 통신 분야의 디자이너들에게 큐잉은 시스템의 행동 특성을 빠르게 분석, 설계, 그리고 평가할 수 있게 해주는 주요한 툴로 사용되고 있습니다. 이번 글에서는 이러한 큐잉을 대기(queue)와 처리(serve)의 관점에서 네트워크에 어떻게 적용되는지 설명하고 예제를 풀어 봄으로써 독자 여러분의 이해를 돕겠습니다. 

얼마 전에 다이수케 테라사와의 ‘초밥왕’이라는 만화를 보았습니다. 주인공 세키구치 쇼타가 초일류 초밥을 준비하기 위하여 재료들을 배우고 준비하는 마음가짐을 보고 기본기의 중요성을 다시 한번 마음에 되새기는 계기가 되었습니다. 큐잉 이론과 네트워크 모델링에 관한 이야기를 하기에 앞서 독자들이 이미 알고 있을 내용이겠지만 잠시 확률에 관한 기본기를 살펴보며 확률에 대한 기억을 되새겨 보겠습니다. 

확률 되돌아보기
세 개의 빨간 구슬과 두 개의 파란 구슬이 담겨있는 항아리에서 빨간 구슬을 뽑을 사건을 시행할 때 사건의 결과가 목적을 만족시킬 확률을 묻던 산수책의 문제 기억납니까? 아마 대부분의 독자들은 이러한 문제들을 초등학교 때부터 지금까지 서적과 수업, 생활 속에서 많이 접해 보았으리라 생각합니다. 

확률은 17세기 파스칼과 페르마라는 수학자간의 도박에 관한 이야기 속에서 학문적으로 체계화되었다고 합니다. 또한 확률은 복잡한 통계적 계산에 대한 정확한 처리라는 컴퓨터 발전의 기본 목표이기도 하였습니다. 이러한 확률은 네트워크의 기본 설계에 녹아 있습니다.

예를 들면 대개의 디자이너들이 데이터 전송과 수신시의 성공과 실패를 확률로 구분하고 디자인의 제한 조건으로 둡니다. 여러분이 사용하고 있는 모든 네트워크 장치들은 이러한 것들을 모두 만족시켜 준 것들이라고 할 수 있습니다. 이렇게 네트워크 속에서 확률의 예를 찾자면 몇 권의 책, 며칠의 시간으로도 아마 모자랄 것입니다. 

확률의 기본 정의
공명(axioms)이라는 것은 수학에서 무증명 명제(無證明 命題)라고 불리는 것으로, 기초를 세우기 위해 받아들이는 수학적 단정(assertion)이라고 할 수 있습니다. 일단 이러한 공명이 받아들여지면 우리는 법칙을 증명할 수 있는 것입니다. 

어떠한 사건 Ω는 각각의 실험에서 발생한 사건의 모든 집합을 말하며 표본 공간(Sample Space, 그래서 S로 나타내기도 하지요)라고 합니다. 합집합 A∪B(A union B)는 사건 A와 B가 각각 혹은 동시에 일어날 수 있는 모든 사건의 집합을 말합니다. A∩B(A intersection B)는 사건 A와 B가 동시에 일어나는 사건을 말합니다. 만약에 A∩B={}라고 하면 A와 B는 동시에 일어나는 사건이 없어 서로 배반 관계(mutually exclusive)라고 합니다.

확률은 어떤 사건이 일어나는 확실성의 정도를 수량적으로 나타낸 것입니다. 주사위의 예를 들면 주사위를 던진 후 하늘을 향하는 숫자를 하나의 사건이라고 한다면 모두 6개의 사건이 일어날 수 있습니다. 주사위가 균등하게 모든 이벤트를 발생한다고 가정하면 3보다 작거나 짝수인 사건(1, 2, 4, 6)이 나올 확률은 Pr[{짝수}∪{3보다 작은 수}] = Pr[짝수] + Pr[3보다 작은 수] - Pr[{짝수}∩{3보다 작은 수}] = 1/2 + 1/3 - 1/6 = 2/3가 될 것입니다. 다음과 같이 확률의 공명을 정리해 보았습니다.


확률 변수
확률 변수(random variable)는 쉽게 설명하면 확률을 나타내는 변수를 말합니다. 다시 말해서 표본 공간에서 일어나게 될 모든 이벤트들을 숫자로 나타내는 것입니다. 예를 들면 동전을 세 번 던져서 순서에 상관없이 앞면이 한번이라도 나올 확률은 Pr{뒤,뒤,뒤}=1/8을 제외한 Pr{앞,뒤,뒤}= 3/8, Pr{앞,앞,뒤}=3/8, Pr{앞,앞,앞}=1/8입니다. 여기서 우리가 다시 앞면이 나온 횟수를 X로 나타내면 Pr{X=0}=1/8, Pr{X=1}=3/8, Pr{X=2}=3/8, Pr{X=3}=1/8로 나타낼 수 있습니다. 

확률 변수 X는 다음과 같이 밀도 함수(density function)와 분포 함수(distribution function)에 사용될 수 있습니다. 특히 확률 변수가 셀 수 없는 무한한 값에 대해서는 연속적(continuous)이라고 하며 반대의 경우에는 이산형(discrete)이라고 부릅니다. 


분포 함수란 일어날 사건의 범위에 대한 확률의 분포를 나타낸 것입니다. 반면 밀도 함수는 이러한 분포 함수를 나타낼 수 있는 함수를 정의하며 밀도 함수를 앞의 식과 같이 모든 범위에 대하여 적분을 하면 1이 됩니다. 

기대 값(expected value)이란 확률 변수 X를 사용하여 가 확률 현상의 결과가 수 값으로 나타날 경우 사건 시행의 결과로 기대되는 수 값의 크기를 말합니다. 예를 들면 10번의 데이터 통신을 하여 3번의 에러가 나는 네트워크에서 5번의 통신을 하면 몇 번의 에러가 발생하는가에 대한 기대 값 혹은 평균 값이라고 할 수 있습니다. 이러한 기대 값은 E[X] 혹은 μ(뮤)로 나타냅니다. 


포아송 분포
확률 통계에는 정규 분포, 이항 분포, 지수 분포 등과 같이 다양한 분포가 있습니다. 이 중 포아송 분포(Poisson Distribution)는 발생 확률이 작은 사건을 대량적으로 확대하여 그 발생 횟수가 만드는 분포를 확률적으로 정의한 것을 말합니다.

포아송 분포는 전화통화 시간, 전화통신 성공 횟수, 텔넷과 ftp 세션의 연결 등을 예상하여 디자인에 사용하기 적합한 분포입니다. 또한 이번 연재의 주제인 큐잉 이론에 가장 쉽게 사용되는 분포이기도 합니다. <그림 1>은 대표적인 포아송 분포의 그래프입니다. λ는 패킷이 도착하는 비율을 나타내며 다음의 식과 같은 분포 함수를 가지고 있습니다. 



네트워크 모델링에서 큐잉 이론
잠시 여러분이 2명의 주문 담당 직원이 있는 패스트푸드 음식점의 사장이라고 가정하겠습니다. 여러분의 음식점에는 오전 11시부터 오후 1시 30분까지는 평상시 2배의 손님이 들어와 주문을 하기까지 평균 15분의 대기 시간을 가져야 합니다. 이 문제를 해결하기 위해서 무엇을 가장 먼저 생각하겠습니까? 

우선 고객이 기다려야 하는 15분이라는 문제를 해결해야 겠지요. 그럼 몇 명의 주문담당 직원을 추가적으로 배치해야 효과를 얻을 수 있을까요? 2명? 3명? 이러한 문제에 대한 해답을 주는 것이 큐잉 이론입니다. 앞서 언급한 것처럼 큐잉 이론은 비단 컴퓨터 모델링뿐만 아니라 수많은 산업에서 모델링에 사용되고 있는 툴입니다. 네트워크에서는 데이터를 고객으로 생각하고 주문 담당을 서버로 생각하여 효율적인 디자인을 하는 데 많이 사용되고 있습니다. 큐잉 이론에 기저하여 디자인한 분석적 모델을 프로그래밍하고 실행한다면 아주 훌륭한 네트워크 시뮬레이션 모델이 될 것입니다. 

큐잉 모델


<그림 2>는 가장 간단한 큐잉 모델입니다. λ는 큐잉 시스템에 도착하는 패킷의 도착 시간의 비율(패킷/sec)입니다. 예를 들면 라우터에 도착하는 패킷이나 전화 교환기에 도착하는 전화, 그리고 독자들의 패스트푸드 가게에 도착하는 손님들의 시간 비율이 될 것입니다. 만약 어떤 특정한 시간에 패킷이 도착했을 때 대기열에서 서비스를 기다리고 있는 패킷이 없다면 그 손님은 줄을 서지 않고 서비스를 받을 것입니다.

w는 대기열에서 서비스를 기다리고 있는 패킷의 평균 개수입니다. Tw는 대기열에서 기다려야 하는 평균 시간입니다. 여기서 평균이라 함은 패킷이 기다리지 않는 시간까지 함께 포함합니다. Ts는 서버가 패킷에게 서비스를 제공하는 시간을 말합니다.

ρ(로)는 서비스 유틸라이제이션(utilization)입니다. 이것은 서버가 일을 하고 있는 비율입니다. 예를 들어 서버 유틸라이제이션이 1인 경우는 서버가 100% 일을 하고 있다는 의미로 도착한 패킷들은 서버에서 서비스를 제공받을 수 없으며 큐에서 대기해야 합니다. 

이러한 경우 디자이너들은 두 가지 선택을 할 수 있습니다. 대기열을 늘리거나 서버를 증설하거나 말이죠(들어오는 손님을 막을 수는 없겠죠?) 대기열을 늘리면 대기열에 들어오지 못하던 패킷들을 기다리게 할 수는 있지만 여전히 기다리는 패킷들의 불평은 해결할 수 없을 것입니다.

서버를 증설한다면 좀 더 원활한 서비스를 제공할 수 있겠지만 기존의 서버 유틸라이제이션이 낮아지면 전체적인 시스템 측면에서 낮은 효율의 원인이 될 수 있을 것입니다. 이러한 점이 엔지니어들이 디자인할 때 항상 고려해야 하는 트레이드 오프(trade-off)라는 것입니다. 

독자들의 서버가 100%(ρ=1)로 일을 하고 있다면 큐잉 시스템을 나가는 패킷의 시간 비율은 도착하는 패킷의 시간 비율과 상관없이 항상 일정할 것입니다. 이러한 제한적 환경에서 시스템이 최대로 해결할 수 있는 도착하는 패킷의 시간 비율은 이론적으로 다음과 같이 나타낼 수 있습니다. 


하나의 패킷, m이 도착했다고 가정합니다. m의 앞에는 평균적으로 w개의 패킷이 대기열에서 서비스를 받을 순서를 기다리고 있을 것입니다. m이 대기열을 떠나 서비스를 받으러 가면 대기열에는 다시 w개의 패킷이 기다리고 있을 것입니다. 

그리고 Tw는 평균 대기 시간이 됩니다. 그렇기 때문에 λ의 비율로 도착한 패킷을 이용하면 w=λTw라는 것을 알 수 있습니다. 비슷한 방법으로 우리는 r=λTr임을 알 수 있습니다. 이것이 바로 리틀의 이론(Little's Formula)입니다. 리틀의 이론을 좀 더 응용하면 ρ=λTs, r=w+ρ을 구해 낼 수 있습니다.

독자들의 상사는 하나 혹은 둘의 제한(패킷 서비스 비율이나 서버 유틸라이제이션)을 주고 네트워크를 디자인하기를 원하고 있습니다. 어떻게 디자인하겠습니까? 자 그럼 이제 가장 효율적인 네트워크 디자인을 위한 연장(tool)을 다시 챙겨보도록 하겠습니다. 일반적인 큐잉 시스템에서 디자이너들에게 다음과 같은 입력(input)이 주어집니다. 


[1] 도착 비율(패킷/sec)
[2] 서비스 타임
[3] 서버의 개수


그리고 다음의 결과를 요구합니다. 


[1] 대기열 속의 패킷 개수
[2] 대기하는 패킷의 시간
[3] 큐 시스템 전체의 패킷 개수
[4] 전체 시간


가장 중요한 가정은 도착하는 패킷의 비율(arrival packet rate)에 관한 것입니다. 대개의 경우 성공적으로 도착하는 패킷과 패킷 사이의 시간(inter-arrival times)을 exponential하다고 가정하는데 이것은 패킷의 도착 비율 λ가 포아송 분포를 따른다는 말입니다. 이해를 돕자면 패킷이 무작위로 독립적(Independent)으로 도착한다는 말입니다.

또한 서비스 시간은 exponential하다고 합니다. 이러한 가정을 간단하게 켄돌(Kendall)의 표기법을 따서 M/M/1(엠엠원)이라고 합니다(1은 서버의 개수). M/M/1의 경우는 가장 간단한 큐잉 모델이라고 할 수 있습니다. 다음은 이러한 경우의 파라미터에 대한 대응 공식을 나타내고 있습니다. 


그럼 실제 예제를 통해 큐잉 이론을 네트워크에 적용해 보도록 하겠습니다. 

<예제 1>
여러분이 디자인하게 될 랜은 100명의 사용자가 연결될 것입니다. 그리고 한 개의 서버를 사용해야 합니다. 사용자의 요청에 따른 서버의 평균 서비스 타임은 0.6초입니다. 피크 타임에는 1분에 20명의 사용자가 사용 요청을 할 것입니다. 평균 대응 시간은 얼마입니까?

<풀이 1>
우선 큐잉 모델을 M/M/1로 가정합니다. 그리고 랜 상황에서 일어나는 지연(delay)은 충분히 무시할 만한 수준이라고 가정하고 디자인합니다. 예제로부터 Ts=0.6임을 알아냅니다.


<풀이 1>을 통해서 서버 요청에 따른 평균 응대 시간이 0.75초임을 알게 되었습니다. 

<예제 2>
독자의 상사가 다음의 질문을 물어 보았다고 가정합니다. 다른 네트워크로 연결된 랜으로 패킷들이 보내어지고 있습니다. 모든 패킷들은 랜에 연결된 라우터를 지나서 네트워크로 보내져야만 합니다.

패킷들은 평균 5/sec으로 라우터에 도착합니다. 그리고 평균 패킷의 길이는 144옥텟(octets)이며 패킷 길이는 지수 분포를 따릅니다. 라우터로부터 네트워크까지의 라인 스피드는 9600bps입니다. 라우터에 도착한 패킷이 처리되어 나갈 때까지의 평균 시간은 얼마입니까? 또한 대기열에 있는 패킷을 포함하여 얼마나 많은 패킷이 평균적으로 라우터에 머물게 됩니까?

<풀이 2>
큐잉 모델은 M/M/1이기 때문에 우리는 공식을 사용할 수가 있습니다. 문제로부터 우리는 λ=5패킷/sec임을 알고 있습니다.


<풀이 2>를 통해서 우리는 라우터 안에 평균적으로 1.5개의 패킷이 있으며 도착해서 서비스를 받고 라우터를 나가는 평균 시간이 0.3초임을 알 수 있었습니다

옥석같은 좋은 글이라서 공유합니다.


출처: http://www.zdnet.co.kr/news/news_view.asp?artice_id=00000039134745

(지디넷코리아)


네트워크 디자이너가 되기 위한 첫 번째 시간에는 기본적인 인터네트워킹 디자인을 위한 네트워크의 기본 개념과 모델, 데이터 전송 방법 등을 설명하겠습니다. 노드와 링크가 조합을 이루고 그 조합을 통해 메시지가 전해지는 과정을 하나하나 자세하게 살펴보겠습니다. 

네트워크는 노드(Nodes)와 링크(Link)의 조합입니다. 이러한 네트워크를 통해서 다양한 형태의 메시지를 전송하는 것이 통신(Communication)입니다. 네트워크 디자이너들은 이러한 조합을 통하여 전송 효율(Efficiency)을 최대한 높이는 데이터 전송망을 설계하는 사람들입니다.

그렇다면 네트워크 디자이너들은 무엇을 어떻게 이용하여 네트워크를 설계할까요? 그들은 보다 효율적인 네트워크 설계를 위하여 상황에 맞는 다양한 연장을 사용합니다. 때로는 수학적인 툴을 사용하기도 하고 때로는 소프트웨어 시뮬레이션과 같은 방법을 사용하여 시각적인 구현과 평가를 하기도 합니다. 

독자들은 그동안 어떤 방법으로 네트워크를 구성하고 평가해 보았습니까? 이제 막 네트워크에 입문하는 중이라면 어떤 방법을 상상해 봤습니까? 저는 3회에 걸친 연재를 통하여 네트워크 디자이너가 특정한 업체의 디바이스를 얼마나 유효적절하게 사용하기 위한 사람이라는 정의가 매우 소극적인 것이라는 것을 얘기하고 싶습니다. 네트워크 디자이너는 소극적인 정의에 더하여 필요에 따라 알맞은 형태의 네트워크 디바이스들을 창조적으로 디자인할 수 있는 사람이어야 합니다.

랜카드, 라우터, 브리지(Bridge) 등의 네트워크 장치들을 필요에 따라 설계하고 만들어 낼 수 있는 네트워크 디자이너가 많아야지만 대한민국이 진정한 IT 강국으로서의 면모를 세계 속에 나타낼 수 있을 것입니다. 필자 또한 이러한 목표를 더욱 견고히 하는 계기로 삼고 네트워크에 관한 입문 이야기를 써내려가려고 합니다. 독자 여러분들도 ‘why’와 ‘how’를 생각하면서 읽어준다면 좋겠습니다. 

생활 속의 네트워크
여러분은 현실에서 본인만의 네트워크를 설계해 본 적이 있습니까? 필자는 오늘 오전 제품 계약에 관한 업무를 수행하기 위해서 전세계에 지사가 있는 유명 택배회사를 통하여 중요한 서류를 미국 텍사스 달라스에 위치한 장비회사로 보냈습니다. 우선 작성한 서류를 본인이 다니는 회사 봉투에 넣고 택배회사 직원에게 전화로 연락하였습니다. 택배회사 직원이 사무실을 찾아와 준비해온 택배회사 봉투에 서류를 넣고 보내는 사람과 받는 사람의 주소를 기재하였습니다. 마지막으로 택배회사의 해외서비스 분류 방법에 기준하여 봉투에 고유 코드를 붙였습니다.

저는 이틀 이내에 제 서류가 장비회사에 전달되어야 한다고 요청하였고 택배회사 직원은 이 모든 것에 대한 가격을 책정해 지불하여 계약서류를 목적지로 보내는 일을 마무리하였습니다. 자 그럼 이 서류가 이제 어떻게 미국 텍사스 달라스에 위치한 회사로 전달될지 상상해 보겠습니까?

서류는 서울 사무소를 거쳐서 인천공항 지역에 위치한 택배회사의 분류창고로 옮겨 질 것입니다. 제가 이틀이라는 시간적인 제한을 요청하였기 때문에 제 서류는 특별하게 관리되어 아메리카 지역 구분으로 나뉘어있는 방으로 보내어 질 것입니다. 그리고 다시 미국 분류 상자 안으로 옮겨져 가장 빠른 비행기 편으로 미국 LA의 택배회사 창고에 도착할 것입니다.

다시 필자의 서류는 텍사스를 향하는 비행기로 옮겨지고 달라스에서 기다리고 있는 직원에 의해 마지막으로 세부 분류되어 필자의 회사와 계약을 체결하려고 기다리고 있는 업무 담당자의 손에 전해 질 것입니다. 택배회사는 담당자의 수신확인서를 이메일을 통해 저에게 전달해 줄 것입니다. 여러분도 이와 같은 경험을 해본 적이 있나요?

오늘 저는 보내는 사람(Source Node)과 받는 사람(Destination Node)이 노드가 되어 시간과 비용을 고려한 해외 택배 서비스(link)를 통하여 네트워크를 경험해본 것입니다. 이렇게 네트워크는 우리 생활 속에 있으며 또한 긴 역사를 가지고 있습니다. 단지 요즘 우리가 봇물처럼 터지는 노드와 노드의 전기적인 연결에 노출되어 이제서야 네트워크 세상 속에 사는 것처럼 느낄 뿐입니다. 마치 혁명과 같이 세상의 매일을 변화시키는 컴퓨터 노드와 노드의 링크, 네트워크. 짧은 인터넷의 역사와 함께 되짚어 보겠습니다.

인터넷의 역사
인터넷은 데이터 통신과 컴퓨터 네트워킹을 위한 수많은 새로운 통신규약(Protocol)과 기술들을 출현시켰습니다. 이러한 출현은 이제 너무나 일반적인 용어가 되어버린 월드 와이드 웹의 촉매 역할로 인해 그야말로 폭발적인 위력을 발휘하고 있습니다. 병상에 갇혀있는 환자에게 세상으로 연결되는 창을 주었으며 우주정복을 꿈꾸는 시골 소년에게 미국 항공 우주국(NASA)의 화성 프로젝트에 참여하는 우주인과의 대화를 가능하게 하였습니다.

인터넷의 기원은 거슬러 올라가 1969년 미국에서 시작되었던 알파넷(ARPANET) 과제에서 비롯됩니다. 알파넷은 미 국방성(Department of Defense)의 ‘Advanced Research Projects Agency’라는 이름으로 패킷 스위칭 기법을 이용하여 겨우 4개의 노드를 단지 50kbps로 연결하여 전송하는 네트워크의 설계와 구현으로 시작하였습니다(여러분은 3회의 연재에서 4개 혹은 그 이상의 노드를 연결하는 시뮬레이션을 해보게 될 것입니다).

이러한 알파넷은 텔넷과 FTP, 그리고 네트워크의 첫 번째 킬러 app이었던 전자메일을 통해 크게 발전하는 계기가 되었고 미국의 기관, 학교, 국가단체를 거쳐 세계로 연구와 개발이 확장되었고 드디어는 TCP/IP(1980), WWW(1991), Mosaic(1992), OC-3(155Mbps) Backbone(1996) 등 지금은 정확하게 셀 수도 없는 웹 페이지들이 인터넷에 올려져 있습니다. 


<그림 1>은 필자의 은사였던 헬미(Helmy) 교수의 강의 노트에서 따 온 것입니다. 왼쪽 그림은 100개의 노드로 이루어진 네트워크망을 디자인 해본 그림입니다. 오른쪽 그림은 자동 시뮬레이션 프로그램을 이용해서 왼쪽 디자인의 100개의 노드를 확장하여 5만여개의 노드가 연결되어 있는 인터넷 지도를 나타내 본 것입니다. 어떤 느낌이 드나요?

이 두 그림으로 인터넷이 얼마나 짧은 시간에 크게 확대되었는지 실감할 수 있을 것입니다. 이 모든 것이 처음에 말한 대로 두 개의 노드와 하나의 링크로 시작되었던 것입니다. 자 그럼 이제 두개의 노드와 그 링크가 어떠한 구조를 각각 가지고 있으며 어떠한 방법으로 데이터를 주고받고 있는지 좀 더 자세히 살펴보도록 하겠습니다. 

네트워크 모델
일반적으로 통신은 애플리케이션, 컴퓨터, 네트워크의 세 개의 에이전트를 사용하고 있습니다. 애플리케이션이라고 하면 우리가 매일 사용하는 전자메일, 파일 다운로드 등과 같은 것을 말합니다. 이러한 애플리케이션들은 컴퓨터에서 수행됩니다. 또한 컴퓨터들은 네트워크에 연결되어서 서로 간에 네트워크를 통해 데이터를 보내기도 하고 받기도 하는 것입니다.

다양한 형태의 메시지를 노드와 링크로 주고받는 네트워크는 어떠한 방법으로 보내는 사람으로부터 전하는 사람을 지나서 받는 사람에게 전해질까요? 네트워크는 이러한 문제를 해결하기 위해 공통된 프로토콜을 정의하여 기능을 부가하고 컴퓨터 통신을 위한 연구 개발에 표준으로 삼기로 했습니다.

그렇다면 프로토콜이란 무엇일까요? 프로토콜의 사전적 정의는 협안, 조약안이지만 컴퓨터 통신에서는 2대 이상의 컴퓨터 통신을 위한 통신 규약이라고 말하고 있습니다. 사용하는 언어가 다른 사람들이 모여 높은 탑을 쌓는 공사를 하고 있을 때 표준으로 사용하는 언어(Protocol)와 단계(Procedure)가 없다면 어렵게 쌓아가고 있던 탑이 무너지고 말겠죠.

많은 기업과 학교, 그리고 과학, 공학, 국가단체들은 효율성과 사업모델, 이해관계를 놓고 오랫동안의 연구개발과 협의를 통하여 컴퓨터 통신의 표준을 정하고 있습니다. 이러한 방법으로 정형화된 컴퓨터 네트워크 프로토콜 중에 ISO(International Organization for Standardization)에서 개발된 OSI(Open System Interconnection) 모델이 있습니다. 하지만 7개의 계층으로 구성된 OSI 모델은 각 층간의 기능이 유사한 면이 있다는 단점이 있어 좀 더 명확한 기능과 단순한 계층을 갖고 있는 TCP/IP 프로토콜의 출현하게 되었습니다. 


OSI 모델
1978년 제작 초기 당시에만 해도 많은 OSI 디자이너들은 컴퓨터 네트워크에 이 모델이 가장 널리 사용되리라는 데 의문을 갖지 않았습니다. 결과적으로는 OSI 모델은 TCP/IP에 의해서 대체되고 말았지만 이러한 시도를 통해서 많은 유용한 프로토콜들이 개발되었고 7개의 계층으로 나뉘어 설계되었던 기능들은 다른 형태지만 아직도 같은 기능으로 존재하고 있습니다.

<그림 2>의 왼쪽 모델은 7개의 계층으로 구성된 OSI 모델입니다. 흔히 물리 계층(Physical Layer)에서 네트워크 계층(Network Layer)까지를 하위 계층 프로토콜이라고 하며 트랜스미션 계층(Transmission Layer)에서 애플리케이션 계층(Application Layer)까지를 상위 계층 프로토콜이라고 합니다.

7개의 계층 중에서 가장 위에 위치한 애플리케이션 계층은 사용자들이 OSI 환경을 액세스할 수 있도록 해줍니다. 그러기 위해 애플리케이션 계층은 사용자가 통신에 사용할 프로토콜 타입을 결정합니다. 여러 가지 애플리케이션에 따라 파일전송, 데이터베이스 접근, 전자메일 서비스에 맞는 프로토콜을 제공합니다. 그 다음 단계인 프리젠테이션 계층(Presentation Layer)은 애플리케이션 계층으로부터 전해진 다양한 데이터 타입을 전송 형식과 무관한 구문(syntax)의 형태로 변환하고 암호화(Encryption)하는 기능을 수행합니다. 

세션 계층(Session Layer)은 데이터와 서비스를 교환하려는 애플리케이션과 프로세스(Process)간의 접속 설정, 관리, 종료에 관한 제어(Control)를 하는 계층입니다. 전송 계층(Transport Layer)은 데이터 전달과 접속에 신뢰성을 주는 곳으로써 데이터를 보내는 곳과 받는 곳 사이에서 에러(error)를 복구하고 흐름을 제어하는 기능을 수행합니다.

이러한 기능은 다음에 소개될 네트워크 계층과 유사하지만, 전자는 통신이 이루어지는 처음과 끝(End-to-End) 시스템 간의 데이터 전송에 관한 이야기이고 후자는 하나의 전송 링크에 관한 관리 기능을 제공하는 데 차이가 있습니다.

이러한 관리 기능을 수행하는 네트워크 계층은 경로의 선택과 중계 기능을 추가로 수행하고 있습니다. 또한 데이터의 전달 기능을 향상시키기 위해서 데이터의 크기를 알맞게 나누는 일을 수행합니다. 데이터 링크 계층(Data Link Layer)은 물리적인 링크간에 신뢰성 있는 정보를 제공하며 정보를 전송하기 위해서 데이터를 블록이나 프레임 단위의 일정한 크기로 전송하고 구분하는 기능을 수행합니다. 이렇게 나눠진 프레임은 각각 순차적인 번호를 부여 받게 되어 목적지에 도착했을 때 에러 검사와 순서화 기능에 사용됩니다.

물리 계층은 비트 레벨의 통신에 관심이 있는 계층입니다. 최하위의 계층으로써 가장 궂은 일을 한다고 볼 수도 있겠죠. 물리 계층은 전송 매체 사이의 인터페이스를 정의하여 데이터 링크 계층과의 사이에 기계적이고 전기적인 기능에 문제가 있는지를 살펴봅니다. 

TCP/IP 모델
TCP/IP(Transmission Control Protocol/Internet Protocol) 모델은 인터넷이 개발되었던 알파넷 연구에서 비롯되었습니다. 이러한 배경은 TCP/IP가 인터넷 통신에 가장 적합하게 설계된 이유 중 하나입니다. TCP/IP는 보내는 사람에서 받는 사람까지의 플로우(flow)를 제어할 수 있으며 TCP와 IP 두 개의 프로토콜로 나눠서 통신이 가능하도록 합니다. 무엇보다 가장 큰 장점은 TCP/IP가 간단한 구조를 가지고 OSI의 7개 계층의 역할을 아무 무리 없이 수행해 낸다는 것이지요.

TCP/IP는 이러한 기능을 수행할 수 있는 프로토콜의 집합이라고 볼 수 있습니다. 우리가 많이 들어 알고 있는 프로토콜 이름의 대부분이 바로 TCP/IP의 애플리케이션 계층이라고 할 수 있습니다. 웹 서비스에 사용되는 HTTP를 비롯해서 일반 사용자가 다른 원격 호스트에 원격 로그인하여 자신의 컴퓨터처럼 사용할 수 있는 기능을 제공하는 텔넷, 파일 전송에 사용되는 FTP, 그리고 전자 우편 전송에 사용되는 SMTP(Simple Mail Transfer Protocol) 등을 예로 들 수 있습니다. 이러한 다양한 애플리케이션 프로토콜들은 사용자에게 다양한 애플리케이션을 수행할 수 있도록 도와주는 역할을 합니다.

전송 계층은 호스트 투 호스트(Host-to-Host) 계층이라고도 불리며 출발지에서 보내진 데이터가 목적지에 도착했을 때 출발 당시의 순서대로 정렬될 수 있도록 하는 일처럼 데이터가 송신자에게서 수신자에게까지 신뢰성있게 전송되고 받을 수 있는 역할을 합니다. TCP는 이러한 기능을 수행하는 가장 대표적인 프로토콜입니다.

전송 계층에는 TCP와 함께 UDP(User Defined Protocol)라는 또 다른 프로토콜이 있는데 UDP는 TCP와 달리 신뢰성을 보장할 수 없는 프로토콜입니다 (Unreliable/Connectionless). 따라서 신뢰성이 필요 없는 데이터를 전송할 때는 IP 위에 UDP를 올려 사용하여 데이터의 크기를 줄일 수 있는 장점도 있습니다. TCP와 UDP는 오류 검사를 이용하여 모두 체크섬(Checksum)이라는 방법을 사용하는데, 체크섬은 간단한 2진 덧셈을 통하여 오류를 검색하는 방법입니다.

인터넷 계층(Internet Layer)에서는 인터넷 프로토콜(IP)을 사용하여 인터넷 라우팅과 전송에 사용되는 인터넷 주소를 메시지에 포함하여 송수신지를 결정하게 됩니다. OSI 모델에서는 네트워크 계층이 이러한 기능을 수행합니다. 2004년 현재까지 아직 주소 할당에 32비트를 제공하는 IPv4가 TCP/IP 프로토콜이 주되게 사용되고 있으나 수많은 무선 장치의 등장과 인터넷 사용자 증가로 인한 한계성을 인식하고 주소할당에 128비트를 제공하는 IPv6로의 전환을 준비하고 있습니다.

네트워크 액세스 계층(Network Access Layer)은 서버(Server)와 워크스테이션(Workstation)의 End System, 추가되는 네트워크를 통한 데이터 전송, 그리고 전송 매체에 관심을 가지고 있습니다. 이 계층에서는 사용되는 서비스의 우선순위를 관리하기도 하고 데이터 전달에 관한 주소를 제공하기도 합니다. 물리 계층은 OSI 모델의 그것과 유사한 기능을 수행합니다. 물리적인 수준의 데이터 전송 장치들과 전송 장비 혹은 네트워크간의 인터페이스를 제공하며 전송매체에 관한 특성, 전송 속도 등을 지정합니다. 

네트워크로 메시지 보내기
이제 TCP/IP 모델을 이용하여 어떻게 데이터를 소스에서 목적지까지 보내는지 송신자(Sender), 라우터(Router), 수신자(Receiver)의 단계로 구분해서 살펴보도록 하겠습니다. 우리가 살펴볼 예제는 하나의 라우터가 ATM으로 구성된 장거리 네트워크(WAN)에 연결되어 있어 보내는 쪽(서버)과 받는 쪽(사용자 컴퓨터)을 연결하고 있다고 가정하고 있습니다. 그리고 지금 막 사용자가 마우스를 이용하여 브라우저에서 임의의 아이콘을 클릭해서 파일전송이나 웹페이지의 데이터를 요구했다고 가정합니다. 그럼 서버(송신자)가 라우터를 통해 사용자 컴퓨터에게 어떻게 응답(Response)하여 메시지를 수신자에게 보내는지 살펴보도록 하겠습니다. 

TCP/IP: 송신자 메시지 보내기


사용자 컴퓨터(수신자)로부터 전해진 메시지 요구로 인하여 서버쪽(송신자) 애플리케이션 계층은 전송할 데이터 블록과 프로토콜을 결정합니다. 만약 전자메일에 관한 요구였다면 SMTP를, 파일이었다면 FTP를 말이죠. 이 단계에서 데이터 송신과 수신 쪽에서 교환하는 데이터의 형태에 대한 동의를 하게 되며 필요하다면 데이터는 목적지에서 압축 또는 암호화(Data Encryption)되거나 보기 쉬운 형태로 변형됩니다.

TCP가 접속을 허가하기로 약속하면 데이터를 세그먼트(segment)라고 불리는 데이터 블록으로 만듭니다. 각각의 세그먼트에는 헤더(header)가 포함되어 있어 전송 에러 검출과 함께 도착지에서 데이터의 순서를 알 수 있도록 해줍니다. 

또한 각각의 TCP 세그먼트는 목적지로의 전송시 데이터 손실 등의 경우를 대비해 목적지로부터 데이터가 잘 도착했다는 메시지(acknowledgment)가 도착하기 전까지 복사되어 보관되었다가 확인 메시지가 도착하면 복사본을 지웁니다. 다시 세그먼트는 IP 계층으로 전달되고 IP는 각각의 세그먼트들을 데이터그램(datagram) 단위로 나누어 네트워크 전송에 맞는 사이즈로 재정비합니다. 이때 각각의 데이터 그램은 목적지 주소, 프레임 검사 순서, 제어 정보 등을 가지게 되며 이러한 기능을 프래그먼팅(fragmenting)이라고 합니다.

우리는 첫 번째 네트워크가 서버가 ATM WAN에 연결되어 있다고 가정하고 있기 때문에 이러한 프래그먼트는 다시 ATM 헤더를 포함하여 ATM 네트워크에 전송에 적합한 형태(ATM cell)로 변하게 됩니다. 이러한 Cell은 비트로 표현되어 네트워크 미디엄(network medium)을 통해 라우터로 보내지게 됩니다.

TCP/IP: 메시지 라우터 지나가기


라우터는 서로 다른 분리된 네트워크를 연결해 주는 기능을 제공하는 장치입니다. 라우터는 데이터의 목적지 정보가 담겨 있는 헤더를 이용해서 네트워크 상의 가장 효율적인 경로를 선택 패킷을 목적지로 보냅니다. 또한 라우터는 흐름제어 역할과 네트워크 관리 기능을 수행함으로 네트워크의 꼭 필요한 구성 요소입니다. <그림 4>는 ATM Cell의 형태로 전달된 데이터가 물리 계층에 비트 형태로 전달되는 것을 시작으로 보여줍니다.

ATM 계층은 전달된 데이터의 ATM Cell 헤더를 제거하고 헤더를 통해서 라우터에 데이터가 도착하기까지 아무런 에러가 없었는지 살펴봅니다. 또한 접속 번호를 통해서 발신지를 알 수 있습니다. ATM Cell 헤더가 제거된 메시지는 IP 계층에서 IP 헤더를 검사하게 됩니다. 검사 후 IP는 어떠한 경로로 메시지를 목적지에 보낼 것인가를 확정하게 됩니다.

이러한 경로는 목적지와 다시 다른 라우터가 될 수 있지만 우리는 본 예제에서 하나의 라우터를 사용하는 관계로 IP는 데이터그램을 곧바로 목적지로 보내 줄 것입니다. 데이터그램은 LLC(Logical Link Control)로 보내어져 다시 LLC 헤더가 추가되고 LLC PDU(Protocol Data Unit)라고 불리는 세분화된 블록 단위로 사용됩니다. 이 헤더는 주소와 순서에 관한 정보가 포함되어 있습니다. 다시 LLC PDU는 MAC(Media Access Control)으로 보내지고, 여기서 MAC 프레임을 구성하게 됩니다.

특이하게도 이 과정에서는 MAC 헤더와 트레일러(trailer)가 LLC PDU의 시작과 끝에 붙는데 헤더에는 주소 정보가 트레일러에는 에러검출을 위한 프레임 체크 시퀀스 정보가 저장됩니다. 여태껏 우리가 살펴본 중 가장 긴 형태의 메시지는 이제 마지막 목적지를 향하게 됩니다. 

TCP/IP: 수신자가 메시지 받기
드디어 목적지에 메시지가 도착했지만 아직 이곳에서도 몇 번의 과정이 기다리고 있습니다. 물리 계층을 통해 비트 프레임의 형태로 전달된 시그널은 MAC 계층에서 헤더와 트레일러를 제거하고 트레일러를 이용해서 에러 검출을 하게 됩니다. 그리고 LLC 계층에서는 헤더를 제거하고 데이터 흐름과 에러 조절을 위해 순서를 조절하게 됩니다. IP 계층에서도 헤더를 제거하고 프레임 검사와 다른 제어정보가 전달되면서 IP 데이터그램의 형태가 됩니다.

TCP 계층 단에서는 다시 한번 헤더 삭제와 함께 흐름 조절이 이루어집니다. 또한 프레임을 체크하게 됩니다. TCP 단에서는 전송지에서 세그먼트 형태로 나뉘어졌던 사용자 데이터를 다시 블록으로 결합한 후에 애플리케이션 단으로 전달하게 됩니다. 마지막으로 메시지가 애플리케이션 단으로 전달되면서 압축을 풀거나(decompression), 암호화를 해제하는(decryption) 등의 기능을 수행하여 데이터가 적합한 파일과 목적지로 바르게 전달되도록 합니다. 


데이터 전송 방식, 유니캐스트 VS 멀티캐스트
네트워크의 데이터의 전송 방식은 송신자와 수신자의 입장에서 데이터를 전송하는 방식에 따라 유니캐스트(Unicast)와 멀티캐스트(Multicast)로 나누어집니다. 유니케스트는 네트워크상에서 단일 송신자와 단일 수신자 간의 데이터 전송 방식을 지칭합니다. <그림 7>을 보면 송신자는 목적지 R1, R2, R3과 R4에 독립된 각각의 데이터를 전송합니다.

이러한 방식을 특별하게 멀티플 유니캐스트(Multiple Unicast)라고 하는데, 예전 네트워크를 구성하던 노드 대 노드의 일 대 일(One to One) 연결에 적합한 데이터 전송 방식입니다. 만약 <그림 7>과 같이 데이터의 송신지가 많은 경우에는 특별한 목적이 아니라면 모두에게 데이터를 보내기 위해 각각의 수신자에게 여러 번 데이터를 보내야 하는 유니캐스트를 사용하지 않는 것이 네트워크의 효율을 높일 수 있을 것입니다. 하지만 요즘의 인터넷 통신은 일 대 일 연결이 보편화되어 있고 라우터가 유니캐스트 방식만을 지원하기 때문에 유니캐스트 방식이 가장 많이 사용되고 있습니다. 


멀티캐스트 전송 방식은 하나의 전송자가 하나 이상의 송신자들에게 한 번에 데이터를 전송하는 방식으로 다 대 다(Multipoint to Multipoint) 통신을 위한 방법입니다. <그림 7>의 멀티캐스트를 살펴보면, 전송자는 송신자들에게 동시에 같은 데이터를 전송하는 것을 알 수 있습니다.

이러한 멀티캐스트 전송 방법은 같은 LAN에 연결되어 있는 그룹 사용자들에게 한 번에 메시지를 전송하는 데 적합한 방식입니다. 실제로 이러한 방식은 다중 접속이 되어 있는 인터넷 전화와 영상통신에 많이 응용됩니다. 이러한 전송 방식의 구분은 연재의 마지막 시간에 다룰 NS-NAM으로 해볼 네트워크 시뮬레이션을 이해하는 데 도움이 될 것입니다. 

서비스의 속도와 질의 향상을 위해
인터넷과 인터넷 프로토콜은 최선형(best-effort)을 제공하기 위해 디자인되었습니다. 다시 말해서 인터넷과 IP 기반 네트워크는 네트워크상의 패킷을 각각 동일하게 취급하여 목적지로 전송한다는 뜻입니다. 이러한 기본 정의 하에서 네트워크상에 트래픽이 늘고 혼잡(congestion)이 생기기 시작하면 패킷 전송은 점차로 늦어지게 됩니다. 혼잡이 더 크게 발생되면 심지어는 패킷 들을 드랍하여 전송 데이터에 손실을 주게 됩니다. 때문에 네트워크 디자이너에게 Traffic과 Congestion Control은 무엇보다 더 중요한 요소가 됩니다.

평가와 분석 단계에서도 중요성은 계속 인식되어야 합니다. QoS란 높은 데이터 비율(data rate)을 가지고 정확하게 데이터를 전달하는 것을 말합니다. 물론 컴퓨터통신에서 전달에 관한 신뢰성은 매우 중요한 요소입니다. 이러한 QoS를 나타내는 지표로써 흔히 작업 처리량(Throughput), 지연(delay), 패킷 손실(packet loss) 등을 사용합니다.

이러한 요소들은 실생활의 예를 통해서도 쉽게 그 중요성을 인식할 수 있습니다. 늘 지연되곤 하는 네트워크를 이용하는 외환딜러는 그렇지 않은 딜러들과의 경쟁에서 항상 불이익을 받게 될 것입니다. 또 음성이나 비디오 파일 등의 실시간 트래픽(real time traffic)에서 패킷 손실이 많이 일어난다면 우리는 자연스러운 음성과 화면을 볼 수가 없겠지요. 다음 연재에서는 이러한 문제들을 ‘큐잉 이론과 네트워크 디자인’에 관한 주제로 독자 여러분과 함께 살펴보려고 합니다. @

+ Recent posts