블로그 이미지
송시혁

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

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





출처 - http://ryusstory.tistory.com/entry/Ethernet-Frame-IEEE8023




프레임 구조

preamble   - 송수신간에 동기화.                                   (8byte)

=> 받는장비와 주는 장비의 동기화를 시켜주는 필드, 패킷을 캡쳐할시는 보이지 않음.



destinaton -                                                          (6byte)

source     -                                                          (6byte)

type       - 프레임의 타입. ipv4 = 0800. ipv6 = 06dd             (2byte)

data       - 데이터                                                   (46~1500byte)

FCS        - 오류검출. 원래 값이랑 다르면 오류로 판정하고 폐기. (4byte)

               데이터 전송간 오류 발생여부를 체크.


802.3 프레임 헤더 - 각 표준마다 헤더의 내용이 다르거나 추가 됨.


1byte SFD가 preamble뒤에 붙은 형태.


junbo(전보) 프레임 1518보다 큰 프레임.

- 고속이 필요할 때 사용




전체 토폴로지

위 토폴로지는 L3장비(L3 switch 포함)없이 L2만으로 통신이 되겠끔하는 것이다. 각 스위치에 PC마다 vlan을 다르게 설정함.


vlan 10 = PC1, 4, 7

vlan 20 = PC2, 5, 8

vlan 30 = PC3, 6, 9


가운데 정중앙 스위치를 각각의 포트를 트렁크로 설정하여 같은 vlan을 가진 PC끼리는 통신이 가능하게 하였다. 

그러나 다른 vlan을 가진 PC끼리는 통신이 안되는 상황이다. 해결책은 원래 2가지이다.


1. L3 스위치나 라우터를 사용함.

2. vlan을 나누지 않는다.


그러나 위 2가지 방법이외에 한가지가 더 있다. 좋은 방법은 아니지만, 스위치 vlan에 개념을 응용하기 위하여 

위와 같은 실습을 진행하였다. 


1. 먼저 정중앙 스위치에 스위치 2개를 더 둔다. 


2. 추가한 2개의 스위치중에 하나를 정중앙 스위치를 trunk로 연결.

3. 그리고 나머지 위에 스위치와는 3개의 포트를 연결한다. 




4. 정중앙 위에 스위치 바로 위에 스위치는 vlan 10, 20, 30을 각각 access port로 설정함.(명령어는 생략)

따라서, 정중앙 스위치에서 tag를 달린 패킷을 전송하면, 바로 위 스위치는 access포트로 설정되어 untag가 된다.

바로 위 스위치는 제일 위에 있는 스위치에게 전송하다가 다시 받아서 정중앙 스위치에게 untag.



제일 위에 스위치를 두는 이유는 access 포트가 무언가에게 전송함으로서 untag시키기 위해 필요한 것일 뿐이다. 

당장에 들어오는 메시지는 tag붙어있음으로 vlan 포트에 맞게 들어온다. 그러나 access를 거치면서 untag 되게 되는 것이다.


access -> untag (위 그림에 빨간색 동그라미)

trunk  -> tag (위 그림에 파란색 동그라미)







자신의 인터페이스 포트가 보이 않을때 다음과 같은 명령어로 확인 가능.



















































































































posted by 송시혁
2018. 5. 28. 14:13 네트워크/database실습




 

 함수의 활용

● dateime, strftime

 

● round(반올림),min, max

 

● count, sum, avg

 

● length, trim, ltrim, rtrim, instr , substr

  - 문자열 관련 trim = 문자열 짜르는것. left, right, 문자열 내부 검색, 문자열 내부 특정한 부분 추출



round(반올림할 수, 소수점 자리수) - 반올림하는 함수.



strftime 함수 


이달의 마지막 날

 

 select strftime('start of monthy', '+1 month', '-1 days');

 =>select strftime('%Y-%m-%d','now', 'start of month','+1 months', '-1 days');

 

 

 본 과정을 시작한 후 경과 일

 - select strftime('%d ', 'now', '-10 days' );

 => select strftime('%j ', 'now') - strftime('%j', '2018-05-10'); 

 

 올해 마지막 날(2018-12-31)의 요일 

 => select strftime('%Y-%m-%d', 'now', 'start of year', '+1 year', '-1 day');



 min, max 

 

 최소값 , 최대값



트랙 테이블에는 각 트랙의 파일 크기( Byte)가 기록되어 있다.

트랙중 파일 크기가 가장 큰 것과, 가장 작은것의 트랙 이름을 구하라.


select min(Bytes) from tracks;

 

select max(Bytes) from tracks;

 

 

 count, sum, avg

 

 count = 세다

 sum   = 합

 avg   = 평균

 



 미국에 살고 있는 고객의 명수

 -select count(country) from customers where country = 'USA';

 

 

 Bluse장르의 트랙 갯수

- select count(TrackID) from tracks where TrackID==6;

 

 invoice_items 테이블에 기록된 주문량(Quantity)의 합계

 -select sum(quantity) from invoice_items;

 

 

 트랙 파일의 평균 크기를 소수점 3자리 표시되고 반올림 처림

 -  select round(avg(Bytes),3) from tracks;


2번째 문제는 잘못됨. 아래 그림의 genreid로 하여야 한다.


문자열 - 왼쪽부터 하나의 알파벳 씩 인데스 값을 가짐.(맨 왼쪽부터 1부터 시작)

 

 length :문자열 길이를 반환

 

 trim('문자','삭제 할 문자')    :문자열의 왼쪽/오른쪽 끝의 문자를 삭제


trim은 원래 공백 제거용이였으나, 문자삭제도 활용 가능하다. 


ex) select trim ('abcdefga', 'a'); 라고 입력시 => bcdefg 를 출력 양쪽 a를 지운다. 

 

 instr('문자','검색할 문자')  :문자열 내 특정 문자열을 검색

  - 문자의 위치를 알려준다. 

 

 substr('문자',문자위치, 위치로부터 출력할 자리수.) :문자열을 특정 위치, 특정 길이로 절단

 

 /abcdef/  


trim은 원래 공백 제거용이였으나, 문자삭제도 활용 가능하다. 


sql의 문자열 인덱스는 1부터 시작한다.  

a b c d e f

1 2 3 4 5

 

trim은 원래 공백 제거용이였으나, 문자삭제도 활용 가능하다. 



rtrim은 right trim으로 문자열에 오른쪽을 지운다. 없으면 지우지 않는다. 



ltrim은 left trim으로 왼쪽 문자열을 지운다. 




 academy로 시작하는 아티스트 이름의 목록을 출력하면서 academy of 문자를 제외하고 출력

 =>  select ltrim(name, 'Academy of') from artists where name like 'academy%';



 직원의 타이틀 중 세번째 문자부터 다섯번 째 문자까지 출력한 목록.

 => select substr(title  ,3, 5) from employees;






 직원의 타이틀 중 문자열 이 시작되는 문자열 인덱스의 목록

 =>  select instr(title, 'Ssru') from employees;



symphony로 끝나는 아티스트 이름의 목록을 symphony 문자를 제외하고 출력함.

 - select name rtrim('symphony','symphony') from artists where name like '%symphony';

 =>  select rtrim(name,'symphony') from artists where name like '%symphony';




트랙의 이름의 길이가 10미만의 목록

 => select name, length(name) from tracks where length(name) < 10;



virsual Box -환경설정-네트워크에서 nat 네트워크 추가 


사설 IP설정



그리고 FreeBSD설치(설치는 생략함)후에 가상시스템 내보내기



파일- 가상 시스템 가져오기를 클릭. 확장자명이 .ova파일을(아래그림에서는 freeBSD.ova) 불러온다. 



vitual machine내에서 모든 네트워크의 MAC 주소 초기화





posted by 송시혁

ps -a 현재 프로세스 모두를 보여줌


whoami - 지금 나의 계정만 보여줌.



du - disk usage, 현위치 또는 지정된 위치의 디스크 사용량


df - disk f, ,파티션 별 디스크 사용량


/usr/ports


make fetch extract




사용자 관리

addusr = 일반 사용자 계정.


pw useradd(user_name_\) -make

pw useradd user2 -m



pw usermod(user_name) -G(group_name)


freeBSD에서는 sudo를 사용하기 위해서는 

sudo를 설치해햐 한다. 


pkg update


pkg install sudo

= sudo를 설치.


계정이 wheel 그룹에 속해 있게 한다. sudo를 사용하기 위해서는 

아래와 같은 명령어를 사용한다.


less etc/group을 실행한다. 아래에 user2계정이 추가된것을 확인할 수 있다. 



그리고 visudo를 실행하면 아래와 같은 그림이 나타난다. 아래에 주석을 풀어준다. 

# %wheel ALL -> %wheel ALL 



vi .shrc = 변경하는 이유는 프롬프트를 설정하기 위함이다.

           디렉토리에 아무것도 나타나지 않으니 사용자가 보기 좋게 패턴을 변경하는 것이다.



















rc.conf에 고정 ip를 추가한다.



ip를 설정한다.


*** etc/resolv.conf ***


- DNS 서버 주소 설정

- 일반적으로 두 개를 설정. 




*** etc/rc.conf ***


현재 시스템의 설정


- hostname

- ifconfig

- defaultrouter = gate way 주소


= 설정한 rc.conf를 적용시키기 위해서, 유닉스에서는 이 명령어로

  start 한다.



계정이 telnet에 접속할 수 있도록 접속해 보자


inetd = 수퍼데몬


자주사용하지 않은 서버는 돌지 않는다.

대기하다가 자기가 가지고 있는 리스트가 존재.

리스트에 해당하는 서비스가 요청이 들어오면 서버를 구동켜준다.


/etc/inetd.conf, /etc/rc.conf를 설정해줘야 한다. 



아래 그림처럼 주석을 푼다. 




마찬가지로 rc.conf파일에 다음과 같이 입력한다. 



설정할 파일들을 적용시키기 위해서 다음과 같은 명령어를 친다. 




sockstat -4


*는 어떤 네트워크가 접속해도 받겠다는 뜻


sockstat -4을 입력하면 다음과 같이 뜬다.


저장된 log가 있는 곳이다.

읽기전용으로 인증.로그를 띄워보자



/etc/issue 파일을 설정하면 된다.


log out시 로그 설정이다. 










'네트워크 > virual_box_freeBSD실습' 카테고리의 다른 글

6월 15일 syslog, 정규식 표현 실습  (0) 2018.06.15
6월 11일 vi 확장자 모드 약간  (0) 2018.06.11
6월 8일 BSD Makefile  (0) 2018.06.08
6월 1일 실습  (0) 2018.06.01
5월 18일 freeBSD 설치 및 실습  (0) 2018.05.18
posted by 송시혁



실습전에 간단한 이론 


VLAN

-> 네트워크 대역을 나누는 것. 

-> 네트워크 대역을 나뉘기 위해 가상으로 방을 만드는 것.


Access VLAN = 하나의 vlan만 속할 수 있다. 한 포트에 하나의 Valn을 설정하는 것.

Trunk  VLAN = 여러 vlan들을 걸칠 수 있다. vlan은 여러 개 지정 하는 모드.


한장비내에서 VALN(VLAN1, VLAN2)을 나누면 VLAN1과 VLAN2는 서로 통신 못함.

- 트렁크 포트를 통해서 나갔다가 다시 들어옴.


장점 = router의 최소화. 비용이 절약.

단점 = 한장비내에서 VALN(VLAN1, VLAN2)을 나누면 VLAN1과 VLAN2는 서로 통신 못함.



Access VLAN

-> 반드시 Access로 설정 해야 하는 port

   -> end-device와 연결된  port 

      (PC, Server 등등)



조금더 추가적인 설명을 하자면 trunk에는 tag(혹은 tagging)라는 꼬리표가 붙는다. 이 꼬리표의 역할은 송수신 메시지가 어느 vlan으로 오고가는지 식별하는 식별자이다. vlan1에서 vlan2로 뭔가의 메시지를 전달하는 경우 trunk를 통해서 외부로 보내고 외부에서 다시 trunk를 통해서 vlan2로 전달한다. 이때 외부로 나갈 때와 내부로 들어올때, 반드시 trunk를 거치며, 그에 따른 tag가 붙게 된다. 




전체 토폴로지 


vlan에는 두가지 모드가 있는데 하나는 access 모드, 나머지 하나는 trunk모드이다.



vlan2,3,4 를 만든다. 아래 그림처럼만 하면 생성된다.


그러나 vlan2,3,4에는 아무것도 없다. 따라서  vlan1내에 있는 포트를 모드 설정을 하고 보내주어야 한다.

아래 그림은 vlan2만 설정한것. 나머지 vlan3, 4도 같은 방식으로 


show vlan을 치시면 vlan0002, 0003, 0004에 포트가 설정됨을 알 수 있다. 



다음은 trunk 설정이다. 


일단, 라우터부터 설정한다. cisco 장비들은 처음에는 shutdown되어 있다. 

설정모드에서 해당 인터페이스를 shutdown을 풀어준다. 



라우터는 원래 외부와의 통신을 하는 장비이고 각 라우터마다 대역이 다르다.  그렇기 때문에 따로 vlan을 

설정할 이유가 없다. 



스위치가 손데야 될게 많다. 해당 인터페이스로 들어간뒤, trunk를 설정한다. 

트렁크 설정시 switchport trunk에서 ?를 치면 allowd/native가 나오는데 여기서는  allowed 그리고 다시 ?를 치면 vlan이 나오고  vlan을 입력하고 ?를 치면 아래와 같은 빨간색 네모를 가 뜬다. 



cisco 장비 같은 경우 all로 설정하면 된다. 


cisco 장비는 vlan을 트렁크를 지정하면 자동으로 나머지 vlan들도 모두 설정된다.

그러나 다른 장비는 vlan을 나머지 add로 일일이 지정해야 한다.

잠시 cisco 장비의 특성을 요약하자면 다음과 같다.


////////////////////////////////////////////////////////////////////////////////////////////////////

access / trunk

->Cisco (Switchport mode가 Dynamic)


->Dynamic

상대편 port 의 상태를 보고 맞춰서 변경 시켜주는 것 


->상대편이 Access로 설정이 되어있다.

  Cisco 장비는 Access(sw mode access를 반드시 쳐야 된다.cisco만 해당)

->상대편 포트가 Trunk로 설정되어 있다. 

  Cisco 장비는 Trunk

////////////////////////////////////////////////////////////////////////////////////////////////////



cisco 장비는 vlan을 트렁크를 지정하면 자동으로 나머지 vlan들도 모두 설정된다.

그러나 다른 장비는 vlan을 나머지 add로 일일이 지정해야 한다. 따라서 아래와 같이

일일이 지정한다. 


해당 트렁크 포트를 제거하려면 remove와 해당 포트번호를 설정하면된다. 아래 그림은 3번을 제거함.



트렁크 설정을 보려면 아래와 같은 명령어를 입력하면 된다. 



라우터의 태그가 설정이 되지 않았다. 


tag 1234뒤에 데이터를 읽어야 하는 상황. 라우터는 vlan을 사용안함.

그래서 명령을 내려야 하다.



IEEE 802.1q 트렁크에 대한 정의(표준)

encapsulation dot1q 번호(vlan 번호)


0번은 아무것도 설정하지 않아도 된다. 그것은 나중에 아래에 나오는 native참고.




라우터에 다시 설정을 해줘야 한다. 일단, 게이트웨이가 설정이 되어 있지 않았다. 각 대역의 따라 설정되어야 되는데,

그럴 때는 포트 번호 뒤에 .을 찍고 해당 vlan 번호를 사용하면 된다. 아래 그림은 vlan 2번을 설정하는 것이다. 다른 것도

동일하므로 생략하였다. 라우터에서는 기본적으로 vlan을 사용하지 않는다. 그러므로 스위치와 트렁크를 하기위해서는 

트렁크할 IP주소를 지정할 필요가 있다. interface (인터페이스 이름/번호.vlan번호)를 치면 된다. 아래에는 

int(interface) GiabitEthernet 0/0.2라고 입력하고 ip를 설정한다. 



show ip interface brief로 확인 가능하다. 물론 지난시간에 배운 show running config도 가능하다. 사용자가 사용

하고 싶은걸로 쓰자.


유의사항은 스위치나 라우터나 인터페이스와 포트에 맞게 설정하는 것이다. PC1이 fastethernet 0/4과 연결 되어있고

PC3이 fastethernet 0/3과 연결된 상태이다. 위 그림인 라우터에서는 gigabitEthernet 0/0.3과 gigabitEthernet 0/0.4는 각각 PC1과 PC3의 ip가  연결된상태이다. 따라서 스위치에서 해당 vlan설정을 바꾸어야 한다. 스위치 포트 vlan을 다시 변경한다.



아래 그림은 바꾼 모습이다. 




native 설정


native vlan


Trunk port에는 native에는 꼭 한나 존재한다. 

이유는 untag로 들어오는 packet을 처리하기 위해서다.


디폴트는 보통 vlan 1번이다. 그래서 위에서 faehernet 0에도 아무런 설정을 하지 않았다. 

하지만 그래도 바꿔보자. switchport trunk 명령어에 allowed가 아닌 native로 설정.



vlan2가 native가 설정되면 vlan 1,2는 현재 untag가 된다. 





다음은 토폴로지에 라우터 대신 L3스위치로 변경하였다.




L3 스위치 = 별다른 설정하지 않았지만, trunk가 설정되어있다. 이미 L2 switch가 트렁크로 설정이 되어있는 상태에서

L3 스위치를 연결하여서 자동적으로 설정된다.(단, CISCO 장비 한해서이다.)


위 그림은 vlan을 만들어서 나와있는 그림 원래는 안되어 있다. 설정모드에서 vlan 2, vlan 3, vlan 4를 입력하면 만들어진다. 그리고 나머지 각 vlan에 대하여 ip만 설정하면 된다. (이 부분 IP주소설정은 동일함으로 생략)



L3스위치에 아래와 같이 routing하면 된다. C는 connect되었다는 것을 의미한다.




다음과 같이 토폴로지를 구성함. (둘다 L2 switch )



오른쪽 Switch에만  access vlan을 10번을 설정하고자 한다. vlan 10을 설정하면 

서로 다른 포트를 한번에 vlan10으로 설정하고자 한다면, range명령어를 이용한다. 

나머지 vlan 설정은 동일한다. 


위 토폴로지는 스위치 1은 vlan1이며, 스위치2는 vlan10으로 설정하였다. (둘다 ACCESS)그러나 통신이 된다. 왜냐하면 각각의 스위치에는 vlan끼리는 통신하는데 지장이 없다

. L2는 mac으로 통신함으로 이점을 유의하면 이해할 것이다. 다만, 한 장비내에서는 VLAN이 다르면 통신이 안된다. 이것만 명심하자!!!






posted by 송시혁




간단한 이론


Window server 

BSD  버클리 대학 계열의 UNIX

Linux 리눅스 (커널 + 보조프로그램, 유틸리티)배포판 CentOS Fedora Ubuntu

솔라리스 오라클 HP-UX


========================================================================================

리눅스 재부팅  = init 6 = reboot = shutdown -r now

리눅스 종료    = init 0 = halt   = poweroff = shutdown -s now

========================================================================================

윈도우 재부팅  =  shutdown -r  = 기본값(60초)후에 재부팅

                    shutdiown -r -t 0 =0초 후에 재부팅 = 지금 당장 재부팅.

윈도우 종료 = shutdonw -s  = 기본값(60초)후에 종료

                 shutdiown -s -t 0 = 0초 후에 종료 = 지금 당장 종료

shutdiown -s -t 0 = 0초 후에 종료 = 지금 당장 종료

========================================================================================  

sysdm.cpl                 시스템 속성

whoami              내가 누구냐? =  무슨 컴퓨터에 무슨 계정으로 로그인 했냐?

whoami /user              SID = 보안 식별자 = 정품 인증 기준이 된다

hostname                  내 컴퓨터 이름이 모냐?

net user                    내 컴퓨터의 모든 계정 나열

net user administrator    administratior의 정보 열람

logoff                      로그오프

========================================================================================

UNC(Universal Naming Convention) - 2000년 이전 쓰는 방식(현재도 널리 사용 됨)

컴퓨터 이름 \ 사용자 이름

2012a10x/administrator


UPN(User Pricipal Name) - 2000년 이후 쓰는 방식

사용자 이름 @ 컴퓨터 이름 

administrator@naver.com



Windows Sever 의 세가지 유형(중요)

1) 독립실행형 서버(Stand Alone Server): 서버를 설치한 직후의 상태

워크그룹(P2P : Peer To Peer)각자가 제각각 관리를 하며, 대신해 줄 수 없다.

역할에 따라 주고 받을 수 있다. 유동적인 역할


특정 시스템이 관리를 하지 않는다.


<예1> 잠시 자리를 비울 목적으로 로그오프(잠금)하지 않고 자리를 비웠을 때

      누군가 데이터를 훼손했다면 누가 책임을 져야 하나?

      자료를 잃어버린 해당 컴퓨터의 사용자


워크그룹  = 독립 샐행형 서버로만 구성된 네트워크

  (장점) 구축이 쉽고, 비용이 저렴하다.

  (단점) 소규모일 때만 가능, 공유 설정은 가각의 서버마다 설정.



<실습>


1. Srv3 컴퓨터 관리 -> 로컬사용자 ->  홍길도 사용자 계정 생성

2. Srv2 [doc폴더] 싱성 후 공유 설정.

3. Srv3 홍길도 계정르로 로그온한 후 srv2의 공유폴더에 엑세스


사용자 전환  = 이전 사용자가 사용하던 설정은 저장된다.(단점 메모리 낭비)




실습



sysdm.cpl                 시스템 속성

whoami              내가 누구냐? =  무슨 컴퓨터에 무슨 계정으로 로그인 했냐?

whoami /user              SID = 보안 식별자 = 정품 인증 기준이 된다




hostname                  내 컴퓨터 이름이 모냐?

net user                    내 컴퓨터의 모든 계정 나열

net user administrator    administratior의 정보 열람

logoff                      로그오프






윈도우에서 계정생성하고 공유하기.




1. Srv3 컴퓨터 관리 -> 로컬사용자 ->  홍길도 사용자 계정 생성


계정추가로 생성하는 모습이다. 이미 "hong"라는 계정이 생성이 되었다.


패스워드 설정. 대문자, 소문자, 번호, 특수, 최소길이 8자리를 충족해야 된다. 


계정이 생성 된것을 확인 할 수 있다. 




sam이라는 파일이 계정의 정보를 관리 하는 파일이다. 디렉토리는 무조건 c:\Windows\System32\config 디렉토리로 고정이다. 

정보보안기사난 각종 시험이 어려운 이유가 이런 디렉토리까지 암기해야 한다는 점이다. 



시작 버튼 누르면 hong이라는 계정으로 되어있다. 사용자 전환으로 hong이라는 계정으로 로그인 하면 아래 그림처럼 된다. 



2. Srv2 [doc폴더] 싱성 후 공유 설정. 


일단 c드라이브나 아무데나 doc라는 폴더를 만들고공유 해보자.

doc는 그냥 폴더 이름일뿐 다른걸로 해도 상관 없다.


고급 공유를 클릭.



공유이름을 지정한다. 공유이름과 폴더명이 같다고 해서 같은게 아니다. 엄연히 다른거다. 편의상 같은이름으로 지정.




doc파일이 공유 목록에 추가 되었다.



아래 빨간줄을 확인하자. 



3. Srv3 홍길도 계정르로 로그온한 후 srv2의 공유폴더에 엑세스


다른 서버에서 실행하자. 그러나 접속되지 않는다. 그 이유와 엑세스 방법은 다음에 포스팅 하겠다. 




posted by 송시혁
2018. 5. 21. 12:26 네트워크/database실습


<Dataytepe(자료형)>


● 새로운 DBMS를 접했을때 가장 먼저 확인 할 사항 중 하나


● DBMS 마다 조금씩 차이가 있음


● 미리 잘효형을 선언 -> 효율적인 자료의 저장 / 이용(검색)




<SQLite2 Datatype>


● Datatype 선언을 (필요로) 하지 않음


● 입력갑에 따라 일정한 규칙에 의하여 자료형을 스스로 선택.


● 구체적으로 명시된 자료형을 이용하여 내부적인 자료형을 선택.



<SQLite3 Datatype - 5 Datatype>


● NULL    : 값이 정해지지 않음, 값이 없음.


● INTEGER : 정수(양수 / 음수), 1/2/3/4/6/8/ byte 크기


● REAL    : 실수(유리수 / 무리수), 8byte 크기


● TEXT    : 문자열, 크기 무한대(메로리, 저장용량)


● BLOB    : 이진자료(Binary Large OBject), 크기 무한대




<SQL DDL>


CREATE TABLE contacts(

           contact_id integer PRIMARY KEY ,

           first_name text   NOT NULL    ,

           last_name  text  NOT NULL    ,

           email text NOT  NULL UNIQUE ,

           phone text NOT NULL UNIQUE

);


이메일(email)테이블은 이메일(email_id)를 주키(primary key)로 가진다.


이메일(email)은 보내는 사람, 받는 사람, 제목, 내용으로 구성되어 있다.


제목을 제외한 항목은 NULL값을 가진다. 


NOT NULL    (이름이나 성이 하나라도 들어가야 됨, 즉 생략을 하지 않겠다는 뜻

NULL UNIQUE (DB에 동일한 이름이 있는 경우, error메시지를 뜨윔. 즉, 연락처나 mail이 

             중복되지 않게 하는 것이다.)

NOT EXISTS = 미리 정의되어 있으니 이걸 사용해야 된다라고 알려주는 속성.


<SQLite DDL - Attribute 조건>


● PRIMARY KEY


● UNIQUE


● NOT NULL


● DEFAULT  

 

● SQLite   


"." = DB 명령어

위의 내용을 입력하면 test_email이라는 DB 테이블이 생성된다. 이부분은 나중에 자세히 포스팅.

 


.schema 테이블 네임 = table에 내용을 간략하게 볼수 있는 명령어.

 

 



 

 


headers : off (제목, 타이틀

 

.mode   : 출력형태의 지정.

 

.stat   : 통계, 메모리, 쿼리 on/off시키는 스위지.

 



--------------- 간단한 개론 ---------------


';'입력하면 빠져나온다.


사칙연산 +.-.*,/,%(나머지), <, >, >= , <=


비교  = ex) select 5=5, 1출력, 5=4; 0을 출력.


출력할 데이터, 출력의 형태를 결정.


--------------- 간단한 개론 ---------------



select 


select title from albums;


select title artists, title form albums; 순서 아티스트, 타이틀 


select artists, title, artistid form albums; 타이틀, 타이틀


select artists*5 from albums;

 

 

 고객(customer)의 이름(FirstName)과 도시(City)의 목록

 -  select firstname, city from customers;

select문으로 custormer내부에 있는 firstname, city의 정보를 불러온 화면.

 

아래그림은 playslists에 모든 내용을 그냥 출력.

 플레이리스(playlists)의 목록

 - select * from playlists;

 

 

select genres로부터 genreid, name만 내용을 출력한다.


<!--[endif]-->

 장르 이름, id 순으로 정리된 내역 (id, 이름순으로 )

 - select GenreID, Name      from Genres;

 - select Name   ,  GenreID  from Genres;




바꿔서 name과 generid를 바꾸서 입력하면 바꿔서 출력한다.

 



테이블 내용 정렬하기 

 

select name , trackid, albumID from tracks;

 

select name , trackid, albumID from tracks

- order by name asc;     오름차순

- order by trackid desc; 내림차순

- order by name, trackid desc; 조건 2개를 줄수 있음. 

: 1차적으로 이름 정력, 2차적으로 trackid로 정렬. (같은 이름인 경우)

 

장르의 이름 순선로 오름차순 정려된 목록

- select name from genres order by name asc;

 

 

 



장르의 아이디를 기준으로 내림차순 정렬된 목록

- select name from genres order by name desc;

 

 

트랙의 앨범 id와 장르 id를 출력하면서,

앨범 아이디를 오름차순으로 먼저 정렬하고,

또 장르 아이디를 내림차순으로 정렬한 목록


 

 select city form custormer;

 

 고객이 살고 있는 국가의 목록(중복없으며, 오름차순 정렬)

 select distinct country from customers order by country asc;

 

 

 

 

 

 -  select albumid, genreid from tracks order by albumid asc, genreid desc;

distinct(중복제거 select)

 selcet distinct(중복제거 select)

 

 

 고객이 살고 있는 국가의 목록(중복없으며, 오름차순 정렬)

 select distinct country from customers order by country asc;


 

 


(조건, 필터링)


 

select tile from alubms where artists < 100;


 

select tile form alubms where artists < 'B'; 

 

select tile form alubms where artists < 100 and title < 'B';


select tile form alubms where artists < 100;

 

문자열을 조건걸때는 '를 사용한다. 이점만 주의 하면 된다. 




<select where>

where는 조건이다. 조건을 주어 조건에 맞는 내용을 출력이 가능하다.


다음은 artistid가 100보다 작고, title제목이 B문자보다 작은 앨범을 찾는것이다. 이것을 동시에 만족시키기 위하여 

and를 사용함. 



장르 아이디가 10이하인것을작은 것 출력. 이하이기 때문에 10도 포함.


아래는 city가 런던인곳만 출력.



 1|MPEG audio file, 



 6|Blues



Blues, MPEG audio file, id를 알고 있기 때문에 track내에서 id로 조건을 건다. 아직 index를 배우지 않았기

때문에 번거로운 과정을 지닌다. 이번시간에는 활용을 연습하는 차원에서 포스팅한 것이다. 






IN(값의 범위)


select albumid, title from albums where albumid=1 or albumid = 2;


select albumid, title from albums where albumid in(1,2); // 2번째 형식이 좀 더 간략하다. 


이것이 in의 활용이다. 길게 사용하는거를 축약할 수 있다.


not in을 사용하면 아래와 같이 1,2,5를 제외하고 전부 출력된다.



아래 그림도 내용은 같다


< 패턴매칭>


like가 동사로 좋아하다이지만, 동사가 아님 부사로 ~처럼이라는 뜻도 있다. 여기서는 ~처럼으로 뜻으로 명령어가 사용 됨.


select albumid, tile from albums whree title like 'A%'; = A로 시작하는 조건


%a= 소문자 a로 끝나는 


 

 %: 0개 또는 1개이상의 문자열

 _: 1개의 문자열

 

 select albumid, title from albums where 


 이름이 A로 시작하는 고객 리스트

  select firstname from customers where firstname like 'J%';


 이름이 J로 시작하고 j를 포함 알바벳 네글자 길이인 고객명

 

 select firstname from customers where firstname like 'J___';



< select limit >

 

select albumid, title from albums limit 10;

- 말그대로 제한이다. 위의 명령어를 치면 albums내에 albumid와 title을 10개씩만 출력.

너무 쉬워서 생략.


offset 개념.

  

select albumid, title from albums limit 10 offset 5; offset은 출력 시작 위치를 지정

  6부터 보고 싶다면 offset을 5로 설정하면 5까지는 보여주지 않고 6부터 출력한다.

  

select albumid, title from albums limit 5,10;  = 위와 동일.





   

트랙 이름을 25개씩 묶어 처리할때, 3번째 묶음 목록. 25개씩 묶었으므로 offset 25를 하면 해당 목록의 25개의 목록을 보연준다. 당연히 26을 하면 한 칸 내려간다. 



문제의 3번째 목록 처음 시작이기 때문에 50을 한다. 





이해를 돕기 위해 그림을 그렸다.


아래 그림은 sqlite를 그래픽화 시킨 도구로 오픈한 모습.

 


QUERY문을 작성하기 위해서는 단축키 ALT + E키를 누르면 된다.




employees들의 나이를 추출하였다. 50이상만 출력.


종업원의 이름과 datatime함수를 이용한 나이를 출력.

 

select firstname, 2018-datetime(BirthDate) from employees ;


나이가 50 이상인 사람


- select firstname, datetime('now')-datetime(BirthDate) as Age from employees where

  (datetime('now')-datetime(BirthDate)) > 50;




 

 

select datetime('now'); = 현재 컴퓨터의 시간날짜

posted by 송시혁

FreeBSD설치 절차.



virtual machine에서 file- 새로만들기를 실행한다. 아래와 같은 그림이 뜬다.


"FreeBSD"를 사용할것이므로 아래 그림처럼 설정.


가상머신에 메모리이다. 그리 크게 잡지 않아도 된다. 아래 그림에는 1024로 되어있지만, 필자는 512로 잡았다.


VHD로 설정.




동적할당. 


하드디스크 크기 설정이다. 그리 큰 용량이 필요없으며, TEST를 위주로 하기 때문에

5GB로잡았다. 이것은 자유이다. 





설치가 되면 우클릭을 하여 설정에 들어간다. 비어있음을 반드시 클릭하자.




빨간색 밑줄그은 부분에 CD아이콘을 클릭하여 FreeBSD이미지 파일을 불러오면 커서(파란색)처러 된다. 이미지 CD-ROM이 삽입된 것이다.



시작 버튼을 누르면 되지만, 혹시나 실행이 안되는 경우 시작버튼 옆에 화살표를 눌러 "떼 낼 수 있도록 시작"을 클릭하자.



네트워크 카드다. 설정이 자동으로 잡혀있다.



gpt설정. MBR은 오래된 파티션 윈7까지는 이걸 사용하였으나, 현재 추세는 GPT설정.




하드웨어 파티션이라고 보면 된다. swap => 가상메모리 물리적 메모리 대체 하기 위한 메모리



dns 설정이다. 일단 ok한다.



보안 관련된 설정이다. 일단, 첫번째 목록은 내가 사용하고 있는 프로세스 목록을 숨기는것. 

이것은 아직 지금 단계에 배우지 않아서 패싱.


설치가 다끝나면 재부팅 되면서 이화면이 뜬다. iso 파일 아직 존재하기 때문이다.

shell을 누르고 검은 리눅스 화면이 생성된다. 그러면 shutdown을 시킨다.(shutdown -p now, 아래 그림은 생략됨)

나머지도 있으나, 미쳐 캡쳐하지는 못하였다.










가상머신과 실제 윈도우상에 마우스가 불편함이 있다. vitrualbox를 클릭하면 그 안에서 마우스가 실행되고, 윈도우로 마우스로 클릭못한다. 보통은 left ctrl키인데 그게 안 먹힐때도 많다. 따라서 직접 설정한다. 설정 법은 아래와 같다. 



아래와 같이 입력- 호스트 키조합에 단축키 란에 클릭하여 옆에 지우개 버튼으로 지운후 빨간줄 처럼 써주자. 

꼭 Shift + Ctrl이 아니어도 된다.






설치가 완료되면 root계정으로 로그인 하자. 필자는 알고 있으므로 생략.


nmap을 설치해보자. FeeBSD에서의 nmap은 /usr/ports/nmap이다. 

여기서 make fetch extract 을 입력하여 설치. nmap 디렉토리안에 Makefile이 있는데 그렇게 설정이 되어 있다.

아래는 설치가 되고 있는 장면. 아무것도 없기에 운영체제에서 라이브러리 소스도 받고 컴파일도 자동적으로 된다.



완료되면 아래처럼 폴더가 생성된다. 





이번에는 echo 명령어. 기본적으로 echo명령어는 만약에 "echo abc" 를 압력하면 "abc"를 반환. 에코는 뭔가를 반환한다.


ehco 명령어를 담당하는 sourec code 디렉토리는 /usr/src/bin/echo이다. 




which ls

- 어느 ls인지 물어보는 명령어. 여기서는 usr/bin에 위치.


env - 환경 변수

env를 치면 아래와 같은 파일이 열어진다. PATH를 주목. 윈도우로 따지면 환경 변수에 있는 PATH이다. 빠져나와서

echo PATH를 치면 env내에 있던 PATH가 출력됨을 알 수있다. 




whoami = 나의 계정이름을 모를 때 쓰는 명령어.

who      = 현재 접속자에 계정정보가 나옴.

w          = 현재 접속자에 로그인 정보가 나옴. 





파일 만드는 법이다. 통상적으로 mkdir을 많이 사용하지만 여러가지 방법이 존재.


아래 그림을 참조. 


echo명령어를 응용할수도 있다. echo line1 > file2를 보면 echo는 line1을 반환하면서 file2에 리다이렉션(>, 여기서는 file2fh 보낸다라고 생각하자)한다. 그러면 file2에는 line1이라고 내용이 적혀져있다.




file2 실행결과

여기서 less 명령어는 읽기 전용으로 파일을 열 때 사용하는 명령어.



ls -l명령어를 리다이렉션을 하면 ls -l이 수행하는 출력내용을 file3에 write된다. 



cat 명령어

cat은 연립하다. concation의 약자이다. 

cat > file6 <<@@@@로 입력한다.


처음에 ?가 뜨면서 파일에 쓸 내용을 입력이 가능하다. 아래 그림에서 line100,101, 102를 write를 하고 <<@@@에서 설정

@@@입력하면 종료된다.  file6에는 line100,101,102의 내용이 들어가 있다. 



mv와 cp 명령어 응용

위 그림처럼 mv file3_copy file_moved라고 입력하면 file3_copy가 file_moved라고 바뀐다. 윈도우에서 처럼 rename기능이 없어서

이렇게 한다. 보통 mv는 디렉토리가 다르면 이동한다.




uname

- 어떤 OS인지 알려준다. 


아래 그림은 uname -a




df    = 파티션

df -h = 현재 파티션을 보는데 사람이 알아볼수 있게 한다.



좀 더 응용해서 du -h /usr/ports라고치면 /usr/ports내에 파일들의 용량을 합쳐서 계산해 준다. 


sort는 정렬하다는 명령어. 단어 자체가 정렬이다. 




아래그림은 passwd파일이다. 




nano 편집기



pkg update = 패키지를 다운.

pkg search nano

pkg install nano

를 해야 nano편집기를 사용 가능하다. 





etc/motd = 로그인시 나오는 문구 파일들만

motd는 로그인시 나오는 로그 화면에 출력해주는 파일이다. 이것도 사용자가 수정가능하다.




dmesg

dmesg : less = 긴 파일을 




$이면 일반계정

#은   계정 


posted by 송시혁


전체 구성도


스위치 설정.


VLAN 1번과 Fa0/1 포트가 들어가 있는 것을 확인 할 수 있다.


그러므로 아래와 같이 설정함.  ip나 기타 설정은 반드시 config mode(설정 모드)로 진입한다.

interface vlan 1입력하고 아래와 같이 ip address를 입력한다. , 반드시 서브넷을 입력한다.

 

그리고 no shutdown을 입력하여 현재 설정을 입력한다




라우터의  ip설정도 동일하다. 다만 인터페이스 포트만 잘 확인 하여야 한다. 다만, ip 설정시 게이트웨이 ip주소로 설정한다. 그 이유는 다른 대역과 통신하기 위함으로 게이트웨이 주소가 필요하다. 그리고 ip를 설정하면 반드시 no shutdown을 

해야 된다. 그렇지 않으면, shutdown이 되어서 통신할 수가 없게 된다. 



스위치 ip설정이 되면, ping을 치면 아래와 같이 나타난다. "."은 통신이 안된다는 것이다.

"!"가 통신이다. 아래 그림에서 "."이 나타난 이유는 mac-table에 아무것도 등록이 되어있지 않으므로 DLF현상이다. 다시 한 번 똑같은 명령을 치면 동작이 잘 된다는 것을 확인 할 수 있다.





이제 telnet으로 접속하기 위하여 설정을 해보자. 

switch에 vlan에 IP를 설정한 이유가 Switch를 원격 제어하기 위함이다.

스위치 0에 원격 제어를 위하여 telnet을 설정하는 화면이다

"line vty 0 4"를 입력하면 해당 switch에 대한 원격 제어 설정이 완료 된다.




ip telnet 같은 설정이 끝나면 반드시 저장을 해야 된다.


"copy running-config startup-config"를 입력하여 현 config설정을 저장한다. 그러면 filename을 무엇으로 할것이냐고 묻지만, 시뮬레잉션이기 때문에 enter를 입력한다.

 

"wr"로 입력해도 되나, 이것은 덮어쓰는 기능으로 이전 config설정이 바뀌는 위험이 있다. 왠만하면 "copy running-config startup-config"을 입력하도록 하다.


설정된 config를 불러오고 싶으면 전체모드에서 "reload"를 입력하면 된다. -(그림 생략)

 

 

라우터 설정도 동일함으로 생략.




아래 그림에서 "show running-config" 입력하여 현재 설정된 config를 볼 수 있다.

빨간줄에 그어진 것처럼 이 스위치에 원격 telnet이 설정 됨을 알 수 있다. 



PC0 cmd창에서 telnet 접속한 화면이다. PC0 콘솔에서 스위치 IP 192.168.1.50을 입력하여 접속.

password는 보안상의 문제로 우리가 입력해도 보이지 않으니,  위에서 설정한 "1234"를 입력한다.




아래 그림은 "end" "exit"의 차이점을 보여준다.

현재 config-if모드이나, end를 입력하면  바로 privillage 모드로 진입한다. 그러나 "exit"를 누르면 한 단계 위인 config 모드로 진입하게 된다.



아래 그림처럼 PC는 같은 대역인 192.168.2.3(swtich_2)의 원격 접솝은 가능함. 그리고 PC1과 PC2의 대한 디폴트 게이트 웨이를 설정함으로 서로간에 통신이 가능하다. 그러나 현재 PC2에서 switch1에 대한 telnet 접속이 안된다. 그 이유는 switch1에 게이트웨이가 설정이 안 되어 있기 때문에 PC2에서 switch1에 대한 원격 제어는 불가능하다.


아래 그림은 스위치1에 대한 디폴트 게이트웨이를 설정.




PC2에서 telnet 192.168.1.50(switch1)에 대한 원격 제어가 가능해진다. 



그러나 이 상태(CMD 창)에서는 접속만 가능할 뿐, 아무런 명령어도 먹히지 않는다. 그 이유는 바로 switch에 enable password를 설정 하지 않았기 때문이다.  그래서 아래와 같이 설정해주면 된다.


posted by 송시혁
2018. 5. 14. 19:57 네트워크/database실습


ER 다이어그램이다. 대략 해석하면 다음과 같다.


meadia_types은 트랙(tracks)들이 없을 수도 있고 여러개일 수 있다.
트랙은 하나의 미디어 타입을 가진다.

 

한 장르(genres)는 트랙이 없을 수도 있고 여러개의 트랙일 수도 있다.
트랙(track)은 장르(genres)가 없거나 한 개이다.

 

playlist_track은 반드시 한개의 트랙(track)을 가진다.
트랙(track)은 playlist_track가 없거나 한 개이다.

 

playlists는 playlist_track이 없거나 한 개만 있다.
playlist_track은 하나의 playlists가 있다.

 

트랙(track)은 invoice_items이 없거나 여러개가 있다.
invoice_items는 반드시 한개의 트랙이 있다.

 

트랙(track)은 앨범(albums)이 없거나 한 개만 있다.
앨범(albums)들은 트랙이 없거나 여러 개가 있다.

artists는 앨범이 없거나 여러 개가 있다.


앨범은 반드시 한 명의 artist가 존재한다.

invoice는 invoice_items이 없거나 여러 개가 있다.
invoice_items는 반드시 한개 invoice가 있다.

 

invoice는 한명의 고객(customers)이 있다.
고객(customers)은 invoice 없거나 여러 개가 있다.

 

고객(customers)은 고용인(employees)이 없거나 한 명 있다.
고용인(employees)은 고객(customers)이 없거나 여러개가 있다.

 




관계형 그림



 

relationship - 그냥 관계가 있다는 정도

 

one            - 말그래도 한 개.

 

many          - 여러 개 가능.

 

one and ONLY one - 한 개 혹은 반드시 한 개. 그냥 무조건 한 개.

 

Zero or One - 0 또는 1

 

One or Many -  한 개 이상, 여러 개. 한 개 일수도 여러 개 일수도.

 

Zero or Many -  0이거나 여러 개이거나












































posted by 송시혁




#include
 <stdio.h>
#define WIN32
#include <pcap.h>



#pragma  comment(lib, "wpcap.lib"//윈도우용 gcc -o .. .. -lpcap

int main()
{
  
  pcap_if_t *alldevs;
  pcap_if_t *d;
  int inum;
  int i;
  pcap_t *adhandle;
  char CaEbuf[PCAP_ERRBUF_SIZE];  
  char * cPdev;

/*  cPdev=pcap_lookupdev(CaEbuf);

  if(0==cPdev)
  {
    printf("[%s]\n", CaEbuf);
    return 0;    
  }
  printf("lancard name:[%s]\n", cPdev);*/


  
  if( -1==pcap_findalldevs(&alldevs, CaEbuf) )//장치 전부 검색. 첫 번째 인자가 검색된 랜카드이름 정보.
  {
    printf("Error in pcap_findalldevs: %s\n", CaEbuf);
    return 0;
  }
  
  
  for(d=alldevs, i=0 ; d!=0 ; d=d->next)  //d가 0이 아니면 
  {

    //printf("%d. %s\n", ++i, d->name);//랜카드번호를 출력하는 부분.
    printf("Ethernet adapter %s\n", d->description);

    

    /*if (0!=d->description)
    {
      printf(" [%s]\n", d->description);//ethernet 설명 부분. 
    }
    else
    {
      printf(" [설명 없음]\n");
    }*/

  }
  
  return 0;
}






posted by 송시혁
prev 1 2 3 4 5 6 7 8 next