이야기박스
네트워크) 시험 공부 - 주관식 본문
▣ 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의 위치를 확정짓기가 어렵기 때문에, 뚜렷한 대책이 없는 형편
'Computer & Data > Network' 카테고리의 다른 글
SSLProtocolException: handshake alert: unrecognized_name (0) | 2018.08.22 |
---|---|
서브넷 마스크(Subnetmask) (0) | 2017.11.24 |
흐름 제어(Flow Control) & 혼잡 제어(Congestion Control) (0) | 2017.11.24 |
네트워크) 기말 시험공부 - 주관식 (0) | 2017.06.18 |
네트워크) 시험 공부 - 객관식 (0) | 2017.04.23 |