■ OSI 7 LAYER

스위치의 종류는 OSI(Open Systems Interconnection) 7 Layer(계층)에서 정의한 계층별 스위치로 기종이 서로 다른 컴퓨터간의 정보교환을 원활히 하기 위해 국제표준화기구 ISO에서 제장한 것으로, 네트워크를 이루고 있는 구성 요소들을 계층적 방법으로 나누고 각 계층의 표준을 정한 것이다.

계층별 명칭과 역활을 보면


1 Layer - 물리계층
- 최하위계층으로 장치간의 물리적인 접속을 제어하기 위한 기능을 제공하는 계층
- 데이터 부호화 방식,신호형식, 데이터 충돌 감지 등을 정의
- 대표적인 프로토콜 : ITU-T 권고안 중 V.24, EIA의 RS-232C

2 Layer - 데이터 링크 계층
- 물리계층에서 사용되는 통신 매체를 통해 데이터 블록의 전송 에러 검출 및 에러 제어를 관리하고 규정하는 계층
- 대표 프로토콜 : HDLC, SDLC, LAP-B

3 Layer - 네트워크 계층
- 통신망에 연결된 시스템의 데이터 전송과 교환 기능을 담당하는 계층
- 복수 개의 통신망을 이용하고 있는 시스템을 위한 계층
- 대표 프로토콜 : ITU-T 권고안의 X.25

4 Layer - 전송계층
- 링크 종점간에 정확한 데이터 전송을 제공하는 계층
- 하위 계층과 상위계층의 인터페이스 역할
- 데이터 전송에 대한 오류검출, 오류복구, 흐름제어를 수행

5 Layer - 세션계층
- 사용자와 전송 계층간의 인터페이스로 사용자 접속 장치를 제공하는 계층
- 세션 접속 설정, 데이터 전송, 세션 접속 해제 등의 기능
- 데이터 전송 도중 에러가 발생하면 통신을 중단하고 재전송 기능을 수행

6 Layer - 표현계층
- 응용 프로그램 사이에 서로 다른 정보의 형식과 설정과 암호화등을 해독하여 서로연결이 가능하도록 하는 계층
- 데이터의 구문 검색, 코드변환, 재구성을 통해 구문상의 차이를 해결

7 Layer  - 응용계층
- 최상위 계층으로 통신망으로 연결된 응용 프로세서들의 정보교환이 되는 계층

- 하위계층과 상위계층으로 나눈다.
   > 하위계층(물리계층, 데이터링크계층, 네트워크계층)
       - 데이터 전송 기능을 담당하는 계층으로 인접 노드간의 데이터 전송과 목적지 까지의 데이터 전송을 담당
   > 상위계층(전송계층, 세션계층, 표현계층, 응용계층)
      - 통신처리 기능을 담당하는 계층으로 파일, 데이타베이스에 대한 엑세스 작업

이와 같이 7 계층으로 나누어 전한 기능과 명칭을 간략히 요약해서 실무에서 많이 사용하고 있는 것이 각 계틍별 구분보다는 스위치로 통칭하여 그 기능과 역활을 사용하고 있다.

 

■ L2, L3, L4, L7 스위치 차이점

어떤 주소를 가지고 스위칭을 하는가에 따라 L2,L3,L4 스위치로 구분된다.

L2는 MAC주소, L3은 프로토콜 주소, L4는 세션 프로토콜을 이용하여 스위칭할 수 있다.

 

1. L2 스위치 : 스위칭 허브 기능

  . 데이터링크 계층에 위치하여 서로 다른 데이터링크간을 스위치해주는 장비

   . 패킷의 MAC 주소를 읽어 스위칭을 하고, MAC이 OSI 계층 중 2 계층에 해당하기 때문에 Layer 2 스위치라 한다.

   . 기본적인 동작은 브리지나 스위칭 허브는 모든 자료를 보내는 곳으로 수신 번지를 전송한다.

   . 장점 : 구조가 간단하며, 신뢰성이 높다. / 가격이 저렴하고, 성능이 높다.

     단점 : Broadcast 패킷에 의해 성능 저하가 발생한다. - 라우팅이 불가능 / 상위 레이어 프로토콜을 이용한 스위칭이 불가능 하다.

 

2. L3 스위치 : 라우터 기능

  . 네트워크 계층에 위치하여 서로 다른 네트워크간을 연결해 주는 장비(즉,  데이터의 네트워크 주소를 보고 스위칭해주는 장비)

   .해당 프로토콜을 쓰는 패킷을 스위칭이 가능하며, IP나 IPX 주소가 OSI 7 계층 중 3 계층에 해당하기 때문에 Layer 3 스위치라 한다.

  . L2 스위치에 라우팅(Routing) 기능을 추가하고, 대부분의 고성능 하드웨어를 기초로 하였다. - 기본 구성은 L2와 동일

  . 장점 : Broadcast 트래픽으로 전체 성능 저하를 막을 수 있다. / 트래픽 체크, 가상 랜 등의 많은 부가 기능을 갖고 있다.

    단점 : 특정 프로토콜을 이용해야 스위칭을 할 수 있다. / 대부분의 트래팩이 서브텟의 한계를 넘는다.

 

3. L4 스위치 : 로드 벨런싱 기능 (서버부하분산 및 조정)

  . L3과 같이 프로토콜을 기반으로 하며, 어플리케이션별로 우선 순위를 두어 스위칭이 가능하다.

   . 여러대의 서버를 1대처럼 묶을 수 있는 부하 분산 (Load Balancing) 기능을 제공한다.

   . 웹 트래픽, FTP 트래픽과 같이 정해진 서비스 포트를 보고 트래픽을 스위칭해주는 장비

                      웹 포트가 80 이니 FTP는 21이니 하는 것이 이 포트를 말함

   . 장점 : 보안성이 높고 고급 스위칭 설정이 가능하다. - 상황에 적절한 설정 /  용량에 관계 없이 네트워크의 성능 개선에 기여한다.

   . 단점 : 프로토콜에 의존적이며, 설정이 복잡하다. / 고가의 장비로 L2,L3 스위치와 적절한 혼합 배치가 필요하다.

 

4. L7 스위치 : 데이터 안의 실제 내용까지 조회해 보고 특정 문자열이나 특정 명령을 기준으로 트래픽을 스위칭

   . 더 상세한 패킷을 처리하므로 패킷의 부하분산, QOS기능이 가능

   . Dos/SYN Attack에 대한 방어

   . CodeRed/Nimda등 바이러스 감염 패킷의 필터링

   . 네트워크 자원의 독점 방지를 통한 네트워크 시스템의 보안성 강화가 가능함

 

 

■ L2, L3, L4 차이점 개략

스위치 레벨  공통점 차이점 설명
 L2  모두 IP Address 가지고 있음
(반드시는 아니지만 가질수있음)
더미허브, 스위치허브가 있으며, Switch의 역활만 함
MAC을 이용한 패킷전송
 L3 Hub + Router의 역활을 수행하는 장비
스위칭허브에 라우팅기능이 추가된 장비로 다른 네트워크끼리 통신가능
IP를 이용한 패킷전송
 L4 여러대의 서버를 1대처럼 묶어서 트래픽의 로드발랜싱 기능 제공
균등하게 트래픽 분배하는 스위치
프로토콜을 이용한 통신

출 처 :  http://blog.naver.com/kingwjt?Redirect=Log&logNo=110130734235

www.hackstor.biz 사이트에서 탈옥 툴을 받은 후, 사이트 지시되로 탈옥을 한다.
그러면 cydia가 생길것이며, cydia가 생기면 제일 먼저 소스 리스트부터 추가를 한다.

http://cydia.hackulo.us/
http://cydia.myrepospace.com/SECTOR-i/
http://cydia.xsellize.com/
http://repo.biteyourapple.net/
http://devbug.me/apt/

그 후 설치한 어플들 목록...
- installus
- afc2
- FolderEnhancer
- SBSetting
- iFile
- infinidock
- HideJB
- iProtect
- KuaiDial
- MetaDataRemovr
- MultiCleaner
- MultiIconMover
- TCP optimizer
- WiCarrier








 

링커가 모든 심볼을 해석하고 나면, 심볼 참조는 오직 하나의 심볼 정의만을 가지게 된다. 그 때, 링커는 아래 두 스텝으로 구성된 재배치 작업을 하게 된다.

 - 섹션과 심볼정의들을 재배치 한다. 링커는 같은 타입의 모든 섹션들을 새로운 하나의 섹션으로 통합한다. 예로 들면, 링커는 입력으로 받은 모든 재배치 가능한 오브젝트 파일들의 .data 섹션을 합쳐 하나의 .data 섹션을 만든다. 같은 과정이 .code에 대해서도 행해진다. 그런 후에 링커는 병합된 새로운 섹션과, 병합된 새로운 색션내의 각 색션, 그리고 모든 심볼들에 대해 런-타임 메모리 주소를 할당한다. 이러한 작업 후에는 프로그램의 모든 코드와 전역 변수들은 고유한 로드-타임 주소를 가지게 된다.

 - 섹션들안에 있는 심볼의 참조를 재배치 한다. 이 과정에서,  링커는 코드와 데이터 섹션에 있는 모든 심볼 참조를 수정하여, 그것들이 올바른 로드-타임 주소를 가지게 한다.


 어셈블러가 해석 안 된 심볼들을 만날 때마다, 어셈블러는 오브젝트 파일의 .rel.text / .rel.data 섹션에 해석 안 된 심볼들을 위한 재배치 항목을 생성한다. 이러한 재배치 항목은 해석 안된 심볼들이 어떻게 해석되어야 하는지에 대한 정보들을 담고 있다. 전형적인 ELF 재배치 항목은 다음과 같은 멤버들로 구성된다.

 -  옵셋, 재배치 되어질 필요가 있는 심볼 참조의 섹션내에서의 옵셋을 나타내며, 혹은 디스크의 저장공간이 오브젝트 파일 내에서 재배치 되어질 필요가 있을 시, 이 값은 재배치 될 필요가 있는 디스크의 섹션의 처음부터 바이트 단위로 얼마만큼 떨어져 있는가를 나타낸다.

 -  심볼, 이것은 심볼 테이블에서의 인덱스로서, 아직 해석 안 된 심볼이 심볼 테이블에서 몇 번째 위치에 있는가를 나타낸다.

 -  타입, 재배치 타입, 일반적으로 R_386_PC32는 S+A-P로 계산하며, R_386_32는 S+A로 계산한다. 이 계산에서, S는 재배치 항목의 심볼 항목에 들어있는 값을 가리키며, P는 섹션 옵셋 혹은 재배치 되는 저장장치의 주소를 나타낸다. 그리고 A는 재배치 가능한 필드를 계산하는데 필요한 주소이다.

출 처 :  http://wiki.kldp.org/wiki.php/DocbookSgml/LinkerLoader-TRANS 



모든 재배치 가능한 오브젝트 파일들은 심볼 테이블과 그와 관련된 심볼들을 가지고 있다. 링커의 관점에서 볼 때 심볼들은 다음과 같이 분류할 수 있다.

 - 현재의 파일에서 정의되고, 다른 파일들에서 참조되는 전역 심볼. 모든 non-static 함수들과 전역 변수들이 이 분류에 해당한다.

 - 현재의 파일에서 참조는 되나, 다른 곳에서 정의된 전역 심볼. extern으로 정의된 모든 함수들과 변수들이 이 분류에 해당한다.

 - 현재의 파일에서만 정의되고 참조되는 지역 심볼. 모든 static 함수들과 변수들이 이 분류에 해당한다.

링커는 심볼의 참조를 해석할 때, 입력으로 주어지는 재배치 가능한 오브젝트 파일의 심볼 테이블로부터 꼭 하나만 존재하는 심볼의 정의를 참조하여 심볼 참조를 해석한다. 지역 심볼은 그에 대한 다중 정의를 심볼 테이블이 가질 수 없으므로 쉽게 해석 된다. 그러나 전역 심볼의 해석은 약간의 트릭이 요구된다. 컴파일 타임 때, 컴파일러는 전역 심볼들을 strong 혹은 weak 한 것으로 만드는데, 함수들과 초기화 된 전역 변수들은 strong 하게, 초기화 되지 않은 변수들은 weak하게 만든다. 그러면 링커는 아래의 룰을 적용하여 심볼들을 해석하게 된다. 

1. 다중 strong 심볼들은 허가되지 않는다.

2. 하나의 strong 심볼과 여러 개의 weak 심볼들이 있으면, strong 심볼을 선택한다.

3. 여러 개의 weak 심볼들이 있으면, 그것들 중 아무거나 선택한다.

출 처 : http://wiki.kldp.org/wiki.php/DocbookSgml/LinkerLoader-TRANS 



1. 초기화 된 전역 변수는 strong 하게, 초기화 되지 않은 변수들은 weak 하게 만든다..

- funcA.c -
1
2
3
4
5
6
7
8
#include <stdio.h>

int a = 6;          // Strong Symbol

void funcA()
{
    printf("funcA()\n");
}

- main.c -
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int a;                  // Weak Symbol

int main()
{
    printf("a = %d\n", a);
    funcA();

    return 0;
}

- 결과 화면 -




2. 2개의 초기화 된 전역 변수 (Strong Symbol) 일 때

- funcA.c -
1
2
3
4
5
6
7
8
#include <stdio.h>

int a = 6;          // Strong Symbol

void funcA()
{
    printf("funcA()\n");
}

- main.c -
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int a = 10;         // Strong Symbol

int main()
{
    printf("a = %d\n", a);
    funcA();

    return 0;
}

- 결과 화면 -


컴파일 시 에러 발생...




3. 초기화 된 전역 변수 하나를 __weak 속성을 부여 했을 때

- funcA.c -
1
2
3
4
5
6
7
8
#include <stdio.h>

int a = 6;          // Strong Symbol

void funcA()
{
    printf("funcA()\n");
}

 - main.c -
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int __attribute__((weak)) a = 10;   // Weak Symbol

int main()
{
    printf("a = %d\n", a);
    funcA();

    return 0;
}
 
- 결과 화면 -
 

초기화 된 전역 변수 2개를 선언했더라도, 2번 경우와 다르게 하나의 심볼을 weak로 지정해서 에러없이 컴파일 되며, 실행도 잘 되었다.


 
리눅스상에서 콘솔을 통해 키를 입력받을때, Return키를 입력받지 않고 키 값에 반응해 실시간(?)으로 처리되는 작업이 필요할때가 있다. 헌데 리눅스에서는 윈도우처럼 getch함수가 존재하지 않기 때문에 이를 따로 구현해줘야 하는데, 아래는 리눅스 상에서 getch() 함수를 구현한 예이다.

  1. #include <stdio.h>  
  2. #include <term.h>  
  3. #include <termios.h>  
  4. #include <unistd.h>  
  5.   
  6. int getch(void)  
  7. {  
  8.   int ch;  
  9.   struct termios buf;  
  10.   struct termios save;  
  11.   
  12.    tcgetattr(0, &save);  
  13.    buf = save;  
  14.    buf.c_lflag &= ~(ICANON|ECHO);  
  15.    buf.c_cc[VMIN] = 1;  
  16.    buf.c_cc[VTIME] = 0;  
  17.    tcsetattr(0, TCSAFLUSH, &buf);  
  18.    ch = getchar();  
  19.    tcsetattr(0, TCSAFLUSH, &save);  
  20.    return ch;  
  21. }  
  22.   
  23. int main(void)  
  24. {  
  25.     int ch;  
  26.   
  27.     for(; !(ch=='\n');){  
  28.   
  29.         ch = getch();  
  30.         printf("%d \n", ch);  
  31.     }  
  32.   
  33.     return 0;  
  34. }  

터미널로부터 리턴키가 입력될때까지 자료를 입력받는 예제

위의 예제를 보다 발전(?)시키기 위해서 좀더 많은 자료가 필요하다면, 아래의 링크를 참조하기 바란다. 터미널을 제어하는 방법에 대한 내용이 자세하게 정리되어 있는 페이지이다.
링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/termios


◆ 추가로 터미널 입력시 특수문자를 요약한 Table

Figure 18.9. Summary of special terminal input characters

Character

Description

c_ccsubscript

Enabled by

Typical value

POSIX.1

FreeBSD 5.2.1

Linux 2.4.22

Mac OS X 10.3

Solaris 9

   

field

flag

      

CR

carriage return

(can't change)

c_lflag

ICANON

\r

DISCARD

discard output

VDISCARD

c_lflag

IEXTEN

^O

 

DSUSP

delayed suspend (SIGTSTP)

VDSUSP

c_lflag

ISIG

^Y

 

 

EOF

end of file

VEOF

c_lflag

ICANON

^D

EOL

end of line

VEOL

c_lflag

ICANON

 

EOL2

alternate end of line

VEOL2

c_lflag

ICANON

   

ERASE

backspace one character

VERASE

c_lflag

ICANON

^H, ^?

ERASE2

alternate backspace character

VERASE2

c_lflag

ICANON

^H, ^?

 

     

INTR

interrupt signal (SIGINT)

VINTR

c_lflag

ISIG

^?, ^C

KILL

erase line

VKILL

c_lflag

ICANON

^U

LNEXT

literal next

VLNEXT

c_lflag

IEXTEN

^V

 

NL

line feed (newline)

(can't change)

c_lflag

ICANON

\n

QUIT

quit signal (SIGQUIT)

VQUIT

c_lflag

ISIG

^\

REPRINT

reprint all input

VREPRINT

c_lflag

ICANON

^R

 

START

resume output

VSTART

c_iflag

IXON/IXOFF

^Q

STATUS

status request

VSTATUS

c_lflag

ICANON

^T

 

 

 

STOP

stop output

VSTOP

c_iflag

IXON/IXOFF

^S

SUSP

suspend signal (SIGTSTP)

VSUSP

c_lflag

ISIG

^Z

WERASE

backspace one word

VWERASE

c_lflag

ICANON

^W

 

출처 : http://codeidol.com/%5B~MODULE~%5D/advanced-programming-in-unix/Terminal-I-O/-18.3.-Special-Input-Characters/

1) Literal pool
- 영어 의미 그대로 상수(Literal)들이 담겨있는 메모리 특정영역(pool)을 의미한다.
- ARM assemble에서는 ARM 범용레지스터에 '32bit 상수값'을 넣기 위해 사용한다.

2) ARM 범용레지스터에 32bit값 대입하기
LDR{cond}{size} Rd =DATA(32bit)
    ex) LDR        R1,  =0x12345678 ;  데이터 0x12345678을  R1에 대입
- 어셈블러가 '=DATA' 부분을 [PC, #<offset>] 형태로 바꾸고 PC+offset 위치에 있는 'Literal pool'에서
  size만큼 데이터를 읽어 Rd에 저장한다.
- LDR instruction의 디코드표를 보면 offset은 12bit가 할당되어 있으므로, 최대 '4kB' 까지 나타낼 수 있다.
  따라서 Literal pool은 pc값 주소의 4kB안에 있어야 한다.

출 처 :  
http://supsupi.tistory.com/entry/1-Literal-pool%B0%FA-32bit-%C1%D6%BC%D2-%B0%AA-%B7%B9%C1%F6%BD%BA%C5%CD%BF%A1-%BA%D2%B7%AF%BF%C0%B1%E2
printk()

커널 함수에서 사용되는 출력 함수이다.
printf와의 차이는 메시지 기록관리를 위한 로그레벨을 지정할 수 있다는 것이다.

 로그레벨 명령어 의미
"<0>"  KERN_EMERG 시스템이 동작하지 않는다.
 "<1>"  KERN_ALERT 항상 출력
"<2>"  KERN_CRIT 치명적인 정보
 "<3>" KERN_ERR  오류 정보
 "<4>"  KERN_WARNING 경고 정보 
 "<5>"  KERN_NOTICE 정상적인 정보 
 "<6>"  KERN_INFO 시스템 정보 
 "<7>"  KERN_DEBUG  디버깅 정보

위처럼 로그레벨을 지정하는 이유는 kernel source 내에서 원하는 정보만 출력할 수 있게 함이다.

사용법은 다음과 같다

 printk(KERN_ERR"This is KERN_ERR option\n");

다음 명령을 실행해보면 현재의 로그레벨을 확인 할 수 있다.

 $cat /proc/sys/kernel/prink 
      7     4     1     7

[7] : 현재 로그레벨
       이 레벨보다 높은 메시지(숫자가 작은 수)만 출력을 해준다.
[4] : 기본 로그레벨
       printk()함수를 입력하면서 별도로 로그레벨을 입력하지 않을 경우
[1] : 최소 로그레벨
       부여할 수 있는 최소 로그레벨이다.
       이 값이 1이라면 우리가 printk 함수를 입력하면서 0을 부여할 수 없다.
[7] : 부팅시 로그레벨
        부팅시 출력될 레벨을 지정해주는 것이다.

출력되지 않았을 경우 다음과 같은 명령어로 로그버퍼에 기록된 내용을 볼 수 있다. (출력되지 않은 메시지도 볼 수 있음)
dmesg
# cat /proc/kmsg

출 처 : 
http://ok2513.tistory.com/9  
windows7 MBR이 망가졌을 경우...

1. windows7 설치 시디를 넣고 부팅을 한다.

2.  shift + F10을 커맨드 창을 실행한다.

3. bootrec /fixboot

4. bootrec /fixmbr

5. 재부팅을 한다.(exit)... (MBR 복구 완료)
 
에버노트는 애플리케이션으로써 온라인 상의 여러가지 매체에서 얻을 수 있는 각종 정보(메모, 트윗, 인터넷 기사 등)를 아이패드로 일원화 시키기 위해 설치하여 사용중이다.

<에버노트 활용법>
1. 트위터를 통해 메모
  - 일단 에버노트의 트위터 계정인 @myen을 팔로우해야 사용 가능하다.
  - 트위터에서 '@myen 메모내용' 이와 같은 방법으로 트윗을 하면, 트윗을 한 '메모내용' 아이패드의 에버노트로 메모가 동기화됨.
  - 아이패드를 휴대하고 있지 않을 때, 데스크탑을 이용해 아이패드의 에버노트에 메모를 남기고 싶을 때 사용하면 될 듯..
2. 메일을 통해 메모
  - 먼저 에버노트(http://www.evernote.com)에 회원가입 후 생성되는 이메일 주소가 있어어야함.
  - 메일의 수신자를 'scroh.c1f6c@m.evernote.com'로 하고 메일 본문란에 메모를 적어 메일을 보내면 아이패드의 에버노트로 메모가 동기화됨.
  - 첨부파일의 경우 이미지는 메모내용으로 표시가 되지만 문서파일은 메모내용으로 표시가 되지 않음.
  - 이 방법 역시 아이패드를 휴대하고 있지 않을 때, 데스크탑을 이용하여 아이패드의 에버노트로 메모를 남기고 싶을 때 사용하면 좋을 것 같다.
3. 웹페이지를 메모
  - 먼저 웹브라우져 크롬에서 확장 프로그램인 웹 클리퍼를 사용하여야만 사용 가능하다.
  - 웹 클리퍼가 설치되 데스크 탑에서 웹서핑 중 기사 등 메모 혹은 북마크해두고 싶은 웹페이지 있으면 웹 클리퍼를 이용하여 웹 페이지의 URL과 클리핑시에 적은 메모를 아이패드의 에버노트로 동기화 시킬수 있다.
4. 플립보드를 통한 메모
  - 플립보드로 기사(사설/칼럼/경제)를 읽는 중 스크랩하고 싶은 기사가 있으면 메일의 수신자를 'scroh.c1f6c@m.evernote.com'로 하여 메일을 보내면 아이패드의 에버노트로 스크랩하고 싶은 기사의 링크가 발송되어 동기화됨
  - 나중에 다시 읽고 싶은 기사나 글을 작성할 때 필요한 기사들을 플립보드에서 바로 에버노트로 보낼 수 있음


*에버노트 관련 참고 자료 링크 :  경험에서 얻는 에버노트 활용백서 

출처 : http://nqpb.tistory.com/178 

#define spin_lock_init(_lock)
스핀락을 초기화한다

 

#define spin_lock_irqsave(lock, flags)
인터럽트를 disable하고 스핀락을 얻는다

 

void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags)
인터럽트를 restore하고 스핀락을 반환한다

출 처 : http://blog.naver.com/snoya00?Redirect=Log&logNo=60106221880 

[출처] [LINUX] spinlock_t|작성자 스노야

+ Recent posts