[네트워크 프로그래밍] 멀리 떨어져 있는 호스트들이 서로 데이터를 주고 받을 수 있도록 프로그램을 구현하는 것 파일과 달리 데이터를 주고 받을 대상이 멀리 떨어져 있기 때문에 소프트웨어 차원에서 호스트들간에 연결을 해주는 장치가 필요함 -> 이런 기능을 하는 장치를 '소켓'이라고 함 [서버 프로그램의 구현 순서] 가장 쉽게 접근할 수 있는 예는 '전화...
[프로토콜의 정의] 컴퓨터 상호간의 대화에 필요한 통신 규약 [소켓의 생성] 소켓을 생성하기 위해서는 socket이란 함수를 사용해야 함 socket 함수는 호출 시 시스템 내부적으로 소켓을 생성하고 그 소켓을 조작하기 위해 필요한 파일 디스크립터를 리턴함 시스템 내부적으로 소켓을 생성한다? → 호스트가 통신을 하기 위해 필요한 ...
[IP 주소] 인터넷상에 존재하는 호스트들을 구분하기 위한 32비트 주소 체계 네트워크 주소와 호스트 주소로 나뉘며, 주소의 형태에 따라 A ~ E 클래스로 분류 가능 네트워크 주소 : 네트워크를 구분하여 주는 ID [Port] 인터넷을 통해 데이터를 주고 받는 프로그램이 여러 개 실행되고 있더라도 데이터를 송/수신하는 길은 하나밖에 존재하지 ...
[인터넷 주소 조작하기] sockaddr_in 안에서 주소를 나타내기 위해 선언되어 있는 멤버의 데이터 타입은 unsigned long 따라서 IP 주소 정보를 할당하기 위해 unsigned long 타입으로 IP 주소를 표현할 수 있어야 함 (1) inet_addr() : Dotted-Decimal Notation을 Big-Endian 32비트 값으...
연결 요청 대기 상태로의 진입 bind 함수 호출을 통해 소켓에 주소를 할당했다면 listen 함수를 통해 ‘연결 요청 대기 상태’로 들어가야 함 서버가 연결 요청 대기 상태에 있다는 것은 클라이언트가 연결 요청을 했을 때 연결이 수락될 때까지 연결 요청 자체를 대기시킬 수 있는 상태에 있다는 것을 의미 클라이언트 연결 요청도 인터넷을 통해 흘러 들어오...
[TCP 기반 클라이언트의 구현] 순서 : 소켓 생성(socket()) → 연결 요청(connect()) → 데이터 송/수신(read() & write()) → 연결 종료(close()) 서버가 listen()를 호출하게 되면 클라이언트의 연결 요청이 대기 큐에 들어갈 수 있게됨 즉, 서버가 연결 요청을 받아 줄 수 있는 상태가 됨 그렇다면 클라이언...
[에코 를라이언트! TCP 기반에서의 완벽 구현] TCP는 연결 지향 프로토콜로서 전송되는 데이터의 경계가 없음 그러다 보니 한 번의 write 함수 호출을 통해서 “ABCD”라는 문자열을 전송할지라도 그 데이터들이 반드시 하나의 패킷으로 구성되어서 전송된다고 보장할 수 없음 상황에 따라서 “AB” 문자열이 먼저 하나의 패킷으로 전송되고, 그 다음에 “C...
[UDP에 대한 이해] UDP는 IP를 기반으로 흐름 제어를 해 주지 프로토콜 자체가 상당히 간단하며, 전송 속도에 있어 TCP 보다 빠름 Port 정보를 통해서 최종 목적지를 구분해 줌 인터넷 기반 실시간 영상 및 음성 전송에 주로 사용됨 [UDP 기반 서버/클라이언트의 구현] UDP 클라이언트와 서버는 연결 상태가 존재하지 않음 ...
[DNS(Domain Name System)] 도메인 이름 인터넷상의 호스트를 구분 짓기 위해 IP 주소가 있음 해당 IP 주소를 보다 쉽고 편리하게 사용하기 위해 IP주소에 이름을 붙임 → 이게 도메인 (ex) 211.233.28.115가 아니라 www.daum.net이 더 일반적이고 익숙함 DNS 서버 I...
지금까지는 소켓을 생성해서 별 다른 조작 없이 바로 사용함 (기본적으로 설정되어 있는 소켓의 특성을 그대로 받아들이겠다는 의미가 됨) 소켓의 특성을 변경하는 옵션의 종류들은 계층별로 분류됨 [Protocol Level] SOL_SOCKET : 소켓에 대한 가장 일반적인 옵션들 IPPROTO_IP : IP 프로토콜에 관련된 사항 IPPROTO_...
[SO_REUSEADDR] (1) 주소 할당 시 에러의 발생 [실행 결과] 클라이언트에서 연결 종료 요청하기 ‘q’ 누르고 엔터를 누르게 되면 소켓이 종료가 되면서 프로그램도 종료함 이렇게 해서 소켓을 종료 해도 4 way handshake 과정을 거치게 됨 다시 서버를 실행시켜도 서버가 바로 실행됨 ...
[다중 접속 서버의 구현 방법들] 리눅스 기반에서의 다중 접속 서버 구현 방법 프로세스 생성을 통한 멀티태스킹 서버의 구현 select 함수에 의한 멀티플렉싱 서버의 구현 쓰레드를 기반으로 하는 멀티쓰레딩 서버의 구현 [프로세스 ID] ps -u 커맨드를 사용하면 확인 가능 (1은 init 프로세스에 할당됨) [실행 결과] [fork 함수 호출을...
[시그널을 통한 좀비 프로세스의 소멸] [실행 결과] → 자식 프로세스의 ID과 소멸된 좀비 프로세스의 ID가 같은 것을 볼 수 있음 → 자식 프로세스가 종료시 exit(3)을 실행하기 때문에 리턴된 데이터도 3인 것을 확인할 수 있음 z_handler 함수 안에서 SIGCHLD 시그널을 처리하는 데 있어서 while 루프를 돌면서 종료한 모든 프로...
[프로세스간 통신] 프로세스들은 독립된 메모리 영역을 지니기 때문에 지금까지 구현해 온 멀티 프로세스 서버의 경우 프로세스간에 데이터를 주고 받을 수 없다는 단점이 있음 그러나 프로세스간에 데이터를 주고 받아야 하는 경우가 발생될 수 있음 → 시스템 레벨에서 프로세스간 통신을 가능하게 하는 방법을 제시하고 있음 [파이프] [파이프 생성 예제] [...
[I/O 멀티플렉싱 기반의 서버] 프로세스의 생성은 상당히 많은 대가를 지불해야 하는 연산 과정을 거침 그만큼 생성 후에도 시스템의 자원을 많이 차지하게 됨 또한 모든 프로세스들은 서로 독립적인 메모리 공간을 할당 받아서 사용하기 때문에 프로세스간 통신을 하기 위해서는 다소 복잡한 방법을 선택할 수 밖에 없었음 (IPC) 하나의 프로세스로도 여러 클라이언...
[recv & send 입/출력 함수] recv와 send는 데이터 입/출력 시에 방법에 있어서 옵션을 줄 수 있도록 인자를 하나 더 받는 다는 것을 제외하면 read, write와 동일한 기능을 하는 함수임 [flags에 들어갈 수 있는 옵션의 종류와 그 의미] | flags | Description | recv | send | | --- | ---...
[멀티캐스트] 멀티캐스트 방식은 UDP를 기반으로 하는 전송 방식임 둘 이상의 호스트에게 데이터를 전송하고자 하는 경우에는 데이터를 두 번 전송해야 함 그러나 멀티캐스트 방식에서는 데이터 전송의 목적지가 하나의 호스트가 아니라 멀티캐스트 그룹에 속해 있는 모든 호스트들이 목적지가 됨 → 단 한번의 데이터 전송으로 여러 클라이언트들에게 데이터를 전달할 수 ...
[표준 입출력 함수의 장점] (1) 이식성이 좋아진다 시스템 함수들은 운영체제에 종속적이기 때문에 다른 시스템에서 프로그램을 실행시켜야 할 때 문제가 될 수도 있음 이식성을 높이기 위해서는 어떻게 해야할까? 모든 시스템이 지원해 주는 표준화된 함수들을 사용하면 됨(ANSI표준 C의 입/출력 함수) (2) 효율성을 높일 수 있다. 소켓을 생성하게 되면...
fopen 함수를 호출해서 파일을 열고 나면, 파일로부터 데이터를 송/수신할 수 있게 됨 fopen 함수를 호출해서 파일을 여는 경우 스트림이 생성되었다고 표현함 스트림이란 “데이터가 이동하는 흐름”을 의미 (일종의 다리) 파일 포인터를 스트림이라고 표현하는 것은 아니고 파일 포인터 생성 시 데이터 입/출력을 위한 내부적인 상황(다리가 놓여진 상황)을 의미...
쓰레드는 리눅스보다는 윈도우즈에서 보다 친숙한 개념임 그러나 웹이 발전하면서 유닉스 계열의 환경에서도 쓰레드의 중요성이 부각됨 [프로세스와 쓰레드] 이전에 프로세스를 생성하면 프로세스마다 완전히 독룁된 메모리 공간을 유지하기 때문에 프로세스간 통신을 위해 select 함수를 기반으로 하는 멀티플렉싱 서버의 구현 예제를 공부했었음 그러나 멀티 프로세스 서...
[HTTP(Hypertext Transfer Protocol)의 개요] [웹 서버의 이해] 웹 서버란 HTTP를 기반으로 하여 웹 페이지가 들어 있는 파일을 클라이언트에게 전송해 주는 프로그램 HTTP란 Hypertext Transfer Protocol의 약자(Hypertext란 사용자의 선택에 따라 이동이 가능한 조직화된 정보) HTTP는 어플리케...