kh교육

(20250909048)데이터베이스, 패킷 이해

boangod 2025. 9. 9. 17:51

데이터베이스

 

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