전체 글 50

[Network Programming] 프로세스간 통신

(시스템 프로그래밍때 했으니.. 간단하게...) process간 통신(IPC)는 쉽게 되는게 아니다. 왜냐하면 모든 Process는 독립적인 메모리 공간을 사용하도록 OS에서 보장해주기 때문이다. 일반적인 방법으론 서로 메모리에 접근할 수 없으니, OS에서 별도로 메모리 공간을 마련해줘야 한다. IPC를 위해 OS에서 제공해주는 놈들로는 shared memory도 있고, message queue도 있고, pipe도 있다.(더 있을라나?) 여기선 pipe에 대해 배운다. DISK를 왔다갔다하며 IPC를 수행하기엔 소모가 너무 크다... pipe는 보통 fork()로 프로세스를 나눠서 소통할 때 사용하고, MQ나 SM은 정해진 key 값으로 해당 공간을 얻을 수 있기때문에 child-parent 관계가 아닌..

카테고리 없음 2023.05.29

[Network Programming] MultiProcess 기반 서버

앞서 배운 iterative server는 동시 접속을 처리하지 못한다. 동시 접속을 처리하기 위해선 아래 기법들을 사용할 수 있다. 1. MultiProcess 기반 서버 2. MultiPlexing 기반 서버 3. MultiThreading 기반 서버 우린 우선 멀티 프로세스 기반 서버에 대해 배운다. 프로세스란 실행중인 프로그램으로, 그것과 관련된 메모리, 리소스 등을 총칭하는 의미이다. 각 프로세스는 고유의 ID를 가지고 있다. (process id == pid) fork #include pid_t fork(void); fork() 함수를 호출하면 fork 함수의 "return값을 제외한" 해당 프로세스의 모~든 것이 복제되어 새로운 프로세스가 만들어진다. 즉, 변수의 값은 물론이고 source ..

[Network Programming] Socket의 옵션들

이렇게 다양한 option들이 존재하고 이걸 이용해 소켓의 정보를 get 하거나 set 할 수 있다. 표에서 볼 수 있듯이 소켓의 옵션들은 계층별로 분류된다. SOL_SOCKET 레벨의 옵션들은 소켓에 대한 가장 일반적인 옵션들이고, IPPROTO_IP 레벨의 옵션들은 IP protocol에 관련된 사항들이며, IPPROTO_TCP 레벨의 옵션들은 TCP protoocl에 관련된 사항들이다. 우측은 get만 할 수 있는 정보인지 set만 할 수 있는 정보인지 둘 다 할 수 있는지를 보여준다. 예를들어 소켓의 타입을 알 수 있는 SO_TYPE 옵션으로는 Set은 할 수 없고 Get만 할 수 있다. 즉, SO_TYPE은 확인만 가능하고 변경이 불가능한 옵션이다. getsockopt #include int g..

[Network Programming] Domain Name System(DNS)

Domain Name이란? IP 주소를 대신해 사용할 수 있는 주소이다. IP 주소를 사용해 서버에 접속하는 것은 번거롭다. 매번 IP 주소 12자리 숫자를 외울 수도 없고, IP는 꽤 변동이 심하기 때문에 서버의 IP가 변경될 때마다 컴파일을 다시해야할 수도 있다. 따라서 간단하게 www.naver.com 처럼 Domain name을 IP 주소 대신 사용할 수 있게하는 것이다. 물론 이 Domain name이 실제 접속에 사용되는 주소는 아니고, Domain name을 IP로 변환해서 접속한다. DNS Server란? 위에서 말했듯 Domain name을 IP로 변환하는 과정이 있어야하는데, DNS 서버가 바로 Domain Name을 IP로 변환해주는 서버이다. DNS는 일종의 분산 데이터베이스 시스템..

[Network Programming] TCP 기반 Half-close

close() 와 closesocket() 함수의 기능 - socket의 완전 소멸을 의미 - socket이 소멸되므로 더 이상 입출력이 안됨 - 더 이상 입력이 안되므로 상대방 상태에 상관없는 일방적 종료의 형태 - 일방적 종료를 할 경우 상대 host에 송수신이 완료되지 않은 데이터가 있을 때 문제 - 따라서 Half-close 기법을 사용해야 한다. Half-close close()나 closesocket()으로 입출력 스트림을 모두 닫는 것이 아니라, 출력 스트림만 닫는 것이다. 상대방도 보낼 데이터가 없어서 종료를 원하는지 모르기때문에 입력 스트림은 열어둔다. 이렇게 입력 스트림이나 출력 스트림 중 하나를 닫는 것을 Half-close라고 한다. shutdown #include int shutd..

[Network Programming] UDP socket 통신

> UDP 소켓의 특성 (TCP와 비교) - SEQ,ACK number 같은 것을 전달하지 않는다. (Flow Control 없음) - 연결 설정/해제 같은 과정이 없다. - 데이터 분실 및 손실의 위험이 있다. - 확인 과정이 없으므로 데이터 전송이 빠르다. 따라서 안전성보단 성능이 중요할 때 UDP를 사용한다. 예를들어 실시간 스트리밍 서비스... (교수님께선 실제로 해보면 TCP가 그렇게 느리지도 않다고 하심. 이론상 그렇단 것) TCP는 1:1로 연결되기 때문에, socket 하나가 상대방과 연결되면 그 socket은 그 연결된 상대하고만 데이터를 주고 받을 수 있었다.(read()/write()) 하지만 UDP는 연결이라는 개념이 존재하지 않으므로 서버 소켓, 클라이언트 소켓 구분이 없다. 위 ..

[Network Programming] TCP socket 통신

> TCP API 호출 순서 TCP Server 1. socket #include int socket(int domain, int type, int protocol); 우선 socket을 생성하기 위해선 socket 함수를 사용해야한다. 첫번째 인자로는 만들 socket이 사용할 Protocol Family(프로토콜 체계) 정보를 전달하고, 두번째 인자로는 소켓의 데이터 전송 방식에 대한 정보를 전달한다. 마지막 인자로는 통신에 사용할 프로토콜을 전달한다. 세 인자 모두 프로토콜과 관련있다, 즉 생성할 socket이 어떤 프로토콜을 써서 통신할지를 인자로 줘서 socket을 만드는 것이다. 성공 시 생성된 socket의 file descriptor, 실패 시 -1 을 반환한다. > Protocol Fam..

[Network Programming] Network Socket Programming 개요/기초

이 과목에선 Socket을 통해 Application Layer의 프로그램을 개발하는 것을 중점으로 한다. OS에서 제공해주는 네트워크 관련 API(Application Programming Interface)를 활용하는 것이 주된 목표이다. Client-Server model을 주로 다루며, kernel level이 아닌 user-level programming을 한다. Socket을 생성해서 사용하면 Application 아래 Layer의 내용은 감춰진다. 즉, 응용 프로그래머는 이 Socket을 기반으로 Application 계층의 완성에 집중하게 된다. Client-Server model 1 : Iterative Server (with UDP) Client-Server model 2 : Concu..

[Network Programming] TCP/IP

Addressing (위 그림은 TCP/IP model 이다. 원래는 4계층으로 나뉘었는데, 요즘 저렇게 5계층으로 나누기도 한다고 함.) 각 계층마다 사용하는 address의 종류가 다르다. 예를들어 Data link layer에선 같은 Network 내 통신을 위해 랜 카드에 부여된 주소인 Mac address를 사용한다. IP Address Classes IP Address의 앞부분은 어떤 네트워크인지 나타내는데 쓰이고, 뒷부분은 해당 네트워크 내의 어떤 host인지 나타내는데 쓰일 수 있다. 그 영역의 크기에 따라 Class A/B/C로 구분한다. Class A의 네트워크가 가장 많은 host를 보유할 수 있다. 교수님께서 말씀하시길 경북대는 Class B라고 하셨다. 하지만 이런 방식은 공간 낭..

SHA-256

SHA-256 회로를 verilog로 설계하는게 디지털설계및실험 과목의 마지막 과제로 나왔다. 이를 설계하기 위해 공부했던 SHA-256 연산 과정을 간단하게 정리해볼까한다. SHA와 SHA-256이 무엇인지에 대한건 나무위키 보면 잘 나와있으니 생략하고.. 어떤 식으로 input을 암호화하는지 살펴보자. 진행하며 참고한 문서는 다음과 같다. 참고문서 Algorithm(간략) 우선 큰 틀부터 보자. SHA-256 algorithm에선 0보다 크거나 같고 2^64-bit 보다 작은 Message(표현은 16진수로 하기도 하고 ascii 문자로 하기도 함)라는 것을 Input으로 받고, 256-bit 2진수 숫자(마찬가지로 표현은 16진수로하거나 ascii문자로 하거나)를 Output으로 내놓는다. 즉, I..