기본 설정 값
Mac/802_11 set CWMin_         31
Mac/802_11 set CWMax_         1023
Mac/802_11 set SlotTime_      0.000020        ;# 20us
Mac/802_11 set SIFS_          0.000010        ;# 10us
Mac/802_11 set PreambleLength_        144             ;# 144 bit
Mac/802_11 set PLCPHeaderLength_      48              ;# 48 bits
Mac/802_11 set PLCPDataRate_  1.0e6           ;# 1Mbps
Mac/802_11 set RTSThreshold_  0               ;# bytes
Mac/802_11 set ShortRetryLimit_       7               ;# retransmittions
Mac/802_11 set LongRetryLimit_        4               ;# retransmissions

임의 설정 값
Mac/802_11 set basiccRate_ 1Mb
Mac/802_11 set dataRate_ 11Mb
Mac/802_11 set RTSThreshold_ 500


런타임 로그 값
rts frame size = 44
rts frame tx time = 0.000352

cts frame size = 38
cts frame tx time = 0.000304

ack frame size = 38
ack frame tx time = 0.000304

TCP Data(MSS=1460)
data packet size = 1520
data frame size = 1578
data frame tx time = 0.001322

TCP ACK
data packet size = 40
data frame size = 98
data frame tx time = 0.000246


그 동안 뺑이치면서 계산한 건 뭐냐....
저작자 표시
Posted by 배트
TAG 802.11, ns2

네트워크 시뮬레이터

Network Simulators

 

키워드: Networks simulators, 네트워크 시뮬레이터, NS-2, NS2, OPNET, GloMoSim, TOSSIM, NetSim

 

네트워크 시뮬레이터(Network Simulators)

네트워크 시뮬레이터는 실제 동작을 관찰하지 않고, 네트워크의 동작과 영향을 예측하고 분석하기 위한 장치 또는 소프트웨어다. 엔지니어는 이를 이용해서 DDoS와 같이 실제 일어나기 어려운 상황을 구성하거나, 대량의 센서 노드와 같이 비싼 실험 환경을 에뮬레이트하여 그 영향을 예측한다. 특히 새로운 네트워크 프로토콜을 테스트하거나, 기존의 프로토콜에 대한 환경의 영향을 테스트하는데 주로 사용한다.

현상을 검증하는 데는 수학적 분석, 실제 측정, 시뮬레이션 세 가지 접근 방식이 있다. 이 방식을 평가하는 기준은 현실성, 비용, 구현의 세 가지를 든다. 시뮬레이션은 이 세 가지 기준으로 봤을 때, 세 가지 방식 중에서 평균적으로는 가장 우수하다. 또한 시뮬레이션 방식은 연속 시간, 이산 시간, 이산 이벤트 방식으로 나눌 수 있는데, 대부분의 시뮬레이터가 이산시간 이벤트 방식을 이용한다.

일반적인 네트워크 시뮬레이터는 넓은 범위의 네트워크 기술을 포함하고, 노드와 링크를 기본 단위로 하여 복잡한 환경을 구축한다. 계층적인 네트워크 환경을 구성할 수도 있고, PC, 허브, 브릿지, 라우터, 무선 노드, 광케이블, 동축케이블 등의 구성요소를 사용할 수도 있다. 시뮬레이터의 구성요소는 일반적으로 스케쥴러, 프로토콜, 노드, 링크, 패킷으로 이루어져 작은 네트워크부터 대형 네트워크까지 유연하게 구성할 수 있다. 일부 시뮬레이터는 초대형 네트워크 환경을 지원하기도 하고, 어떤 시뮬레이터는 특정 네트워크 장비를 CPU 명령어 단위까지 에뮬레이션하여 아주 미세한 관찰을 가능하게 해주기도 한다.

 

네트워크 시뮬레이터의 종류

l  NS-2 (The Network Simulator -2)
NS-2는 연구용으로 개발된 오픈소스 시뮬레이터다. 현재 연구용으로는 가장 많이 사용되고 있으며, 다양한 분야의 인력들의 참여로 인해 성능과 품질이 우수하고, 다양한 기능을 지원한다. 이산 이벤트 시뮬레이션 방식을 사용하였고, 유무선을 모두 지원하고, 패킷 단위로 동작하며, 필요한 대부분의 프로토콜 레이어를 구현하였다. 오픈소스답게 기능과 네트워크 구성요소들이 철저히 모듈화되어 있어 일반 사용자도 기능을 수정하거나 새로운 프로토콜을 추가하기가 쉽다. 현재 NS-3 버전까지 나와있지만 아직까지 훨씬 많은 사람들이 NS-2를 사용하고 있다. 유닉스 환경의 대부분의 OS 플랫폼을 지원하고, 시뮬레이션 환경 구성에는 TCL이라는 스크립트 언어를 사용하며, NAM(NS AniMator) XGraph 같은 시각화 도구를 제공한다.

l  OPNET
OPNET은 최초의 상업 네트워크 시뮬레이터로써, 현재도 상용 분야에서 가장 높은 점유율을 차지하고 있다. OPNET은 객체 지향적 모델링을 지원하며, 프로세스 모델링, 노드 모델링, 장비 모델링, 네트워크 모델링의 흐름을 따른다. 또한 잘 짜여진 FSM(Finite State Machine)은 세부단계까지 제어가 가능해 거의 모든 상황을 재현할 수 있다. OPNET은 기능 제약 또는 분야에 따라 여러 버전이 존재하며, 자유도가 높은 버전은 모델링 할 수 있는 구성요소들의 소스 코드를 완전히 개방하여 사용자의 자유도를 최대로 보장하고 있다. 또한 현존하는 거의 모든 프로토콜을 지원하며, 표준장비의 라이브러리를 제공하고, 시뮬레이션 환경 개발에서 분석까지의 전 과정을 GUI 도구를 통해서 편리하게 할 수 있다. 이는 대부분의 윈도우 플랫폼과 솔라리스 플랫폼을 지원한다.

l  GloMoSim
GloMoSim은 대형 시뮬레이션 환경을 위해 개발되었다. 이는 병렬 컴퓨팅을 위한 이산 이벤트 컴퓨팅 시뮬레이터인 Parsec을 이용하여 개발하였다. 다른 시뮬레이터와 유사하게 OSI 계층에 따라 프로토콜을 모듈화하여 개발하였으며, 현재는 무선 네트워크만 지원한다.

l  TOSSIM
TOSSIM(TinyOS Simulator)은 센서 네트워크에 사용하는 못(Mote) OS TinyOS를 에뮬레이션하여 어플리케이션의 동작과 하드웨어의 영향을 분석하는 소프트웨어이다. 이는 엄밀한 네트워크 시뮬레이터의 범주에서는 벗어난다. 이는 OS CPU에 내리는 명령 하나까지 에뮬레이션 하기 때문에 매우 정밀한 분석이 가능하다.

l  NetSim
NetSim은 분석 도구가 아니라 네트워크 설정을 학습하기 위한 시뮬레이션 소프트웨어이다. 사용자와 상호작용을 위해 시뮬레이션은 실시간으로 이루어진다. 전송 프로토콜, MAC 프로토콜, 라우팅 프로토콜은 물론이고 스위치, 라우터, AP 등의 장비를 시뮬레이션할 수 있다.

 

참고자료

OPNET Modeler and Ns-2: Comparing the Accuracy Of Network Simulators for Packet-Level Analysis using a Network Testbed

http://privatewww.essex.ac.uk/~fleum/weas.pdf

 

The Network Simulator - ns-2

http://www.isi.edu/nsnam/ns/

 

OPNET Technologies

http://www.opnet.com/

 

GloMoSim

http://pcl.cs.ucla.edu/projects/glomosim/

 

TOSSIM

http://docs.tinyos.net/index.php/TOSSIM

저작자 표시
Posted by 배트
$defaultRNG seed 99

이 문장 하나로 간단히 시뮬레이션 전체의 랜덤 시드를 변경할 수 있다.

$defaultRNG seed 0

시드 값을 0으로 주면, 현재 시간을 시드 값으로 사용한다.
저작자 표시
Posted by 배트
TAG ns2
잊을까봐 기록한다아아

컴파일
    $ gcc -g <source_file> -o <exec_file>
gdb 실행
    $ gdb <source_file>
gdb 종료
    (gdb) quit
도움말
    (gdb) help

프로그램 실행
    (gdb) run <arg> "<arg>"…
프로그램 종료
    (gdb) kill

프로그램 중지
    CTRL+C
프로그램 속행 (재시작인가?)
    (gdb) continue
라인단위 트레이스
    (gdb) next
    (gdb) step
    (gdb) finish
변수 확인
    (gdb) print <var>
변수 변경
    (gdb) set <var> = <value>
    or (gdb) set var <var> = <value>
함수 호출 (실행 스레드가 있을텐데 어떻게?)
    (gdb) call <func_name>(<args>)

콜스택 보기
    (gdb) backtrace
콜스택에서 프레임 선택
    (gdb) frame <frame_num>
콜스택 정보, 변수, 인자 보기
    (gdb) info frame
    (gdb) info locals
    (gdb) info args

브레이크포인트 설정
    (gdb) break <line_num>
    or (gdb) break <source_file>:<line_num>
    or (gdb) break < func_name >
    or (gdb) break <class>::<func_proto>
임시 브레이크 (어떻게 쓰는 건지...)
    (gdb) tbreak
브레이크포인트 보기
    (gdb) info breakpoints
브레이크포인터 비활성화
    (gdb) disable <breakpnt_num>
브레이크포인터 일정 회수 건너뛰기
    (gdb) ignore <breakpnt_num> <number>

변수의 쓰기 Watchpoint 설정 (변수의 스코프에서 브레이크 중)
    (gdb) watch <var>
변수의 읽기 Watchpoint 설정 (변수의 스코프에서 브레이크 중)
    (gdb) rwatch <var>
변수의 읽기/쓰기 Watchpoint 설정 (변수의 스코프에서 브레이크 중)
    (gdb) awatch <var>
Watchpoint 비활성화
    (gdb) disable <watchpoint_num>
    (Watchpoint는 info breakpoints 명령어로 확인 가능)

메모리 확인
    (gdb) x/<FTM> [<address> or <symbol>]
    (<FTM> in s(string), c(character), 4c(4 characters), t(32bits binaries), 3x(24bytes in hex)
레지스터 확인
    (gdb) info registers
크래시 후, 코어 파일 디버그
    $ gdb <coredumped_file>
    (gdb) core core
명령어 단위 트레이스
    (gdb) nexti
    (gdb) stepi
함수 디스어셈블
    (gdb) disassemble [<address> or <symbol>]


참고자료: RMS's gdb Debugger Tutorial, http://www.unknownroad.com/rtfm/gdbtut/gdbtoc.html
저작자 표시
Posted by 배트
RTS/CTS 없음

Average CW

15

blocks

SlotTime

20

us

SIFS

10

us

DIFS

50

us

Preamamble

144

bit

PLCPHeader

48

bit

PLCPRate

1000000

bps

FCSLen

32

bit

BasicRate

1000000

bps

DataRate

11000000

bps

TCPSegmentSize

1460

Bytes

TCPDataFrameSize

1520

Bytes

TCPAckFrameSize

68

Bytes

MacAckFrameSize

28

Bytes

PropagationDelay

2

us





 

TCP Data

DIFS

Backoff

Preamble

PLCP

Data

FCS

Delay

Total

time(us)

50.00

300.00

144.00

48.00

1105.45

2.91

2.00

1652.36

 

MAC Ack

SIFS

 

Preamble

PLCP

Data

FCS

Delay

Total

time(us)

10.00

 

144.00

48.00

20.36

2.91

2.00

227.27

 

TCP Ack(us)

DIFS

Backoff

Preamble

PLCP

Data

FCS

Delay

Total

time(us)

50.00

300.00

144.00

48.00

0.00

2.91

2.00

546.91



TCP 프레임 하나 전송에 걸리는 시간 = TCP_Data + TCP_Ack + 2 * MAC_Ack = 2644 us
별다른 지연이 없다고 할 때,TCP에서 측정한 Goodput = 4417549 bps = 539.25 KB/s

생각보다 적게 나온다. 계산 잘못했나?ㅋㅋ
저작자 표시
Posted by 배트
IPC(Inter Process Communication)
    스레드 간에 데이터를 주고받기 위한 기술들.
    스레드는 다른 프로세스, 또는 다른 PC에 위치할 수 있다.

    분류: message Passing, Synchronization, Shared Memory, RPC(Remote Process Calls)
    목적: 자료 공유, 연산 속도 향상, 모듈성, 편의성

기법
    File
        달리 할 말이 없네
    Signal
        POSIX 시스템에서 주로 사용하는 IPC. 프로세스에 비동기 Notification을 날리는 방식.
        시그널 발생하면 OS는 프로세스의 동작을 멈추고 시그널 핸들러를 실행.
        디폴트 시그널 핸들러를 실행하거나 프로세스가 정의하고 등록한 핸들러를 실행할 수도 있음.
        문제점 정리는 귀찮아서 스킵.
        사용자 정의 시그널 핸들러 (다른 방식도 있는데...써본 적도 없고 귀찮기도 하고)
            void my_handler (int signum) { ... }
            void main() {
               ...
               signal( SIGBREAK, SIG_IGN );
               if( signal( SIGTERM, my_handler )== SIG_IGN )
                   signal( SIGTERM, SIG_IGN );
               ...
            }

    Socket
        TCP/UDP, IP를 위해 소켓을 쓰기도 하지만…소켓은 원래 IPC를 목적으로 만들어졌음.
        로컬 IPC로 쓰려면 socket() 함수의 첫 번째 인자(domain)를 PF_UNIX로.

    Message Queue
    Pipe
        POSIX 시스템 지원

    Named Pipe
        POSIX, Window 시스템 지원

    Semaphore
        POSIX 시스템 지원

    Shared Memory
        POSIX 시스템 지원

    Message Passing
        병렬프로세스, 분산컴퓨팅과 같은 분야에 주로 사용. 물론 직접 만져본 적이 없다.

    Memory-Mapped File


Windows IPC
    Clipboard
    COM
    Data Copy
    DDE
    File Mapping
    Mailslots
    Pipes
    RPC
    Windows Sockets


Threads Synchronization
    윈도우에서 제공하는 스레드 동기화를 방법으로는-
    이벤트, 크리티컬 섹션(단일프로세스), 뮤텍스(멀티프로세스), 세마포어가 있음.
저작자 표시
Posted by 배트

키워드: PageRank, 페이지랭크, Search Engine, 검색엔진, Link Analysis, 링크분석, Random Surfer Model, 랜덤서퍼모델

 

페이지랭크

페이지랭크(PageRank)는 스탠포드 대학교의 래리 페이지와 세르게이 브린 개발하여 학계에 발표한 후에, 구글(Google) 검색 엔진에 사용된 링크 분석 알고리즘이다. 검색된 문서는, 이 페이지랭크를 이용해 정렬되어 사용자에게 보여진다. 이는 웹에 있는 모든 객체에 연결된 하이퍼링크, 참조 빈도, 중요도를 분석하여 각 객체에 가중치를 부여하는 방식으로, 검색어의 출현 빈도에 따라 문서에 중요도를 부여하는 기존의 알고리즘들과 구분된다. 여기서 각 객체는 E라고 표기하고, 객체에 부여된 가중치는 ‘E의 페이지랭크로 부르며, PR(E)로 표기한다. 페이지랭크는 보통 주기적으로 갱신되며, 저장되어있는 PR(E) 값이 사용자 쿼리 시간에 참조된다.

페이지랭크에서 링크를 분석하고 각 객체의 중요도를 평가하는 방법은 다른 객체에서의 참조를 기반으로 한다. 객체 B가 객체 A를 중요하다고 판단하고, 객체 A를 중요하다고 여기는 객체가 많을수록 전체 인터넷에서 객체 A의 중요도는 점점 커진다. 이 중요도는 객체간 하이퍼링크로 판단을 할 수 있다. , 유입 링크(Incoming Link)가 많은 객체일수록 더 중요한 객체인 것이다.

 

알고리즘

페이지랭크는 사용자가 특정 웹 페이지에 있는 하이퍼링크를 임의로 클릭하여 이동한다고 가정한다. 이를 랜덤 서퍼 모델(Random Surfer Model)이라고 한다. 다른 페이지로 이동하면 이동하기 전의 객체의 페이지랭크를 이동하는 다른 페이지로 분배하게 된다. 모든 E에 대해, PR(E)의 합은 1 , 이다. 이런 식으로 페이지를 이동하며 페이지랭크를 분배하는 과정을 무한히 반복한 후에 최종적으로 모든 객체에 부여된 페이지랭크는 일종의 확률 분산과 같다.

예를 들어, 객체 A, B, C가 있고, B, C A를 참조하고 있으며, B의 하이퍼링크 개수는 2, C 1개라고 하자. 그러면 A의 페이지랭크를 가장 단순히 다음과 같이 나타낼 수 있다.

이를 임의의 객체 u에 대해 일반화하면 다음과 같다.

Bu는 객체 u에 대한 유출 링크(Outgoing Link)가 있는 객체의 집합이며 L(v)는 객체 v의 모든 유출 링크 개수이다. 이 과정은 모든 객체에 대해 이루어져야 하며, 수렴치를 찾을 때까지 재귀적으로 반복되어야 한다. 최종적으로 위의 그림은 이동확률을 에지 값에, 페이지랭크를 버텍스 값으로 갖는 마코프 체인이 된다.

랜덤 서퍼 모델에서 사용자가 웹 페이지 검색을 멈추는 경우도 있다. 이를 위해 제동인자(Damping Factor)를 두고 아래와 같이 식을 확장한다. 제동인자의 적정 값은 약 0.85로 알려져 있다.

또한 링크를 타고 페이지를 이동하다 더 이상 유출 링크가 없는 페이지에 다다를 수도 있다. 이런 경우, 다른 어느 페이지로든 이동할 수 있는 것으로 간주하여 모든 유출 링크로의 확률을 동일하게 놓는다.

페이지랭크는 재귀적으로 반복하면서 값을 갱신해나가며, 수렴치로 다다른다. 이 과정을 간편히 하기 위해 아래와 같은 행렬식을 제안한다.

R(t)는 전체 페이지랭크의 벡터이다. l(pi,pj)pi에서 pj로 링크가 나갈 확률이며, 이는 단순히 1/(유출링크개수)일 수 있지만, 알고리즘이 고도화되면서 가중치를 부여해 계산할 수도 있다. 위와 같은 행렬식으로 재귀연산을 하여 최종적으로 구해진 페이지랭크 벡터를 검색 결과에서 순위를 매기는데 사용한다.

 

관련연구

l  HITS(Hyperlink-Induced Topic Search)
유입 링크의 가중치인 권위값(Authority Score)와 유출 랭크의 가중치인 허브값(Hub Score)를 이용해 문서의 중요도를 매긴다. 이는 미리 계산하는 것이 아니라 쿼리 시간에 계산되며, 일반 검색 엔진에는 사용되지 않고, 두 가지 다른 값을 이용한다는 특징이 있으며, 전체 웹 페이지가 아니라 일부에만 적용하여 사용한다. 고품질의 결과를 도출하지만 시간이 오래 걸린다는 단점이 있고, IBM의 웹 검색 프로젝트인 CLEVER에 사용되었다.

l  TrustRank
스팸페이지를 구분하기 위해 스탠프도 대학교와 Yahoo에 의해 개발된 반자동 기법이다. 이는 전문가에 의해 수동으로 구분된 웹 페이지를 기초로, 그 웹페이지와 관련된 페이지에 신뢰도를 높게 쳐주는 방식이다. 반자동이라는 단점이 있지만, 실제로 스팸 페이지의 구분에 우수한 성능을 보였다.

 

참고자료

The PageRank Citation Ranking: Bringing Order to the Web

http://ilpubs.stanford.edu:8090/422/1/1999-66.pdf

 

The Intelligent Surfer: Probabilistic Combination of Link and Content Information in PageRank

http://www.cs.washington.edu/homes/pedrod/papers/nips01b.pdf

 

Manipulability of PageRank under Sybil Strategies

http://www.cs.duke.edu/nicl/netecon06/papers/ne06-sybil.pdf

 

Our Search: Google Technology

http://www.google.com/corporate/tech.html

 

참고자료 전부 구라. 위키피디아 하나면 쫑.

수식은 나중에 정리...

저작자 표시
Posted by 배트
2005.03. (주)잉카엔트웍스에서 비정규직 입사 http://www.inka.co.kr/
2005.05. (주)잉카엔트웍스에서 정규직 입사
            넷싱크 솔루션 中 클라이언트 어플리케이션 NetsyncBrowser 2.1 개발
            EDUmp3.com, VitaEDU, EBSLang, eduspa, iMBC에 DRM 솔루션 포팅 작업
                (서버페이지(ASP/PHP), 서버프로그램(OLE서비스), MFC 클라이언트어플, ActiveX 웹어플)
            서버 DRM 솔루션 PDStream 유지보수 및 업데이트
                (서버페이지(ASP/PHP), 서버프로그램(OLE서비스), MFC 클라이언트어플, ActiveX 웹어플)
2007.03. (주)잉카엔트웍스 퇴사
2008.03. 중앙대학교 일반대학원 컴퓨터공학과 컴퓨터네트워크전공 입학
            관심분야 - 저전력 MAC 통신, 성능 효율적인 무선 TCP
            연구실적 - IEEE 802.11 ACK-less, TCP-L 연구개발
2008.06. 하계 정보과학회 논문지 논문게제 주저자
            "MAC 수준 멀티캐스팅을 이용한 IEEE 802.11 ACK-less 유니캐스팅의 성능 및 전력 절약"
2008.04. (주)잉카엔트웍스 삼성 누리샘 서버 DRM 솔루션 CTVDRM 개발
2008.09. (주)잉카엔트웍스 iAMOLED 클라이언트 어플리케이션 iAMOLED 개발
2008.11. (비공식) 서울대학교-와이즈멘토 학습행동 및 습관검사 어플리케이션 개발
2008.12. (비공식) (주)잉카엔트웍스 DRM Adaptor용 ActiveSync Device Handler 개발
2009.03.~ 컴퓨터 연구정보센터(CSERIC) 연구원
2009.09. (비공식) (주)MediaSVC PhraseBook v2.0 for iPod touch 개발
2009.11. (예정) 추계 정보화학회 논문지 논문게제 주저자
            "무선 에지의 링크 오류율을 이용한 개선된 TCP 혼잡제어"
2009.11. (예정) Transaction on Wireless Communication Journal 논문게제 부저자
            "Energy-Efficient ACK-less Unicasting in IEEE 802.11 by Using MAC Level Multicasting"
2010.02. (예정) 중앙대학교 일반대학원 컴퓨터공학과 컴퓨터네트워크전공 졸업

내가 봐도 한거 조낸 많네.
Posted by 배트
TAG 이력
Set node address in "Node/MobileNode instproc add-interface" in ns-mobilenode.tcl:
$mac node-addr [AddrParams addr2id [$self node-addr]]

Add to Mac class:
int node_addr_;
inline int node_addr() { return node_addr_; }

Read parameter in Mac::command()
if (strcmp(argv[1], "node-addr") == 0) {
     node_addr_= atoi(argv[2]);
     return TCL_OK;
}
(이거 잘 넣어야 함, 소스를 잘 봐가면서 첫번째 if에 넣어야 함-)

Get mobilenode instance:
MobileNode *mnode_ = (MobileNode *) Node::get_node_by_address(node_addr());


출처 :
FW: [ns] How to access MobileNode at Mac-802_11.cc ?
http://mailman.isi.edu/pipermail/ns-users/2005-May/049559.html
Posted by 배트
TAG ns2






별이 되어 영원히 남다.
Posted by 배트
TAG 만화, 추모