T-tree

  • AVL 트리의 이진 탐색 특성 및 높이 균형과, B트리의 업데이트와 저장효율 장점을 모두 취한 MMDB 최적 트리
  • 물리주소를 직접 포인팅 → B-Tree에서 진화된 형태로 물리적인 주소의 논리적인 변환 없이 빠르게 접근 가능한 자료구조
  • T- 트리에서 'T'는 노드 데이터 구조 모양을 나타낸다
  • 기존의 B-Tree의 Data Page의 다단계 검색의 복잡성 극복
  • 한 노드의 가장 작은 값과 가장 큰 값의 비교
  • Datablitz, EXtremeDB, MySQL Cluster, Oracle TimesTen 및 MobileLite와 같은 주 메모리 데이터베이스에서 사용
  • 균형이 유지되는(balanced) 데이터 구조로, 인덱스와 실제 데이터가 모두 메모리에 모두 저장되는 경우에 최적화된 구조 (디스크 I/O가 없음)
  • 하드디스크와 블록지향 보조 저장장치의 저장에 최적화 된 인덱스 구조
  • T- 트리는 인덱스 트리 노드 자체 내에 인덱스 된 데이터 필드의 사본(copy)을 유지하지 않으며, 실제 데이터가 항상 주 메모리에 인덱스와 함께 저장되어 실제 데이터 필드에 대한 포인터 만 포함한다는 이점을 가짐
  • 단점 : 1차원 데이터에만 적용이 가능하며, 최근 매모리 기술 발전으로 B트리에 비해 성능 우위가 낮아짐 

 

구조도

  • 해당 노드의 값보다 작은 값은 왼쪽 서브트리에 위치
  • 해당 노드의 값보다 큰 값은 오른쪽 서브트리에 위치
  • 노드의 구성
    1. 부모 노드에 대한 포인터
    2. 왼쪽 자식 노드
    3. 오른쪽 자식 노드
    4. 정렬 된 데이터 포인터 배열
    5. 일부 추가 제어 데이터
  • 노드의 종류
    1. 내부 노드 (internal node) : 두개의 하위 트리가 있는 노드
    2. 리프 노드 (leaf node) : 두개의 하위 트리가 없는 노드
    3. 반엽 노드 (half-leaf node) : 하나의 하위 트리 만있는 노드
    4. 값의 경계 노드 (bounding node) : 값이 노드의 현재 최소값과 최대 값 사이에있는 경우 노드
  • 경계 값 (Bound values) :  각 내부 노드는 리프 노드 또는 반엽 노드를 가진다. 리프노드와 반엽노드는 가장 작은 데이터 값(최대 하한 이라고 함, greatest lower bound) 보다 크고, 가장 큰 데이터 값(최소 상한 이라고 함, least upper bound) 보다 작은 값을 가진다.
  • 리프 및 반엽 노드에는 데이터 배열의 최대 크기부터 최대 크기까지 다양한 수의 데이터 요소가 포함될 수 있다
  • 내부 노드의 점유율(채워진 양)은 미리 정의 된 최소 및 최대 요소 수 사이에서 유지

 

운행 방식

  • 노드의 가장 작은 값과 가장 큰 값을 검색 Value와 비교
  • 삽입 시 검색 후 공간이 없으면 가장 작은 Value를 제거하고 재정렬

 

성능의 이점

  • 업데이트와 저장의 효율 : 분리, 병합을 통한 재균형 과정이 자가 균형 이진 탐색 트리 만큼 자주 일어나지 않는다. (B 트리, 데이터의 갯수가 일정 갯수 사이라면 분리, 병합이 일어나지 않는다)
  • 한 노드안에 여러개의 데이터를 가짐 (B트리 성질)
  • 이진 검색, 높이 균형, 인메모리(in-memory) 트리 구조의 성능 이점을 갖음 (AVL트리) 
  • 저장공간의 오버해드를 피함

  • B-트리 T-트리 AVL
    분리 및 병합을 통해 재균형 과정은 다른 자가균형 이진 탐색 트리(AVL) 만큼 자주 일어나지 않음  
      이진 탐색
      높이 균형을 가짐
      저장공간 오버헤드를 피함
    한 노드안에 여러개의 데이터를 가짐  
      물리적인 주소의 논리적인 변환 없이 빠르게 접근 가능  
      Data Page의 다단계 검색의 복잡성 극복  

 

  • B- 트리 (또는 B+트리)는 디스크 기반 관계형 데이터베이스 시스템에서 가장 널리 사용되는 인덱스 구조인 것과 비교할 때, T- 트리는 메인 메모리의 인덱스 구조로 널리 받아 들여졌습니다. 이는 모든 데이터 베이스(또는 대부분)가 메인 메모리에 상주하고 있기 때문이다
  • T- 트리는 주 메모리 데이터베이스에 널리 사용되는 것처럼 보이지만 최근 연구에 따르면 최신 하드웨어에서는 실제로 B- 트리보다 성능이 좋지 않다.  주된 이유는 현재의 캐시 접근과 메인메모리 접근 사이의 속도 차이을 고려할때, 메모리 참조가 균일한 비용을 가진다는 전통적인 가정이 더이상 유효하지 않기 때문이다.
  • 문헌에 보고된 T 트리 관련 작업은 대부분 동시통제를 고려하지 않았다. T- 트리에 대한 두 가지 동시성 제어 접근 방식이 제시된다. 시뮬레이션 연구 결과에 따르면 동시성 제어가 시행되는 경우 널리 사용되는 B- 트리 인덱스의 변형 인 B- 링크 트리가 T- 트리보다 성능이 우수하다. 이는 T- 트리에 대한 동시성 제어가 B- 링크 트리보다 많은 잠금 작업을 필요로하고 잠금 및 잠금 해제의 오버 헤드가 높기 때문이다.

 

<참고>

 

AVL 트리

  • 균형잡힌(balanced) 이진 탐색 트리
  • 1962년 G.M. Adelson-Belskii와 E.M.Landis의 논문을 통해 발표되었으므로, 이들의 이름을 따서 이름이 지어졌다
  • 각각의 노드(node, 분기점)마다 왼쪽과 오른쪽 부분 트리(sub-tree)의 높이 차이에 대한 정보를 가지며 부분 트리의 높이 차이가 1보다 크지 않은 성질을 가진다.
  • 균형 잡힌 AVL 트리는 n개의 원소가 있을 때 O(log n) 의 시간복잡도로 검색, 삽입, 삭제를 할 수 있다.
  • 삽입과 삭제를 할 때에는 원하는 노드를 찾기 위해 2개의 경로가 필요하기 때문에 레드-블랙 트리만큼 효율이 좋지 않아 자주 쓰이지는 않는다.

 

 

B 트리 (Balanced, Binary, Boeing Tree)

  • 트리 자료구조의 일종으로, 이진 트리를 확장해 하나의 노드가 가질수 잇는 자식 노드의 최대 숫자가 2보다 큰 트리구조
  • 내부 노드의 자식 수가 미리 정해진 범위 내에서 변경가능 하기 때문에 항목이 삽입되거나 삭제될 때, 내부 노드는 해당 범위의 자식 노드의 수를 만족시키기 위해 분리되거나, 병합 된다.
  • 자식 노드의 수가 일정 범위 내에서만 유지되면 되므로 분리 및 병합을 통해 재균형 과정은 다른 자가균형 이진 탐색 트리(AVL) 만큼 자주 일어나지 않지만, 저장 공간에서 손실은 있게 된다.
  • 노드 접근시간이 노드에서의 연산시간에 비해 훨씨 길 경우 (접근시간 > 연산시간, 예를 들면 하드디스크나 2차 저장장치), 다른 구현방식에 비해 상당한 이점을 가지고 있다.
  • 각 내부 노드에 있는 자식 노드의 수를 최대화함으로써, 트리의 높이는 감소하며, 균형 맞춤은 덜 일어나고, 효율은 증가하게 된다. 대개 이 값은 각 노드가 완전한 하나의 디스크 블로 혹은 2차 저장장치에서의 유사한 크기를 차지하도록 정해진다.
  • 즉, 자식 노드의 수 증가  → 트리의 높이 감소 (노드 내 데이터 증가)  → 탐색시간 감소 (연산시간 증가) 

 

MMDB (MainMemoryDB, 메인메모리 DB) :  데이터베이스 전체를 주기억장치에 상주시킨 데이터 베이스

B-Tree의 Data Page의 다단계 검색 : 

국내에서 사이버보안 위협이 고조되거나 해킹 징후가 발견될 때마다 국가사이버안전센터에서는 사이버위기경보를 발령한다.

 

□ 경보 단계

 

정상 < 관심 < 주의 < 경계 < 심각 순으로 정부가 상황에 따라 경보 수준을 조정한다

 

정상 단계

(1) 정상

  • 국내 민간 분야 인터넷 정상 소통
  • 인터넷 소통 및 사용에 지장이 없는 웜/바이러스 등 악성코드 출현 탐지, 신규 보안 취약점 또는 해킹 기법 등 발표
  • 위험도가 낮은 국지성 이상 트래픽 발생 가능성 존재
경보 단계

(2) 관심

  • 위험도가 높은 웜ㆍ바이러스, 취약점 및 해킹 기법 출현으로 인해 피해 발생 가능성 증가
  • 해외 사이버 공격 피해가 확산되어 국내 유입 우려
  • 침해 사고가 일부 기관에서 발생
  • 국내ㆍ외 정치ㆍ굿나적 위기 상황 조성 등 사이버 안보 위해 가능성 증가

(3) 주의

  • 일부 정보통신망 및 정보시스템 장애
  • 침해사고가 다수 기관으로 확산될 가능성 증가
  • 국내ㆍ외 정치ㆍ군사적 위기 발생 등 사이버안보 위해 가능성 고조

(4) 경계

  • 복수 정보통신서비스제공자(ISP) 망ㆍ기간통신망에 장애 또는 마비
  • 침해사고가 다수 기관에서 발생했거나 대규모 피해 확대될 가능성 증가

(5) 심각

  • 국가 차원의 주요 정보통신망 및 정보시스템 장애 또는 마비
  • 침해사고가 전국적으로 발생했거나 피해 범위가 대규모인 사고 발생

 

 

□ 경보 단계 조정 사례

  • 북한 정찰총국 소행으로 알려진 3.20 사이버테러는 2013년 당시 전 국민을 떠들썩하게 만든 대형 사이버테러 사건 당시, 2013년 3월 20일 15:00부로 사이버위기 경보를 '관심' 에서 '주의'로 상향 조정
  • 2009년, 7.7 DDoS 공격 당시 '주의'경보 발령


관련 링크 : https://www.krcert.or.kr/cyber/warningLevel.do / 인터넷보호나라

 

 

사용자 관리는 리눅스 시스템 관리에서 중요한 일이다. 사용자 관리에 관련해서 많은 면이 있는데 강력한 비밀번호 정책이 그중에 하나다. 비밀번호를 강력하게 유지한다면 비인가자의 시스템 접근을 막을 수 있다. 리눅스의 디폴트 정책은 이미 안전하다고 할수 있지만, 조금 더 안전하도록 더 변경할 필요가 있다. (pwgen)

/etc/login.defs

기본(default) 비밀번호 항목을 지정하는 파일이다. 

  • PASS_MAX_DAYS : 비밀번호를 사용할 수 있는 최대 일 수
  • PASS_MIN_DAYS : 비밀번호를 바꾸는 사이의 최소 일 수
  • PASS_MIN_LEN : 비밀번호 최소 길이
  • PASS_WARN_AGE : 비밀번호 만료 전 경고 하는 날의 수

 

etc/pam.d/system-auth

PAM (Plaggable Authentication Module) 모듈을 사용해서 인증할 때 참조된다. 아래와 같이 설정 할 수 있다

password	requisite	pam_cracklib.so try_first_pass retry=4 minlen=12
  • difok : 새로운 암호와 이전 암호의 유사성 (기본값은 10 또는 암호 크기의 1/2 중 작은 값)
  • retry: 새 패스워드를 물어보는 횟수
  • unlock_time: 실패한 접근 후에 몇초 후에 접근을 허용할지에 대한 설정, 사용자가 특정 최대 횟수의 로그인 시도를 실패 한 후 계정이 잠귀었을 때 사용한다
  • deny: 몇번의 계정 접근 실패를 허용 할 지 여부, n번 패스워드 실패시 계정 잠금을 한다.
  • reset: 실패 횟수 안에서 로그인 하면 기존의 실패 횟수를 재설정 할 지 여부
  • no magic root: root 패스워드 실패시 횟수 기록만 하고 실제로 계정을 잠그지 않음
  • minlen: 새 패스워드의 최소 크기에 1을 더한 크기이다. 새 패스워드에 사용된 문자열의 길이 외에 각 문자 종류(숫자, 대문자, 소문자, 특수문자)를 사용한 것에 대해 각각 크레디트를 준다.
    ( 예 : minlen=12 일 경우, abcdefg01! (10자) 가 허용 된다. 왜냐면, 소문자 사용 1크레딧, 숫자 사용 1크래딧, 특수문자 사용 1크레딧을 얻었으므로, 총 문자의 길이는 12-3=9 자 이상이면 가능하다)
  • dcredit: 숫자가 가질수 있는 크레디트의 값의 최대값, 만약 패스워드에 N개 이하의 숫자를 사용했다면 사용된 숫자의 개수가 현재 정의된 minlen 값을 계산하는데 크레디트 값으로 적용한다. / 0보다 작을 경우, 비밀번호에 포함하여야 하는 숫자 문자의 수를 의미한다 (디폴트 : 1)
  • ucredit: 대문자가 가질수 있는 크레디트 값의 최대 값
  • lcredit: 소문자가 가질수 있는 크레디트 값의 최대 값
  • ocredit: 특수문자(앞서 정의된 숫자, 대문자 소문자를 제외한 나머지 문자)가 가질수 있는 크레디트 값의 최대 값 (각 항목에 -1을 주면 해당하는 문자를 포함시켜야 함)

 

credit의 계산 방법

//크레딧 계산하는 수도 코드
if (N > 0) :
    totalCredit += min(dcredit, len(password_digit)) 
if (N < 0) :  
    if (-credit < len(password_ditig) 
    	: return false
    totalCredit += min(-dcredit , len(password_ditig)); 

 

ACK 스캔 이란?

  • ACK 패킷을 이용한 스캔
  • 포트가 열려 있는지를 판단하는 것이 아니라, 스캐너와 스캔 대상 시스템 사이에 설치된 방화벽의 종류 판단 목적이다 - 방화벽의 룰셋, 포트 필터링인지 상태 기반 필터링인지를 판단한다 
  • 스탤스 스캔 (stealth scan) 의 한종류다

스캔 결과

  1. 스캔이 필터링 되지 않았을 경우 (unfiltered)
    • 열린 포트와 닫힌 포트 모두 RST 패킷을 반환한다
    • 열림, 닫힘 상태를 의미 하지 않는다
  2. 스캔이 필터링 되었을 경우 (filtered)
    • 응답하지 않거나, ICMP 애러 메시지를 돌려준다

ACK 패킷

  • ACK 스캔은 필터링 하기가 어렵다. ACK 패킷은 내부 호스트와 외부 호스트 중 어느 쪽이 접속을 시작하였는지 알기 어렵기 때문에, 네트워크 안으로 들어오는 SYN 패킷을 차단하기는 어렵기 때문이다.
  • 부적절한 ACK 패킷을 차단하고, 정당한 연결에 의한 ACK 패킷을 통과시키기 위해서, 방화벽은 반드시 성립된 모든 연결의 상태를 검사하여야 한다
  • 이런 상태기반 방화벽은 추가적인 리소스가 필요하고, 상태 기반 방화벽을 재시작하면 장비는 상태 정보를 잃고 성립된 연결들을 모두 종료하게 된다

 

상태기반 필터링

 

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
  • 리눅스 Netfilter/iptables 시스템은 --syn 옵션을 통해 상태 기반을 하지 않는 접근을 제공한다
  • 성립된 연결에 관련된 패킷만을 허용하겠다는 뜻이다
  • 특수 포트 6개를 제외 (22, 25, 53, 70, 80, 113) 하기 때문에 ACK 스캔으로 이 포트들에 대해서는 opne(22, 53, 80) 또는 닫힘(25, 70, 113)으로 분류 할 수 없다

1. 삽입 정렬 (Insert Sort)

 

2번째 원소부터 앞쪽의 원소들과 비교하면서 재자리를 찾아가는 방법

for(index 1 부터 전체 배열 순회) {
  insert_obj = arr[i];

  for(i-1 번째 원소부터 왼쪽으로 순회) {

    //만약 현재 원소가 삽입할 원소보다 크다면
    if(arr[j] > insert_obj) {
      //오른쪽으로 한칸 땡기면서 자리를 마련한다
      arr[j+1] = arr[j];
    }
    else {
       break;
    }
  }
  
  //마련한 자리에 삽입
  arr[j+1] = insert_obj;
}

 

2. 선택 정렬 (Selection Sort)

 

1번째 원소부터 최솟값을 찾아 자리 교환을 해나가는 방법

for(원소 전체 순회) {
  //최소값을 가진 인덱스 유지
  min_index = i;
  
  for(i+1 부터 원소 전체 순회) {
    if(최소값 보다 현재 원소가 더 작다면) {
      //최소 인덱스 교체
      min_index = j;
    }
  }

  //순회가 끝난 후 현재 원소와 최소 값을 교환
  temp = arr[i];
  arr[i] = arr[min_index];
  arr[min_index] = temp;
}

 

 

3. 버블 정렬 (Bubble Sort)

 

바로 옆의 원소와 비교하면서 순서가 맞지 않을 경우 교환하는 방법

for(전체 원소 순회) {
  for(1번째 원소부터 마지막에서 1개 전 원소까지 순회) {
    if(n번째와 n+1번째의 순서가 맞지 않을 경우) {
      //원소 교환
      temp = arr[j];
      arr[j] = arr[i];
      arr[i] = temp;
    }
  }
}

 

 

3. 소스 코드

package sort;

import java.util.Arrays;
import java.util.Random;

public class SortTest {

	//배열 설정 값
	private static int MAX_LEN = 12;
	private static int MAX_INT = 30;

	public static void main(String[] args) {

		SortTest me = new SortTest();

		int arr[] = me.getRandomNumberArr();

		System.out.println("정렬 전 >> " + Arrays.toString(arr));

		//1. 삽입 정렬
		int insertSortarr[] = me.InsertionSort(arr);
		System.out.println("삽입 정렬 >> " + Arrays.toString(insertSortarr));

		//2. 선택 정렬
		int selectionSortarr[] = me.InsertionSort(arr);
		System.out.println("선택 정렬 >> " + Arrays.toString(selectionSortarr));

		//2. 버블 정렬
		int bubbleSortarr[] = me.bubbleSort(arr);
		System.out.println("버블 정렬 >> " + Arrays.toString(bubbleSortarr));

	}

	/**
	 * 삽입 정렬 알고리즘
	 * @param arr
	 * @return
	 */
	int[] InsertionSort(int[] arrParam) {
		int i, j;
		int insert_obj;

		int arr[] = arrParam.clone();

		for(i=1; i<MAX_LEN; i++) {
			insert_obj = arr[i];

			for(j=i-1; j>-1; j--) {
				if(arr[j] > insert_obj) {
					//자리 마련하기
					arr[j+1] = arr[j];
				}
				else {
					break;
				}
			}
		arr[j+1] = insert_obj;
		}

		return arr;
	}

	/**
	 * 선택 정렬 알고리즘
	 * @param arr
	 * @return
	 */
	int[] selectSort(int[] arrParam) {
		int i, j;
		int min_index;
		int temp;

		int arr[] = arrParam.clone();

		for(i=0; i<MAX_LEN; i++) {
			min_index = i;
			for(j=i+1; j<MAX_LEN; j++) {
				if(arr[min_index] > arr[j]) {
					min_index = j;
				}
			}

			if(i != min_index) {
				//값 교환
				temp = arr[i];
				arr[i] = arr[min_index];
				arr[min_index] = temp;
			}

		}


		return arr;
	}

	/**
	 * 버블 정렬
	 * @param arr
	 * @return
	 */
	int[] bubbleSort(int[] arrParam) {
		int i, j;
		int temp;

		int arr[] = arrParam.clone();

		for(i=0; i<MAX_LEN; i++) {
			for(j=0; j<MAX_LEN-1; j++) {
				if(arr[i] < arr[j]) {
					temp = arr[j];
					arr[j] = arr[i];
					arr[i] = temp;
				}
			}
		}

		return arr;
	}

	/**
	 * n개의 중복 되지 않는 랜덤 배열 생성
	 * @param len
	 * @param maxNumber
	 * @return
	 */
	int[] getRandomNumberArr() {
		return getRandomNumberArr(MAX_LEN, MAX_INT);
	}

	int[] getRandomNumberArr(int len, int maxNumber) {

		long seed = System.currentTimeMillis();
		Random rand = new Random(seed);

		int arr[] = new int[len];
		int tempInt;
		boolean validIntInserted;

		if(len > maxNumber) {
			System.out.println("랜덤 배열을 만들 수 없음(배열 길이보다 최대 숫자가 큼)");
			return arr;
		}

		//랜덤 배열 생성
		for(int i=0; i<len; i++) {

			while(true) {
				validIntInserted = true;
				tempInt = rand.nextInt(maxNumber);
				for(int j=0; j<i; j++) {
					if(arr[j] == tempInt) {
						validIntInserted = false;
					}
				}
				if(validIntInserted) {
					arr[i] = tempInt;
					break;
				}
			}

		}

		return arr;

	}


}

 

결과

정렬 전 >> [28, 17, 1, 14, 8, 25, 4, 10, 12, 19, 13, 15]
삽입 정렬 >> [1, 4, 8, 10, 12, 13, 14, 15, 17, 19, 25, 28]
선택 정렬 >> [1, 4, 8, 10, 12, 13, 14, 15, 17, 19, 25, 28]
버블 정렬 >> [1, 4, 8, 10, 12, 13, 14, 15, 17, 19, 25, 28]

관리 공유 : 관리 목적을 위한 기본 공유

 

net share 명령어를 통해 확인한 공유 리소스

 

  • 네트워크에 연결되어 있을 경우 윈도우 NT 계열 운영체제에 의해서 생성 되는 공유
  • 논리 하드 디스크의 숨겨진 공유다
  • 관리자와 컴퓨터 기술 지원자들은 네트워크에 연결된 컴퓨터에 접근하고 서비스를 관리할 필요가 있기 때문에,백업이나 프린터 설정과 같은 작업을 위한 원격접속을 위해 생성된다
  • 관리자 권한이 있어야지만 접근이 가능하다
  • 폴더 이름 뒤에 $가 붙은 것은 숨겨진 "관리 공유"라는 뜻이다

 

윈도우 관리 공유

  • ADMIN$ : 디폴트 시스템 루트 또는 윈도우 디렉토리에 대한 숨은 공유
  • C$ and x$ : 디폴트 드라이버 공유로 C$는 항상 기본으로 공유되어 있다.
  • FAX$ : 파일 서버의 커버 페이지와 다른 파일들에 접근하기 위해 팩스 클라이언트에 의해 사용되는 공유
  • IPC$ : 서버 서비스에 의해 유지 되는 숨겨진 공유
  • PRINT$ : 프린터들이 사용하는 공유

 

IPC$ 공유

  • 서버 서비스에 의해 생성, 유지 되는 숨겨진 공유로, 이 후의 서버로의 명명된 파이프 연결을 위해 존재 한다
  • RPC(Remote Procedure Call)을 사용한 프로세스간 통신에 사용되어, 클라이언트가 서버에 각기 다른 명령을 보낼 수 있도록 해준다 (공유 목록 리스팅, 사용자 리스팅, ..) 
  • 어떤 명령어들은 서버 설정에 따라 NULL 세션을 이용해서 익명으로 접근 할 수 있다.
  • 만약 명령어들이 익명으로 호출 될 수 없다면 클라이언트는 인증을 해야 한다. 클라이언트가 서버 계정에 맞는 적절한 자격을 제공하였다면 접근은 허용된다 ( 사용자명, 패스워드) 
    >> net use q: \\10.0.0.1\c$ [password] /user:[domain\]username
  • 명명된 파이프 : 파이프 서버와 하나 이상의 파이프 클라이언트 간의 프로세스 간 통신을 제공합니다. 로컬 컴퓨터에서 프로세스 간 통신을 제공하는 익명 파이프보다 많은 기능을 제공합니다. 명명된 파이프는 네트워크 및 다중 서버 인스턴스를 통한 양방향 통신, 메시지 기반 통신 및 연결 프로세스가 원격 서버에서 고유한 권한 집합을 사용할 수 있는 클라이언트 가장을 지원합니다.

 

net 명령

  • net share : 서버의 모든 공유 리소스 확인 또는 제거, 네트워크 사용자가 서버의 리소스를 사용할 수 있도록 만듭니다. 옵션 없이 사용되면 컴퓨터에서 공유하고 있는 모든 리소스에 대한 정보를 나열합니다. 각 리소스에 대해 장치 이름 또는 경로 이름, 이와 관련된 설명이 보고됩니다.
  • net user : 서버의 사용자 계정 확인 및 관리
  • net session : 서버에 현재 원격 로그인된 사용자 확인 또는 세션종료
  • net computer : 도메인 데이터베이스에서 컴퓨터를 추가하거나 삭제합니다.

 

 

참고 :

http://smallvoid.com/article/winnt-ipc-share.html
https://support.microsoft.com/en-us/help/3034016/ipc-share-and-null-session-behavior-in-windows
https://www.computerhope.com/jargon/h/hiddshar.htm

'정보보안' 카테고리의 다른 글

[리눅스(Linux)] 비밀번호(패스워드) 정책 설정  (0) 2019.11.22
[스텔스 스캔] ACK 스캔  (0) 2019.10.17
TCP 세션 하이제킹  (0) 2019.08.21
NAT (Network Address Translation)  (0) 2019.08.20
VPN과 IPSec  (0) 2019.08.19

※ 동기 프로토콜과 동기 프로토콜의 차이
   : 송신자와 수신자가 데이터 전송 전에 클락을 동기화 하는지 여부가 가장 큰 차이점이다

 

 

1. 비동기 프로토콜 (asynchronous protocol)

  • 비트 스트림에 있는 각 문자를 독립적으로 다룬다
  • 주로 모뎀에서 사용하며, 시작과 정지 비트, 문자 사이에 가변 길이 갭을 가진다
  • 각 문자는 시작과 정지 비트스를 포함한다. 문자들은 간격(gap)으로 각자를 구분된다. 헤더는 2바이트 (16비트)로 구분된다. 시퀀스 번호와 첨가한다
  • 데이터가 바이트나 문자 형태로 송신 된다
  • 이 전송은 반이중 방식이다
  • 비동기 전송 방식에서는 시작 비트들(start bits)과 중지 비트들(stop bits)이 데이터에 첨가 된다. 동기화가 필요하지 않다

 

2. 동기 프로토콜 (synchronous Protocol)

  • 전체 비트 스트림을 같은 크기의 문자들로 나누어 처리한다
  • 데이터가 블록 또는 프레임 형식으로 전송된다 
  • 전이중 방식이다
  • 송신자와 수신사 사이에서 동기화가 필수다
  • 데이터 사이의 틈(gap)이 없다
  • 이 때문에 많은 양의 데이터를 전송할때, 동기 전송보다 효율적이고 신뢰성이 높다
  • 빠르고, 비용이 많이 드는 방식이다
  • 비트 중심, 문자 중심 프로토콜이 있다

2-1. 문자 중심 프로토콜

  • 프레임 또는 패킷을 문자의 연속으로 해석한다
  • 비트 중심 프로토콜보다 비효율 적이므로 오늘날 거의 사용되지 않는다
  • 수신자는 8비트 (바이트 중심일 경우) 를 적절한 문자라고 생각한다.
  • 오직 아스키 코드를 사용하는 프린터나, 키보드와 통신할 때 사용함
  • BSC(바이너리 싱크로노우스 커뮤니케이션) 프레임 : 컨트롤 프레임, 데이터 프레임

2-2. 비트 중심 프로토콜

  • 프레임 또는 패킷을 비트의 연속으로 해석한다
  • 모든 필드는 임의의 숫자의 비트 크기로 올수 있다
  • 만약 (01111110) 의 플레그를 전송하고 필요 비트들을 뒤이어 전송하고, 플레그로 다시 전송을 종료한다. 이를 통해서 임의의 길이의 비트들을 전송할 수 있다
  • 비트 스터핑이 필요 : 이 때문에 플레그와 같은 데이터를 보내려면 (0이 5번 연속으로 온다면 0을 전송해야 한다) (예 01111110 -> 011111010 )
  • 보다 짧은 프레임에 많은 정보를 전송한다
  • 문자 중심 프로토콜에 있는 투명성 문제 해결한다
  • SDLC, HDLC, LAPs, PPP

  • MTBF
    • Mean Time Between Failure, 고장 간 평균 시간
    • 고장에서 다음 고장까지의 평균 시간을 말한다. 즉 고장이 나지 않은 평균 가동 시간
  • MTTF
    • Mean Time To Failure, 평균 실패 시간
    • 수리한 후 다음 고장 까지의 평균 시간
  • MTTR
    • Mean Time To Repair, 평균 수리 시간
    • 고장 발생 시점에서 수리 시까지의 평균 시간
    • MTBF = MTTF + MTTR

     

  • 이용 가능성
    • 주어진 시점에서 프로그램이 요구에 따라 작동되고 있을 가능성
    • MTTF / (MTTF + MTTR) * 100%

+ Recent posts