이야기박스

네트워크) 시험 공부 - 주관식 본문

Computer & Data/Network

네트워크) 시험 공부 - 주관식

박스님 2017. 4. 23. 18:02
반응형

▣ IP에서 메시지 단편화

- MTU (Maximum Transmission Unit) : 네트워크 구간에서 한번에 전송할 수 있는 패킷의 최대 크기

- MTU보다 큰 메시지를 전달 할 경우에는 한번에 전달 할 수 없기 때문에 이를 여러개의 IP 패킷으로 단편화한다.


- 과정

a. 각각의 완벽한 IP 프로토콜 헤더(20byte)를 가지고 있음

b. 각각의 단편들은 그들의 목적지까지 서로 다른 경로를 따라 도달할 수 있다.

c. 수신 개체는 메시지의 단편을 전체 메시지로 재합성할 수 있다.


- 예제. 초기상태

a. 네트워크 최대 패킷 길이 : 128 바이트

b. 전송하려는 데이터의 바이트 수 : 300 바이트

c. 패킷의 식별번호 : 2354

d. 옵션 없음

- 단편화 결과

a. 단편 1 : 길이 124( 헤더 20 + @ ), 오프셋 0 , MF = 1, ID = 2354

b. 단편 2 : 길이 124( 헤더 20 + @ ), 오프셋 13, MF = 1, ID = 2354

c. 단편 3 : 길이 112( 헤더 20 + @ ), 오프셋 26, MF = 0, ID = 2354






▣ SEQ / ACK

- SEQ : 송신 방향에서의 순서

- ACK : 반대편에서 수신되는 바이트들의 순서

- 목적지는 SEQ + 데이터의 바이트 수 (DATA=5)를 더한 결과를 ACK 항목에 넣어서 수신 결과를 알림




▣ TCP 에서 클라이언트/서버 함수 호출 순서 및 각 함수의 기능

- socket() : 소켓을 생성 --> 사용할 프로토콜을 결정 -> 리소스 할당


- bind() : 지역 IP 주소와 지역 포트 번호를 결정 ( 성공 : 0, 실패 : SOCKET_ERROR 반환 )


- listen() : 소켓의 TCP 포트 상태를 LISTENING 상태로 변경 -> 클라이언트 접속을 받아들일 수 있는 상태 
            ( 성공 : 0, 실패 : SOCKET_ERROR 반환 )


- accept() : 자신에게 접속한 클라이언트와 통신할 수 있는 새로운 소켓 생성 -> 원격(클라이언트) IP 주소와 원격 포트 번호 결정

             ( 성공 : 새로운 소켓, 실패 : INVALID_SOCKET 반환 )

   a. 접속한 클라이언트가 없을 경우 : 서버를 대기상태로 만듬.

   b. 클라이언트가 접속하게 되면 서버는 깨어나고 accept() 함수는 비로소 리턴하게 됨


- connect() : TCP 프로토콜 수준에서 서버와 논리적 연결을 설정 -> 원격, 지역 IP 주소와 포트 번호 모두 결정된다. 


- send() : 응용 프로그램 데이터를 운영체제의 송신 버퍼에 복사함으로써 데이터를 전송


- recv() : 운영체제의 수신 버퍼에 도착한 데이터를 응용 프로그램 버퍼에 복사


- closesocket() : 소켓을 닫고 관련 리소스를 반환


* accept()와 connect()에서 서로 연관됨






▣ 고정길이 데이터 전송 방식 vs 고정길이+가변길이 데이터 전송 방식

- 고정길이 데이터 전송 : 서버와 클라이언트 모두 같은 크기의 버퍼를 정의해두고 데이터를 주고받으면 된다.

- 고정+가변길이 데이터 전송 : 고정 길이의 데이터 수신으로 가변 길이 데이터의 경계를 구분하여 읽는다.

 


▣ IPv4 코드를 IPv6로 변환

- 소켓 주소 구조체를 SOCKADDR_IN에서 SOCKADDR_IN6으로 변환시키면 된다.



▣ 스레드의 개념

- 윈도우 운영체제에서의 스레드는 CPU 시간을 할당받아 프로세스 메모리 영역에 있는 코드를 수행하고 데이터를 사용하는 동적인 개념




▣ WaitForSingleObjects()와 WaitForMultipleObjects()를 thread 종료 감지에 어떻게 이용하는지

- WaitForSingleObjects() : 특정 스레드가 종료할 때까지 기다릴 수 있다.

WaitForSingleObjects(

HANDLE hHandle,

DWORD dwMilliseconds                --> 대기시간

);

ex / WaitForSingleObjects( hThread, 1000 ) 


- WaitForMultipleObjects() : 여러개의 스레드를 적용할 경우

WaitForMultipleObjects(

DWORD nCount,                        --> 배열 원소 갯수

const HANDLE *lpHandles,           --> 배열의 시작 주소

BOOL bWaitAll,                          --> TRUE면 모든 스레드가 종료할 때까지 기다림, FALSE면 한 스레드 종료하는 즉시 리턴

DWORD dwMilliseconds              --> Single의 경우와 같음

);





▣ echo client & server pseudo code


- server

Alg server() {
	socket()
	bind()
	listen()

	while(true) {
		accept()
		hThread <- CreateThread(ProcessClient);
	}
	closesocket()
}

Alg ProcessClient() {
	while(true) {
		recv()
		if(recv()==error) break

		send()
		if(send()==error) break
	}
}


- client

Alg client() {
	socket()
	connect()

	while(true) {
		send()
		if(send()==error) break

		recv()
		if(recv() == error) break
	}
	closesocket()
}



▣ Spoofing

- Spoof : 속이다, 도용하다 ==> 공격자가 ip주소, 호스트 이름, MAC 주소 등을 속이는 공격

- 종류 : IP 스푸핑, DNS 스푸핑, ARP 스푸핑, E-mail 스푸핑


- IP 스푸핑 : 공격대상과 신뢰관계를 형성하고 있는 IP 주소로 속여 접속, 공격하는 방법

- DNS 스푸핑 : 공격자가 DNS 서버에서 보내주는 IP를 임의로 조작하여 원하는 사이트로 이동시키는 공격

- ARP 스푸핑 : MAC 주소를 속여, 랜에서의 통신 흐름을 왜곡시키는 공격

- E-mail 스푸핑 : 송신자의 주소를 위조하는 것 --> 악성 메일, 스팸 메일




▣ DDos

- Distributed Denial of Service : 분산 서비스 공격

- 여러 대의 공격자 컴퓨터를 동시에 배치하여 동시에 서비스 거부 공격을 하는 방법

--> 결과적으로 사용자가 원래 원하던 용도의 서비스를 받지 못하게 한다.

- 여러대의 공격자 컴퓨터들 Bot

- Bot Master 컴퓨터가 지휘 

--> 이러한 네트워크를 Bot Network, 메카니즘을 Command & Control (C&C)

- Bot Master의 위치를 확정짓기가 어렵기 때문에, 뚜렷한 대책이 없는 형편

반응형