데이터베이스
ed 누르면 틀린 명령어 vi로 고칠 수 있음
/+앤터 누르면 이전명령어서 사용 가능
숫자는 오른쪽
문자는 왼쪽으로 정렬됨.
수식검색
SELECT [수식] FROM dual;
‐ SELECT 절에 수식을 사용할 수 있다.
‐ SELECT 절에 컬럼이 없는 경우 FROM절에는 더미 테이블명인 dual을이용한다.
● SELECT문에 FROM절을 생략할 수 없다.
dual→아무것도 없다는 뜻.
예) SELECT 2+3 FROM dual;
별명을 이용한 검색
SELECT 컬럼명 AS "별명",...... FROM 테이블명;
‐ 별명은 헤더의 출력을 지정한다.
‐ AS는 생략가능하다.
‐ "(이중인용부호)가 필요한 경우 → 별명 사용할 때
● 공백이 포함된 경우
● 특수문자가 포함된 경우
● 대소문자를 구분하고자 할 경우
예)
SELECT eno AS "사원 번호", ename AS "이름" FROM emp;
SELECT dno 부서_번호, dname 부서명 FROM dept;
SELECT eno 사번, sal*1.1 "10% 인상급여" FROM emp;
ㄴ 수식짤 때도 알리아스명 붙여야 한다.
수식을 이용한 검색
SELECT eno 사번, ename 이름, sal*12 년간_급여 FROM emp;
SELECT eno 사번, ename 이름, sal*1.1 인상_급여 FROM emp;
‐ 수식을 검색하는 경우 헤더에 수식이 출력됨으로 이런 경우 가급적 별명을 출력하면 가 독성이 높아진다.
‐ 헤더는 응용프로그램 개발 시에 변수명이나 배열의 키로 이용됨으로 프로그램 개발 시 에는 이를 고려한다.
널이 포함된 연산
SELECT eno, ename, sal, comm, sal*12+comm FROM emp;
NULL은 결정되지 않은(알 수 없는, 미지의,..) 값을 의미한다.
‐ NULL의 연산 결과는 NULL이다.
‐ NULL은 공백이나 0 또는 False와 다르다.
‐ 보안상 부정으로 간주될 수 있다.
• NVL 함수
... NVL(칼럼, 치환값) …
‐ 칼럼의 값이 NULL이면 치환 값으로 바꾼다. → 연산자에 따라서 다르게 한다.(항등원으로 치환을 한다. 0 or 1)
‐ sal12+comm → sal12+nvl(comm,0)
검색화면 바꾸는 법
sqlplus설정을 바꿔준다.
sqlplus 출력제어
SET 명령 SET LIN[ESIZE] ##
‐ 한 라인에 출력할 문자의 수
SET PAGES [IZE] ##
‐ 한 페이지에 출력할 라인의 수
. ROW의 개수가 아님
‐ 페이지마다 헤더가 출력된다.
• 컬럼 형식지정 → 숫자타입 데이터은 설정하지 않는다(#으로 나옴)
COL[UMN] 컬럼 FORMAT [A## | 숫자형식]
‐ 컬럼의출력형식을지정한다.
‐ 문자컬럼: A##로출력너비를지정한다.
‐ 숫자컬럼: 0,9를이용해서출력형식을지정한다.
. 단일행 함수에서 자세히 다룬다.
COL[UMN] 컬럼 CLEAR
‐ 컬럼의출력형식을삭제한다.
vi login.sql 만들기 → 개인 설정파일
ㄴ 이거 하면 접속할 때마다 @login해줘야 설정이 먹는다.
cat $ORACLE_HOME/sqlplus/admin/glogin.sql → 자동으로 sqlplus접속할 때마다 실행되게 하는 거 세팅해 둔 곳
연결연산자와 중복의 제거
리터럴 → 값(’’안에 있으면 대소문자 구분함.)
from 이런 건 예약어다.→ 대소문자 구분 안 함.
연결연산자를 이용한 검색
SELECT [컬럼 | '리터럴'] ||, ......
FROM 테이블;
연결연산자(||)는리터럴이나컬럼을하나의문자열로검색한다.
‐ 리터럴이란 SQL문에쓰인문자, 숫자, 날짜를 의미한다.
. 리터럴은 숫자를 제외하고 반드시 단일인용부호를 사용한다.
‐ 연결연산자는 SELECT 문을 이용다양한 문장을 만들 때 많이 사용된다.
‐ 리터럴을 제외한 것들은 예약어이다.
. SELECT, FROM, WHERE, ORDER, ……
예)
SQL> SELECT ename||sal 이름_급여 2 FROM emp;
ㄴ 하나의 데이터로 받는다.
SQL> SELECT ename||' '||sal 이름_급여 2 FROM emp;
ㄴ 사이에 공백 만듦.
SQL> SELECT ename||'의 업무는 '||job||'입니다.' 2 FROM emp;
주의할 연결연산자
SQL> SELECT ename||' '||sal+100 이름_급여 2 FROM emp;
SQL> SELECT ename||' '||sal*1.1 이름_급여 2 FROM emp;
에러: ORA-01722: 수치가 부적합합니다.
‐ 연산자우선순위
- 연산자우선순위 *, / > || > +.-> ……‐ 연산자우선순위와 무관하게 작성!!!
ㄴ 괄호 무조건 치기
Ex. '## ##님의 연봉은###입니다.' 형으로 사원의 급여를 검색
SQL> SELECT eno||ename ||'님의 연봉은 ' 2 ||(sal*12+nvl(comm,0))||'입니다.' 3 FROM emp;
‐ 연산자가 중첩되는 경우 반드시 괄호를 이용해서 가독성을 확보한다
‐ 연산자우선순위를 고려하지 않아도 가독성이 확보되어야 한다.
중복제거
SELECT [DISTINCT | ALL]...... FROM 테이블;
‐ DISTINCT : 중복된 행은 한 번만 검색한다.
. 출력행을 기준으로 한다.
‐ ALL : 중복된 모든 행을 검색한다.(default)
ㄴ 중복되든말든 그냥 다 출력한다.
예)
SQL> SELECT job 업무
2 FROM emp;
SQL> SELECT DISTINCT job 업무
2 FROM emp;
중복과 정렬
ㄴ 중복된 값을 찾는 방법은 정렬을 사용하는 게 좋다.
오라클 빼고는 정렬을 다 한다.
정렬을 하는 경우
- DISTINCT
- ORDER BY
- GROUP BY
- UNION
- JOIN (no index)
패킷 이해
Link Layer 구조
네트워크 인터페이스 계층
preamble, fcs→ 안 보이는 부분
da ~ data까지 프래임이라고 한다.
헤더는 da ~ type, 패일오버값은 데이터
da → 목적지 맥주소
sa → 보내는 놈의 맥주소
type → 보내는 데이터가 어떤 데이터인지 알려주는 거
➢ 네트워크 인터페이스 계층 (계속)
• Type의 대표적인 값들 (0x600 이상의 값 만이 가능함)
- 0800 : IP
- 86DD : IPv6
- 8191 : NetBIOS
- 0600 : Xerox XNS IDP
- 0805 : X.25
- 0806 : ARP
- 0835 : RARP
- 6003 : DEC DECnet Phase Ⅳ
- 8137 : Novell Netware IPX
- 8847 : MPLS
- 8863 : PPPoE Discovery Stage
- 8864 : PPPoE PPP Session Stage
이더넷(Ethernet)
밑에 패킷에서
이더넷
Dest MAC Add (6 byte) : 00 26 66 d5 e1 08
Sour MAC Add (6 byte) : c4 54 44 3a b8 81
Type (2 byte) : 0800 (ip)
인터넷 계층
IP 헤더
Version : 인터넷 프로토콜 버전으로 IPv4는 4, IPv6은 6
Header length: IP 프로토콜 헤더의 길이 (word 단위: 4byte)
Type Of Service
- 교환하는 데이터의 종류에 따라 지연 통신효율, 신뢰성의 우선순위를 지정할 수 있음,
- 데이터그램에 기대되는 QoS(Quality of Service)를 지시하는 8비트 코드
Total Length : IP의 프로토콜 헤더에 계속되는 데이터도 포함한 IP 패킷의전체 길이, 전체 데이터그램의 길이 (Byte 단위)→10진수로 표기
Identification : 호스트가 연속적으로 전송하는 각 데이터그램을 식별하기 위한 번호→ 쪼개지기전에 식별하는 정보
Flags : IP 데이터그램의 분할(Fragment)에 관한 정보를 나타냄→ 쪼개진 친구라는정보, 마지막정보를 가지고있음.
- 첫번째비트 : 사용안함
- 두 번째 비트 : Do not fragment → 내 뒤에 같은 Identification넘버 가진놈이 없다는 뜻(자기가 마지막이라는 뜻.), 이거 쪼개면 안돼요
- 세 번째 비트 : More fragment→ 내뒤에 같은 Identification넘버 가진놈이 있어요
보내는놈이 이거 짜르지마 하는 소리
Fragment Offset : 각 프래그먼트의 원 데이터에 있어서의 위치를 바이트 단위로 나타냄 → 내가 몇번째 바이트로 시작하는 놈입니다 라는거(tcp시퀀스 넘버랑 비슷함.)쪼개진놈의 어느바이트로 시작하는 놈인지 확인
TTL : Time To Live의 약자로 통과가능한 라우터의남은 수, 라우터를경유할 때마다 이 값이 하나씩 줄어든다. → 센더가 붙여서 보내는 숫자(라우터 탈때마다 1씩 줄어들어.10진수로 해석.)
- 각 라우터에의해 감소된다. (값이 0이 되면 데이터그램은 폐기)
- 라우팅 과정에서 무한 루프에 빠지는것을 방지한다.(hop count와 무관)
Protocol Type : 데이터에 포함되는 상위 프로토콜의 종류
- 1 = ICMP
- 6 = TCP
- 17 = UDP
Header Checksum : IP 프로토콜 헤더 자체의 내용이 바르게 교환되고 있는가를 점검(2진수)
Source 및 Destination IP Address : 발신지 및 수신지의 IP Address → 10진수표기
tcp 헤더
Source/Destination Port # : 각 호스트에 있는 응용 프로그램의 포트 번호 → 메시지를 보내는 어플리케이션 포트번호 메시지를 받는 어플리케이션 포트번호
Sequence #(메시지의 바이트 스트림 넘버) : Segment Stream의 첫번째 Byte 번호 (난수)
- 0에서 2에32승-1까지의 번호를 이용하고 어떤 번호를 이용해도 무관하다.
ACK # : 다음에수신할 stream의 첫번째 Byte 번호 (내가 기다리는 시퀀스 넘버)
- NACK가 없다. 누적 ACK를 이용한다.
- 성공적으로 수신한 마지막 byte 번호 + 1이다.
헤더 길이 : TCP 헤더의 길이
- 옵션부분이 가변이므로 헤더의 길이가 바뀔수 있다.
- 보통 크기는 20이다.
예약 : 사용하지 않는 필드
Window size : 흐름제어를 위한 윈도우 사이즈 (리시버 버퍼의 남아있는 사이즈)
urg : 안씀
psh : 안씀
rst : 1이면 다시 시퀀스넘버 보내주세요(세션정보를 초기화 합시다.)
syn : 1이면 3핸드쉐이킹 하는중. 3번쨰 패킷은 데이터 있어도되고 없어도 됨
fin : 접속 끊어요
checksum : 세그먼트 전체 첵섬 값.
예) 50 10 이 나왔으면 (0101 000000 010000)
0101 → 5* 4byte= 20byte 크기
000000 → 예약이라 사용하지 않는다.
010000 → 위에 그림 순서대로 되어있다. 지금은 1이라 ack가 유효하다는 거.
구조는 위에 이더넷에서 부터 tcp까지가 tcp구조입니다.
이걸 예로 하자면
이더넷
dest mac add : 00 26 66 d5 e1 08
sour mac add : c4 54 44 3a b8 81
type : 0800 (ipv4)
IP
version + header length : 0100(4, ip) 0101(5)
Tos : 00
total length : 00 28(40 byte)
identification : 75 10
flag + fragment offset : 4000 (010 0000000000000)
TTL : 80 (128)
protocol : 06 (tcp)
header checksum : 00 00
source IP : c0 a8 0a 09 (192.168.10.9)
destination IP : 7d d1 e6 ee (125.209.230.238)
TCP
source port : ea 05 (59,909)
destination port : 00 50 (80)
sequence : de 37 2c df (3,728,157,919)
ack : d1 b7 92 27(3,518,468,647)
header size : 50 10 (0101 000000 010000)
window size : 40 b0 (16,560)
checksum : 2f 8c (0010 1111 1000 1100)
upoint : 00 00
패킷 분석을 하면 이런식이다.
'kh교육' 카테고리의 다른 글
(20250911050)sql, icmp (0) | 2025.09.11 |
---|---|
(20250910049) 데이터베이스 , 패킷, 해킹 툴 (0) | 2025.09.10 |
(20250908047)데이터베이스, 와이어샤크 (0) | 2025.09.08 |
(20250905046) kali리눅스 (0) | 2025.09.05 |
(20250903046)image (0) | 2025.09.03 |