IT 그리고 정보보안/Knowledge base 227

TCP echo Server/Client

이번부터 지금까지 배운 TCP 소켓 함수들을 이용하여 TCP 서버-클라이언트 예제를 한번 구현해보겠음. echo(메아리) 서버, 클라이언트를 한번 만들어보자. main 함수의 for문 전까지는 그냥 소켓을 생성하고 바인딩한 후 listen 상태도 만드는 기본적인 소켓 셋팅 코드임. 그리고 for문에 들어오면 연결 소켓을 connfd에 저장하고 fork로 자식 프로세스를 생성한다. fork 반환값이 0이면 자식프로세스 분기인데, 자식은 listen 소켓을 닫고 연결 소켓을 연다. str_echo 라고 하는 아래 정의된 함수에 의해서 connfd 가 작업을 함. 원래는 여기 나오는게 concurrent server 즉, 동반 서버에 대한 설명을 했어야 했는데, 따로 빼서 하기도 애매해서 코드와 함께 작성할 ..

소켓 프로그래밍

앞서 소켓이 무엇인지 알아봤고, 이제 소켓으로 실제 통신이 어떻게 구현되는지 알아보자. 클라이언트의 동작에 대한 함수를 알아보고 난 뒤, 서버에 대해 알아보겠다. 일단 먼저, 서버든 클라이언트든 통신에 앞서 socket을 생성해야 할 것이다. ​TCP 통신 전체 그림을 보면서 socket 녀석이 어딨는지 보자. 소켓은 socket 함수를 이용하여 생성한다. 어떤 친구인지 한번 알아보자. 어떤 프로토콜로 통신할 것인지, 어떤 종류의 소켓을 사용할 것인지 미리 정해진 값들을 집어넣기만 하면 된다. domain 부분에서 PF_INET 와 AF_INET 이부분이 좀 혼동할 수 있는데, PF_INET는 프로토콜 체계(프로토콜 패밀리)이고 AF_INET는 주소 체계(주소 패밀리)이다. connect() 소켓을 생성..

네트워크 소켓(Socket)은 무엇인가

자 이제 소켓 프로그래밍을 하기 위해 기초지식을 알아보자. 먼저 소켓이 뭔지 알아야 할 것이다. 소켓이란? 인터넷 소켓(Internet socket, socket' 혹은 network socket 라고 부르기도 한다)은 네트워크로 연결되어 있는 컴퓨터의 통신의 접점에 위치한 통신 객체다. 네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이 소켓을 통해서 서로 데이터를 교환한다.소켓은 RFC 147에 기술사항이 정의 되어 있다. 인터넷 소켓은 다음과 같은 요소들로 구성되어 있다. 인터넷 프로토콜 (TCP, UDP, raw IP) 로컬 IP 주소 로컬 포트 원격 IP 주소 원격 포트 라고 위키피디아에 나와 있다. 네트워크 프로그래밍은 소켓을 이용하는데, 뭐 소위 소켓 프로그래밍이라고 부른다. 요 소캣 프..

UDP (User Datagram Protocol)

UDP(User Datagram Protocol) 를 알아 보자, TCP에 비하면 진짜 간단하고 뭐 없다. 먼저 UDP 프로토콜의 포맷을 보겠음. 포트 번호, 길이, 체크섬, 데이터 이게 전부다. 이렇게 간단하다는 말은 동작 방식에도 특별한 점이 없다는 것임. 먼저 UDP는 비연결 지향형이다. TCP 처럼 3-ways-handshaking 같은 과정을 거쳐 세션을 맺은 상태에서 통신하는 것이 아니라 그냥 보내고 받는 것이다. 그러니 흐름제어, 혼잡제어 따위는 존재할리가 없다. 그리고 UDP를 설명할 때 항상 나오는 말이 있다. "Best effort" 라고 하는 말인데, '노력은 하되 책임 지지 않는다' 이런 말이다. 이게 무슨 말이냐. 보내기만 보내고 신경을 쓰지 않는다는 말이다. 송신자가 보낸 패킷이..

TCP (Transmission Control Protocol)

소켓 프로그래밍을 하기 위해 전송 계층 프로토콜 (TCP, UDP)에 대해 먼저 알아보자. 먼저 TCP의 구조를 한번 봅시다. 송,수신지 포트, Seq. num, flag 등등 복잡한 구조를 갖고 있다. 각각의 내용들은 뒤에 하고 먼저 TCP의 특징 몇가지를 간단하게 정리하겠다. 1. Point-to-Point 즉, 송신자와 수신자 1:1 통신이다. 3-ways-handshaking(3HSK) 을 통해 세션을 맺은 상태에서 통신하므로 1:1 통신이다. 이렇게 세션이 맺힌 상태에서는 언제든지 데이터를 주고받을 수 있는 상태이므로 TCP는 연결 지향형(Connection-oriented), 양방향형(Full Duplex) 이라고 말할 수 있다. 2. 신뢰할 수 있는 통신이다. 데이터를 보내고 잘 갔는지 확인..

소프트웨어 공학 - 테스팅 프로세스

테스팅 프로세스에서는 검증과 확인 (V&V : Verification and Validation)이라는 작업, 그리고 시스템 테스팅, 검사와 검토 과정을 수행하게 된다. 검증(Verification)은 시스템이 명세서에 적합한지 확인하는 과정이고, 확인(Validation)은 고객이 요구사항을 만족하는지 확인하는 작업이다. 시스템 테스팅은 시스템에 의해 처리되는 실제 데이터 명세서에 정의된 테스트 케이스들을 직접 실행시켜보는 것 즉, 그냥 원래 정해놓은 테스트 경우들을 실행해보는 것이다. 테스팅 프로세스에 대한 과정은 아래와 같다. 1. Unit Test 단위 테스트 즉, 개별적인 부분에 대한 테스트이다. 2. Module Test 단위 테스트에서 하던 그 단위들의 모임 즉, 모듈 단위로 테스트 한다. ..

소프트웨어 공학 - 프로젝트 관리

소프트웨어 공학에서 굉장히 중요한 부분중 하나인 프로젝트 관리(Project Management)에 대해 알아보자. 관리 활동 / 계획 수립 / 일정 수립 / 위험 관리 등의 과정으로 나뉜다. 소프트웨어 개발 프로젝트의 최종 결과물은 기본적으로 아래와 같은 것들에 영향을 받는다. 위 내용 다 중요하지만 굳이 경중을 두자면 마감일(delivery deadline), 활용 분야(application domain), 기술(technology to be implemented), 시스템 제약 조건(system constraints) 등이 되겠다. 위 요소들에 영향을 받는 최종 결과물을 지칭하는 말이 있는데 The 4P's 라는 것이다. 1. People : 사람이다. 프로젝트에서 가장 중요한 요소이다. 2. Pr..

소프트웨어 공학 - 시스템 모델링

시스템 모델링에 대한 내용을 알아 볼것이다. 그냥 분석중인 시스템에 대한 추상화된 표현을 일컫는다. 분석가가 시스템의 기능을 이해하는 것을 도와주며, 모델들은 고객들과 정보를 교환하기 위해 사용된다. 여러가지 시스템 모델들이 있는데, 각자 다른 관점으로 시스템을 표현한다. 시스템의 범위, 환경에 대한 관점(External perspective), 시스템 행동, 동작에 대한 관점(Behavioural perspective) 시스템 구조, 데이터 구조에 대한 관점(Structural perspective) 등이 있다. 뜬금 없이 갑자기 구조적 방법론(Structured methods) 이라는게 나오는데, 뜬금 없는건 아니고 시스템 모델링을 메소드의 본질적인 부분으로 포함하는 것이다. 메소드를 사용하는 모델들..

UPS(Uninterruptible Power Supply)와 전원 차단

디지털 포렌식 분석 시에 전원차단하는 내용에 대해 언급하려한다. 사고분석할 때 디지털 증거를 보존하기 위해 통상적으로 갑작스럽게 전원을 차단하여 하드디스크를 그 상태 그대로 보존한다.. 라고 알고있었다. 물론 반은 맞고 반은 틀린 말이다. 이런 갑작스러운 전원 차단 또한 적용되어야할 대상이 다르고 방법도 다르다. 1. 개인 PC에 일어난 침해사고 분석시에 전원차단 먼저 개인PC에 대한 사고분석을 할 때, 이 경우는 PC뒤의 본체 전원 플러그를 뽑는 식으로 전원을 갑작스럽게 차단해야한다. 돼지코(?)에 꽂힌 콘센트 전원을 빼면 안되는가?? 안된다. UPS라는 기능 때문이다. UPS (Uninterruptible Power Supply) 란, 무정전 전원공급 장치라는 뜻으로.. 갑작스러운 전원차단이 일어나더..

소프트웨어 공학 - 요구사항

소프트웨어 요구사항에 대해 알아보자. 말 그대로 소프트웨어 개발하는데 필요한 요구사항들이다. S/W가 어떠한 기능을 제공해주길 바라는지, 어떤 제한사항이 있는지 등을 설정하는 것이다. 요구 사항에 대한 프로세스를 요구 공학 프로세스 라고 한다. 먼저 요구사항에 대해 알아야겠다. 요구사항(Requirements)는 시스템의 기능 또는 제약 조건에 대한 고수준의 추상적인 문장 에서부터 상세한 수학적인 기능 명세서까지 포함시킨다. 요구사항은 두가지 용도로 사용된다. - 계약을 위한 시도 : 과제를 제안하는 용도이다. 공모전을 예로 들 수 있겠다. RFP라는 게 있는데 (과제도출->공모->선정) 과정을 말하는 것이다. - 계약서 자체 : 계약서 자체에 정의된 요구사항이다. 굉장히 상세해야 하겠지? 요구 사항에도..

반응형