OS : Amazon-Linux


EC2 Instance 생성 후, root 비밀번호는 설정 되어 있지 않음

root계정 로그인 후


1. 계정 생성

adduser test

passwd test


2. ssh key 복사

mkdir /home/test/.ssh

cp /home/ec2-user/.ssh/authorized_keys /home/test/.ssh


3. 소유자, 그룹 소유자 변경

chown -R test:test /home/test/.ssh


4. sshd_config 설정

vi /etc/ssh/sshd_config

.

.

# To disable tunneled clear text passwords, change to no here!

#PasswordAuthentication yes

#PermitEmptyPasswords no

# EC2 uses keys for remote access

PasswordAuthentication no -> PasswordAuthentication yes //no를 yes로 변경

.
.

5. sudo 권한 추가(선택)
vi /etc/

.

.

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

test    ALL=(ALL)       ALL //root 계정 밑에 추가하기

.

.


6. sshd 재시작

service sshd restart

'개발 > AWS' 카테고리의 다른 글

AWS - 파일질라 FTP/SFTP 연결하기  (0) 2017.04.09

참고 : 생활코딩


# include 와 require 는 파일을 로드 할 때 사용하는 명령어이다.

차이점은 

include가 warning을 일으킨다.

require은 fatal error를 일으킨다.

_once 붙은 것은 파일을 로드 할 때 단 한번만 로드하면 된다는 의미이다.

include

include_once

require

require_once


# namespace 라는 키워드는 동일한 함수의 이름을 하나의 php 애플리케이션 안에 사용할 수 있게 만든다.


# 파일복사 

리눅스일 경우 파일을 가지고 있는 디렉토리의 권한을 chmod 753 . 명령어를 실행시켜야만 파일이 복사된다.

원래 /var/www/html디렉토리의 권한은 chmod 755로 되어있다. 하지만 copy()함수를 사용하기 위해서는

디렉토리의 파일허가권(소유자,그룹,그외 사용자)부분에서 그외 사용자에 대해 쓰기(w)와 실행(x) 권한이 필요하다.

다른 방법으로는 chown 명령어로 소유자를 바꿔주면 된다.


1. 소스코드 

<?php

$file1 = 'test.txt';

$file2 = 'example.txt';


if(!copy($file1, $file2)){

  echo "failed to copy {$file1}...";

}

?>


2. 디렉토리 권한을 주지 않거나 소유자 변경을 안한경우

Warning: copy(example.txt): failed to open stream: Permission denied in /var/www/html/test.php on line 5 failed to copy test.txt...


3. 디렉토리 권한을 주거나 소유자 변경을 한경우 위 경고가 나오지 않으면서 test.txt 라는 파일내용을 복사해 example.txt 라는 파일을 생성시킨다.


# 파일삭제 

파일삭제 또한 마찬가지로 

디렉토리의 권한 그외 사용자에 대해 쓰기(w)와 실행(x) 권한이 있어야 한다.

다른 방법으로는 chown 명령어로 소유자를 바꿔준다.


1. 소스코드

<?php

unlink('example.txt');

?>


2. 디렉토리 권한을 주지 않거나 소유자 변경을 안한경우

Warning: unlink(example.txt): Permission denied in /var/www/html/test.php on line 2


3. 디렉토리 권한을 주거나 소유자 변경을 한경우 example.txt 라는 파일은 삭제된다.


#파일 읽기 / 파일 쓰기

file_get_contents() 텍스트로 이루어진 파일을 읽어서 문자열을 리턴한다 (내부,외부)

file_put_contents() 쓰기, 화면에는 글자수 리턴한다.

fopen()

fread()

fwrite()


#파일 제어 트러블 슈팅

복사,삭제,읽기,쓰기에 대해 permission denied가 나온다면

chown 명령어를 통해 디렉토리 소유자를 root에서 바꿀 소유자 명으로 지정해주면 된다.

ex) chown apache .

다른 방법으로는 chmod 명령어를 사용해서 그 외 사용자 대해 wx권한을 주면 된다.

ex) chmod 753 .


#디렉토리 제어

getcwd()   :현재 디렉토리 출력

chdir('../') :상위 디렉토리 이동

scandir()   :파일과 디렉토리를 배열로 리턴, 두번째 인자는 순서

mkdir()     :디렉토리 생성 ex)mkdir("1/2/3",0700,true) 디렉토리명,권한설정, recursive인자(true)


#파일 업로드, move_upload_file

참고 : 

http://home78.cafe24.com/tc/tag/163

https://opentutorials.org/course/62/5136


#문자열 다루기

strpos()


#정규표현식

특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어

programming language나 text editor 등에서 문자열의 검색과 치환을 위한 용도로 쓰임

정규표현식에서 사용하는 기호를 Meta문자라고 한다.

참고 :

https://opentutorials.org/course/909/5143

https://opentutorials.org/course/62/5141

http://www.nextree.co.kr/p4327/

연습 :

http://regexr.com

'개발 > php' 카테고리의 다른 글

php - 1  (0) 2017.04.05

참고 : 생활코딩


# 문자열을 표현할 때에는 '' or "" 사용

차이점은 

'' 경우 문자열로 인식한다.

"" 경우 문자열에서 치환할 곳을 찾아내어 값을 넣는다.

$d 부분에 $a를 보면 중괄호{} 안에 있지만 $e 부분처럼 사용 안 할 수 있다.


1. 소스코드

<?php 

$a='a';

$b='b{$a}';

$c='c$a';

$d="d{$a}";

$e="e$a";

echo $a. "<br />";

echo $b. "<br />";

echo $c. "<br />";

echo $d. "<br />";

echo $e. "<br />";

?>


2. 출력화면


# 결합시킬 때에는 '.' 을 사용


1. 소스코드

<?php 

$a="abc";

$b="def";

echo "123"."456". "<br />";

echo "Hello"."World". "<br />";

echo $a.$b. "<br />";

?>


2. 출력화면



# echo 와 print

차이점

echo는 하나 이상의 문자열을 출력하며 리턴값 없음.

print는 하나의 입력값을 받으며 '1'이라는 값을 리턴, 괄호()를 넣어서 사용하거나 없이 사용가능함.


1. 소스코드

<?php 

echo "abc","def". "<br />";

echo "abcdef". "<br />";

print "abcdef". "<br />";

print("abcdef"). "<br />";

var_dump(print "abcdef". "<br />");

?>


2.출력화면


# var_dump(), var_export(), print_r() 함수

var_dump(), var_export(), print_r() : 배열이나 객체를 문자열로 출력할때 사용, 디버깅용 함수로 적합.

참고 :

https://chongmoa.com:45183/php/5130


1.소스코드

<?php  

$var = array(1,2,3,4,5);

var_dump($var);

echo "<br />";

var_export($var);

echo "<br />";

print_r($var);

?>


2.출력화면



# define() 함수를 사용해서 상수를 정의할 수 있다.

상수가 한번 정의되면, 변경하거나 해제 할 수 없다.


1.소스코드

<?php  

define("title","Hello world!");

echo title;

?>


2.출력화면


# const 키워드도 상수를 정의 할 수 있다.

PHP5.3.0 부터 사용 가능

함수, 루프, if구문, try / catch 블록 안에서는 선언 불가.

컴파일 시에 정의되기 때문에 최상위 영역에서 선언.


1. 소스코드

<?php  

const title = "Hello world!";

echo title;

?>


2. 출력화면


# gettype() 함수와 settype() 함수

gettype() 함수는 데이터타입을 보여준다.

settype() 함수는 데이터타입을 바꿀 수 있다.


1. 소스코드

<?php  

$var = 1;

echo gettype($var). "<br />";

settype($var,'string');

echo gettype($var). "<br />";

?>


2. 출력화면


# 변수의 이름조차도 가변적으로 바꿀 수 있다.

 

1. 소스코드

<?php  

$stage = 'level1';

$$stage = 'level2';

echo $level1;

?>


2. 출력화면


# '=='와 '==='의 비교

차이점

==(Equal) : 서로 같다(단순 데이터 비교)

===(Identical) :서로 같고, 자료형도 같다 (단순 데이터 비교, 자료형까지 비교하여 엄격히 비교)

'===' 비교연산자를 사용하는게 보안상 좋다.

참고 :

http://vucket.com/index.php/topic/view/51


1. 소스코드

<?php 

$a = '1';

$b = 1;

if ($a == $b) {

     echo "true". "<br />";

} else {

     echo "false". "<br />";

}

if ($a === $b) {

  echo "true". "<br />";

} else {

  echo "false". "<br />";

}

?>


2. 출력화면



# 0외에 값이 없는 배열, 빈문자열("",''), NULL, 문자 0 등도 0으로 간주 된다.

empty() : 변수가 비어있는지 확인 (값이있으면 FALSE)

is_null() : 변수가 NULL인지를 확인 (NULL이 아니면 FALSE)

isset() : 변수에 값이 존재하고, NULL 이 아닌지 확인(NULL일 경우 FALSE)


1. 소스코드

<?php  

$var = 1;

var_dump(empty($var));

var_dump(is_null($var));

var_dump(isset($var));

?>


2. 출력화면


'개발 > php' 카테고리의 다른 글

php - 2  (0) 2017.04.06

함수호출규약


- 함수호출규약(Function Calling Convention)이란?


함수를 호출하는 방식에 대한 일종의 약속이다. 인수 전달 방법, 인자 전달 순서, 인자 정리 방법에 따라 그 종류를 구분한다

호출하는 쪽과 호출되는 쪽의 어느 한쪽이 약속을 어길 경우 함수도 제대로 동작하지 않으며 메모리가 엉망이 되기 때문에

프로그램을 정상적인 실행을 계속할 수 없다.


- 스택프레임

스택프레임을 보면 높은 주소에서 낮은 주소로 쌓여지며, 함수를 호출 할 때 마다 새로운 스택프레임이 생성되는 것을 볼 수 있다. 


- 함수 호출시 스택의 변화순서



- 함수 호출 규약의 구분


인자 전달 방법 : 스택 / 레지스터

인자 전달 순서 : 역방향(←)

인자 정리 방법 : Caller, Callee


* Caller(호출자) : 다른 함수를 호출한 함수

* Callee(피호출자) : 호출을 당한 함수


- cdecl

C언어와 C++에서의 표준 함수 호출 규약이다.

Caller가 인자를 정리하며, printf() 함수와 같은 가변 인자 함수를 사용 가능하다.

인자 전달 방법 : 스택

인자 전달 순서 : 역방향(←)

인자 정리 방법 : Caller


소스코드


어셈블리코드


- stdcall

Window API, Visual Basic에서 사용하는 표준 함수 호출 규약이다.

코드가 간결하고 가변 인자 함수를 사용할 수 없다.

인자 전달 방법 : 스택

인자 전달 순서 : 역방향(←)

인자 정리 방법 : Callee


소스코드


어셈블리코드


- fastcall

Delphi 에서 사용되는 함수 호출 규약이다.

인자 2개까지는 레지스터(ECX, EDX)를 사용해서 인자를 전달하므로 속도가 빠르다.

인자 3개 이상일 경우 스택과 함께 사용한다.

인자 전달 방법 : 스택 + 레지스터

인자 전달 순서 : 역방향(←)

인자 정리 방법 : Callee


소스코드


어셈블리코드





'보안 > 리버싱' 카테고리의 다른 글

Reversing -2 레지스터  (0) 2017.02.01
Reversing -1 어셈블리언어  (0) 2016.05.16


레지스터


레지스터란?

중앙처리장치(CPU)가 데이터를 처리하는 동안 중간 결과를 일시적으로 저장해 두는 고속 기억장치를 말한다.

중앙처리장치 내부에는 각 용도에 맞는 다양한 레지스터가 존재하며 연산처리 및 주소지정을 도와준다. 

크기는 레지스터마다 다르지만, 보통 32bit(4byte) 이다.


범용 레지스터


EAX

 EBP

EBX

 ESP

ECX

ESI

EDX

EDI


EAX, EBX, ECX, EDX 레지스터

EAX, EBX, ECX, EDX 레지스터는 위와 같이 나누어 사용 할 수 있다.


16bit 운영체제 시절에는 AX, BX, CX, DX와 같이 레지스터에 E를 붙이지 않고 불렀지만 

32bit로 확장되면서 E(Extended)가 앞에 붙어 EAX, EBX, ECX, EDX 등으로 부른다.

 64bit 경우에는 E대신 R을 붙인다. AX 레지스터의 상위부분(High)AH라고 하고 하위부분(Low)AL이라고 한다.


EAX (Extended Accumulator Register)

: 누산기 기능

: 산술·논리연산 저장

: 함수가 호출될 시 리턴 값이 저장되는 공간


EBX (Extended Base Register)

: 간접 주소 지정 시 사용된다. (특정 주소 저장)

: 산술·논리연산 저장


ECX (Extended Counter Register)

: 명령의 반복수행이 필요로 할 때 반복횟수 지정에 주로 사용

: ECX에 넣은 값은 한번 반복될 때 마다 1씩 감소하며 ECX > 0 조건을 만족할 때까지 반복


EDX (Extended Data Register)

: EAX 보조 역할(곱셈, 나눗셈을 할 때 보조 누산기로 사용)

: EAX에 들어가는 리턴 값이 32bit를 넘을 경우 나머지를 EDX에 저장


포인터 레지스터 //스택과 관련이 있는 레지스터


EBP (Extended Base Pointer)

: 스택프레임의 기준점이 된다.

: 스택 프레임을 사용하는 동안 EBP의 값은 변하지 않고 스택 프레임이 소멸되면 이전의 스택 프레임을 가리키게 된다.


ESP (Extended Stack Pointer)

: 스택프레임의 최상단의 주소를 가지고 있다.

: 현재까지 사용된 스택의 위치를 저장하는데 사용된다.


EIP (Extended Instruction Pointer)

: 다음에 실행할 명령어의 주소를 가지고 있다.

: CS 세그먼트 레지스터와 한 쌍이 되어 실행주소를 참조한다.

: 버퍼 오버플로우 공격에 사용되는 레지스터


인덱스 레지스터 //문자열과 관련이 있는 레지스터


ESI (Extended Source Index)

: 복사 혹은 비교를 하는데 사용되는 출발지의 문자열 주소가 들어간다.

EDI (Extended Destination Index)

: 복사 혹은 비교를 하는데 사용되는 도착지의 문자열 주소가 들어간다.


플래그 레지스터 //연산 결과 및 시스템 상태와 관련된 여러 가지 플래그 값을 저장하는 레지스터


EFLAGS (Extended FLAGS) 상태 값이 0이면 Clear 1이면 Set이라고 한다.


상태 플래그(Status Flag)

AF(Auxiliary carry Flag) : 10진수 연산에서 자리 올림/내림이 발생할 때 Set(1) 된다.

CF(Carry Flag) : 연산 결과, 자리 올림/내림이 발생할 때 Set(1) 된다.

OF(Overflow Flag) : 정수형 결과 값이 너무 큰 양수이거나 너무 작은 음수여서 피연산자 데이터 타입에 들어가지 않을 경우 Set(1)된다.

PF(Parity Flag) : 연산 결과, 1(binary)의 개수가 짝수 개일 때 Set(1) 홀수 개일 때 Clear(0)이다.

SF(Sign Flag) : 연산 결과, 최상위비트가 1일 때(음수) Set(1)되고, 양수이면 Clear(0)이다.

ZF(Zero Flag) : 연산 결과, 0이면 Set(1)되고 아니면 Clear(0)된다.


세그먼트 레지스터 //세그먼트 영역의 메모리에 주소를 지정하며 크기는 16bit


CS (Code Segment) : 코드 세그먼트의 시작 주소를 가리키며, Instruction Pointer(IP) 레지스터가 가진 offset 값과 합쳐서 실행을 위한 명령어의 주소를 참조

DS (Data Segment) : 데이터 세그먼트의 시작 주소를 가리키며, AX, CX, DX, SI, DI 레지스터와 합쳐서 데이터 영역의 주소를 참조하게 된다.

SS (Stack Segment) : 스택 세그먼트의 시작 주소를 가리키며, SP 혹은 BP 레지스터와 합쳐서 스택 영역의 주소를 참조하게 된다.

ES(Extra Segment) : 데이터 관련 확장 레지스터로 주로 문자 데이터의 주소를 지정하는데 사용한다.

FS : 데이터 관련 확장 레지스터로 TIB(Thread Information Block)의 정보를 가지고 있다.

GS : 데이터 관련 확장 레지스터

'보안 > 리버싱' 카테고리의 다른 글

Reversing -3 함수호출규약  (0) 2017.02.01
Reversing -1 어셈블리언어  (0) 2016.05.16

QR 코드 생성하기


- ZXing 라이브러리 추가하기

1. bulid.gardle(Module: app) 을 더블클릭합니다.

2. dependencies 안에 zxing 라이브러리를 추가 시킵니다.

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.google.zxing:core:3.2.1'
compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
}

3. Sync Now를 클릭해 동기화 시킵니다.


- ZXing 라이브러리 추가 확인하기


1. app 우클릭해서 Open Module Settings 클릭합니다.



2. Modules 목록에 있는 app을 클릭하면 상단 바에 여러 목록이 중에 Dependencies를 클릭하면 아래 화면에 ZXing라이브러리가 추가된것을 확인가능. 



- 새로운 액티비티 생성


1. 액티비티 생성하기(QrActivity)



- Coding


MainActivity.java


public class MainActivity extends AppCompatActivity {

private Button button;
private EditText editText;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final Context context = this;
editText = (EditText) this.findViewById(R.id.editText);
button = (Button) this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text2Qr = editText.getText().toString();
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
try {
BitMatrix bitMatrix = multiFormatWriter.encode(text2Qr, BarcodeFormat.QR_CODE,200,200);
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
Intent intent = new Intent(context, QrActivity.class);
intent.putExtra("pic",bitmap);
context.startActivity(intent);
} catch (WriterException e) {
e.printStackTrace();
}
}
});
}
}


activity_main.xml


<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Generate"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />


QrActivitiy.java


public class QrActivity extends AppCompatActivity {

private ImageView imageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qr);
imageView = (ImageView) this.findViewById(R.id.imageView);
Bitmap bitmap = getIntent().getParcelableExtra("pic");
imageView.setImageBitmap(bitmap);
}
}


activity_qr.xml


<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />

- 출력화면



- 참고사이트

https://www.youtube.com/watch?v=-vWHbCr_OWM


Wireshark


- Wireshark 다운로드 https://www.wireshark.org/#download


Wireshark install


1. 위의 링크에 들어가 자기에게 맞는 버전을 다운로드



2. 설치 과정

012345678


3. 실행 화면





Wireshark interface instruction


1. 실행 화면에서 이더넷 부분을 더블 클릭하면 패킷 캡쳐를 시작



2. 메뉴바

순서대로, 보면

- 패킷 캡쳐 시작(Start capturing packets)

- 패킷 캡쳐 정지(Stop capturing packets)

- 패킷 캡쳐 재시작(Restart current capture)

- 캡쳐할 인터페이스 선택(Capture options)


3. 와이어샤크 화면 


Packet List 영역위에 있는 필터창을 통해 자기가 원하는 정보를 걸러서 볼 수 있다.


4. 문자열 검색


Edit - Find Packet..메뉴를 클릭하고 드롭다운리스트 중에서 3번째(빨간색 네모 부분)을 String으로 설정한 후 

옆에 있는 검색창을 통해 원하는 문자열을 검색 할 수 있다.


- 필터 구문

 ip.addr == 192.168.0.123

 출발지나 도착지 IP 주소로 검색 

 ip.src == 192.168.0.123

 출발지 IP 주소 검색 

 ip.dst == 192.168.0.123

 도착지 IP 주소 검색

 ip.addr == 10.0.0.0/8

 출발지나 도착지 A클래스 Netid로 검색 

 ip.src == 10.0.0.0/16

 출발지 B클래스 Netid로 검색 

 ip.dst == 10.0.0.0/24

 출발지 C클래스 Netid로 검색 

 eth.addr == 00:30:f8:00:00:01

 출발지나 도착지 MAC주소로 검색

 eth.src == 00:30:f8:00:00:01

 출발지 MAC주소 검색

 eth.dst == 00:30:f8:00:00:01

 도착지 MAC주소 검색

 tcp.port == 80

 TCP 출발지나 도착지 포트 번호로 검색

 tcp.srcport == 80

 TCP 출발지 포트 번호로 검색

 tcp.dstport == 80

 TCP 도착지 포트 번호로 검색

 udp.port == 53

 UDP 출발지나 도착지 포트 번호로 검색

 udp.srcport == 53

 UDP 출발지 포트 번호로 검색

 udp.dstport == 53

 UDP 도착지 포트 번호로 검색

무선 네트워크 개요


- IEEE 802.11

IEEE 802.11은 흔히 무선랜, 와이파이(Wi-Fi)라고 부르는 무선 근거리 통신망(Local Area Network)을 위한 컴퓨터 무선 네트워크에 사용되는 기술로, IEEE의 LAN/MAN 표준 위원회 (IEEE 802)의 11번째 워킹 그룹에서 개발된 표준 기술을 의미한다.


- Wireless Activity

패턴 변경 요소

  • 반사
  • 멀티패스(다중경로 효과)
  • 산란
  • 회절
  • 굴절
  • 흡수
  • 자유공간 경로 손실

- RF Spectrum

한국은 2.4GHz 대역 사용

1~13 채널 사용

1채널 : 2.412

n채널 : 2.412 + (0.005×(n-1))

802.11 : 2.4 GHz 대역 사용, CSMA/CA 기술 사용, 최고 속도 2Mbps

802.11b : 2.4GHz 대역 사용, CSMA/CA 기술 사용, 최고 속도 11Mbps(실제 6~7Mbps 정도)

802.11a : 5GHz 대역 사용, OFDM 기술 사용, 최고 속도 54Mbps 

//장점 : 5Ghz 대역은 2.4GHz 대역에 비해 다른 통신기기와의 간섭이 적고, 더 넓은 전파 대역을 사용할 수 있다.

//단점 : 장애물이나 건물 등 주변 환경의 영향을 쉽게 받고 2.4GHz 대역에서 54Mbps 속도를 지원하는 802.11g 규격이 나오면서 잘 사용하지 않음. 

802.11g : 2.4GHz 대역 사용, 최고 속도 54Mbps, 802.11b 규격과 쉽게 호환

802.11n : 2.4GHz 대역 & 5GHz 대역 사용, 최고속도 600Mbps

802.11ac : 2.4GHz(802.11n과 호환성을 위해 40MHz까지 대역 지원) & 5GHz(높은 대역폭 80MHz~160MHz 대역 지원)

             이론 속도 : 6.93Gbps, 실제 속도 : 1.3Gbps 

802.11ad : 60GHz 대역 사용, 빔포밍 기술 사용, 최고 속도 7Gbps(실제 4.6Gbps), 장애물 통과가 어려워 10m이내 같은 공간 내에서만 사용 가능


- Antenna

Omni 

  • 무지향성 안테나
  • 넓은 지역 서비스
  • 스캐닝

Directional 

  • 지향성 안테나
  • 특정 지역 서비스
  • 타겟 고정해서 공격가능

- RF 감쇄 요인


 RF Barrier 

 상대적 감쇠 정도 

 공기중

 가장 낮음 

 목재

 낮음 

 플라스틱

 낮음 

 합성물질

 낮음 

 석면

 낮음 

 유리

 낮음 

 물

 중간 

 벽돌

 중간 

 대리석

 중간 

 종이

 높음 

 시멘트

 높음 

 방탄유리

 높음 

 금속

 매우 높음 


네트워크 개요


- TCP/IP

네트워크 인터페이스 계층(물리,데이터링크 계층

· MAC 주소
 데이터링크계층의 MAC 계층에 의해 사용되는 48비트의 하드웨어 주소

 어떠한 네트워크 카드도 동일한 MAC 주소를 가지지 않음


· CSMA/CD

 Carrier Sense : 말하기 전에 듣기

 Multiple Access : 아무도 이야기 하지 않을 때 자유롭게 말하기

 Collision Detection : 거의 동시에 이야기를 시작하여 충돌 발생


· Ethernet

 근거리에 위치한 컴퓨터간에 데이터 전송이 가능하도록 하는 통신 기능을 제공

 현재 가장 널리 사용되는 LAN의 연결 방법


IP 계층(네트워크 계층) 

· Forwarding & Routing

 Forwarding : 패킷이 라우터의 입력 링크에 도달 시 라우터는 패킷을 적절한 출력링크로 이동 시켜야 함

 Routing : 송수신자가 패킷을 전송할 때 패킷 경로를 결정함


· IP(Internet Protocol)

 대표적인 네트워크 계층의 프로토콜

 32bit의 2진수로 구성

 실제 표시 : 8bit 단위로 점을 찍고 10진수로 표시


· IP 주소 구성

 네트워크 주소(Netid) : 호스트가 연결되어 있는 네트워크 확인

 호스트 주소(Hostid) : 네트워크의 호스트 중에 하나의 특정 호스트 확인

 

· IP Class

 A Class(0~127)   11111111.00000000.00000000.00000000 255.0.0.0

 B Class(128~19111111111.11111111.00000000.00000000 255.255.0.0

 C Class(192~22311111111.11111111.11111111.00000000 255.255.255.0


· 사설 IP 주소 대역

10.0.0.1 ~ 10.255.255.254

172.16.0.1 ~ 172.31.255.254

192.168.0.1 ~ 192.168.255.254


· Subnet Mask

 TCP/IP 프로토콜에 의해 호스트가 로컬 서브넷에 있는지 아니면 원격 네트워크에 있는지를 확인하는데 사용

 32bit길이를 갖고 bit가 1인 부분을 Network bit , bit가 0인 부분을 Host bit로 구분


· Routing

 ex) 아이피 대역이 2번 바뀜 = 라우팅이 2번

 ex) 라우터의 수 = 라우팅 수


· NAT

 네트워크 주소 변환(Network Address Translation)


· ARP

 IP 주소를 MAC 주소로 변환 하는 것


· RARP

 MAC 주소를 IP 주소로 변환 하는 것 


· MAC테이블에 통신한 MAC주소를 적어놓음


· MAC 주소 FF:FF:FF -> broadcast


· ip 맨끝자리 XXX.XXX.XXX.255 -> broadcast


· ICMP

 목적 : 송신측의 상황과 목적지 노드의 상황 진단

 IP 계층 or 보다 상위 계층 프로토콜(TCP, UDP)에 의해 이용됨

 ICMP 메세지는 사용자 프로세스에게 되돌려 주는 에러 메시지 생성

 ICMP 메세지는 IP 데이터 그램을 전송


TCP/UDP 계층(전송 계층)

· TCP/UDP 프로토콜이 존재


· 응용프로그램의 데이터를 세그먼트 단위로 분할

 하위의 네트워크 계층으로 전달

 하위 계층으로 전달 하면서 헤더 추가


· 데이터 신뢰성 정보 및 흐름 제어와 관련된 정보


· TCP

 신뢰할 수 있는 데이터 전송

 흐름제어

 혼잡제어

 SYN : 응답요청

 ACK : 응답 

 FIN : Finish(연결 종료 요청)

 RST : Reset(초기화),강제종료

 PSH : PUSH(우선 처리 요청)


· UDP

 신뢰할 수 없는 데이터 전송

 흐름제어 X

 혼잡제어 X


· 포트번호

 포번호 

 서비스 

 서비스 내용 

 20 

 FTP-Data 

 데이터 전송 (다운로드시 사용)

 21

 FTP

 FTP 연결 시 인증 과 컨트롤(로그인 , 파일 및 디렉토리)

 22

 SSH

 패킷이 암호화되어 전송 Telnet과 같은 비 암호화 프로그램을 대체

 23

 Telnet

 Telnet 서비스로서 원격지의 서버의 실행 창을 얻어냄

 25

 SMTP 

 메일을 보낼 때 사용하는 서비스

 53

 DNS 

 Domain Name Service 이름을 해석하는 데 사용하는 서비스

 80

 HTTP

 Hyper Text Transfer Protocol 웹 서비스

 443

 HTTPS

 Open SSL 암호 모듈로 암호화된 웹 통신 

 3306

 MySQL 

 MySQL 서비스 포트

 3389

 RDP

 원격 데스크톱(윈도우기반 원격) 


응용프로세스 계층(세션,표현,응용 계층)

· 다양한 프로토콜들의 사용 및 지원

· 사용자 응용 프로토콜 (FTP , SMTP , HTTP)

· 제공 응용 프로토콜 (SNMP , DNS)



- 트래픽 분류

· 유니캐스트(Unicast) //단일

· 멀티캐스트(Multicast) //그룹

· 브로드캐스트(Broadcast) //전체

네트워크 개요


- 네트워크란?

Net + work = 그물 + 일하다

컴퓨터간의 대화를 나누는 것


- 네트워크의 종류

· P2P네트워크

· 클라이언트/서버 네트워크


- 네트워크의 토폴로지

· Star Topology

· Bus Topology

· Ring Topology

· Mesh Topology


- OSI 7 Layer

7 Layer 응용 계층

사용자 인터페이스 제공

웹, 전자우편, 원격파일 접근, 디렉토리 서비스


6 Layer 표현 계층

암호화/복호화

데이터의 압축/압축 해제


5 Layer 세션 계층

사용자 위주의 논리적인 연결 서비스 제공

데이터 에러 발생시 복구를 관리

Full-Duplex(양방향통신), Half-Duplex, Simplex


4 Layer 전송 계층 - Segment 단위

TCP/UDP

프로토콜(TCP, SPX 등)과 관련된 계층으로, 오류 복구, 흐름 제어 담당

두 시스템간의 신뢰성 있는 데이터 전송을 보장

시스템 종단 간에 투명한 데이터 전송을 양방향으로 행하는 계층


3 Layer 네트워크 계층 - Packet 단위(Datagram 단위)

IP

라우팅 프로토콜을 사용하여 최적의 경로를 선택

장비 : 라우터


2 Layer 데이터링크 계층 - Frame 단위

MAC(물리적 주소, 하드웨어 주소)

물리적 링크를 통해 신뢰성 있게 전송하는 계층

네트워크를 통해서 데이터가 전송될 때 전송로 역할을 함

장비 : 브릿지, 스위치


1 Layer 물리 계층 - Bit 단위

전기, 기계, 기능적인 특성을 이용하여 통신 케이블로 데이터 전송

장비 : 케이블, 리피터(증폭기), 허브

+ Recent posts