Computer Science 기본 지식/소켓 프로그래밍 29

[TCP/IP 소켓 프로그래밍] (7-2) 다중 접속 서버 - 멀티 프로세스 서버/클라이언트

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 둘 이상의 클라이언트에게 서비스를 제공하는 멀티 프로세스 기반 다중 접속 서버 클라이언트가 보내는 메세지를 똑같은 내용으로 재전송해주는 에코 서버는 다음 과정을 거친다. 1. 에코 서버는 accept를 통해 클라이언트 연결 요청을 수락한다. 2. 이때 얻게되는 소켓의 핸들을 자식 프로세스에 복사하여 넘겨준다. 3. 자식 프로세스는 전달된 소켓 핸들을 가지고 서비스를 제공한다. 다중 접속 에코 서버 구현 - 좀비 프로세스 방지 좀비 프로세스가 될 수 있는 자식 프로세스는 프로세스 종료시 반환값을 반드시 부모 프로세스에게 전달해야한다. 그렇지 않는다면, 전달될때 까지 자식 프로세스는 소멸되지 않고 좀비 상태에 있게된다. 따라서 부모 프로세스는 자식 프로세..

[TCP/IP 소켓 프로그래밍] (7-1) 다중 접속 서버 - 프로세스

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 둘 이상의 클라이언트에게 서비스를 제공하기 위한 다중 접속 서버 구현이 필요하다. 다중 접속 서버 구현을 위한 방법 1. 멀티프로세스 기반 서버 : 다수의 프로세스를 생성하는 방식 2. 멀티플렉싱 기반 서버: 입출력 대상을 묶어서 관리하는 방식으로 서비스 제공 3. 멀티쓰레딩 기반 서버: 클라이어트의 수만큼 스레드를 생성하는 방식으로 서비스 제공 먼저 멀티 프로세스 기반 서버를 알아본다. 본 예제는 리눅스 기반 코드이다. 프로세스란 (운영체제에 등록되어) 메모리 공간을 차지한 상태에서 실행중인 프로그램을 의미한다. - fork 함수 pid fork(void); 성공 시 프로세스 ID, 실패 시 -1 반환 fork 함수는 호출한 프로세스의 복사본을 생성..

[TCP/IP 소켓 프로그래밍] (6) IP주소와 도메인 이름 변환 / 소켓 옵션

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 IP 주소를 명명하는 도메인 이름을 통해 네트워크를 접속할 수 있다. DNS 서버 도메인 이름에 대한 IP 주소를 알려주는 서버로 호스트가 속한 네트워크에 보통 디폴트(기본) DNS 서버가 자동 설정되어 있다. 호스트는 인터넷 접속에 필요한 IP 주소를 도메인 이름을 통해 로컬 DNS 서버에 질의하고 로컬 DNS 서버는 상위 DNS 서버로 IP 주소를 요청한다. 상위 DNS 서버로 부터 IP 주소를 얻은 로컬 DNS 서버는 호스트에게 전달하여 인터넷에 접속할 수 있게된다. 도메인 이름과 관련된 정보 hostent 구조체 struct hostent { char * h_name; // official name char **h_aliases; // alia..

[TCP/IP 소켓 프로그래밍] (5) TCP 기반 파일 전송

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 파일 전송과 TCP 연결 종료 서버에서 클라이언트로 혹은 그 반대의 방향으로 파일을 전송한다고 하자. 송신자는 파일 데이터를 송신할 것이고 자신의 소켓을 종료한다. 수신자는 파일 데이터를 수신하고 소켓을 종료할 것이다. 만약 수신자가 파일 데이터를 모두 수신했을 때, "Thank You"라는 종료의 의미를 송신자에게 전송한다 하자. 그렇다면, 수신자는 파일 데이터를 모두 수신했다는 것을 언제 알 수 있을까. 1. 단순 현 시점에서 읽은 데이터를 기준으로 데이터가 없다면 종료시키는 것도 지연에 따른 수신 문제로 일찍이 종료해버릴 수도 있다. 2. 송신 종료에 대한 규약을 문자로 정한다면? 이러한 문자가 파일 내용에 포함될 수 도 있다. TCP에는 송신자..

[TCP/IP 소켓 프로그래밍] (4) UDP 기반 서버 및 클라이언트

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 UDP 소켓 UDP 소켓은 목적지에 대한 주소 정보를 부여할 필요가 없다. 즉 connect()없이 데이터를 전송할 수 있다. 대신, UDP 패킷에 목적지 주소 정보를 담는 과정이 필요하게 되었다. vs TCP 소켓 TCP 소켓의 경우 일대일 연결을 지향하기 때문에 클라이언트 쪽에서 연결하고자하는 소켓에 상대방의 주소와 포트번호를 부여하는 과정이 필요했다. 이는 흐름 제어와 같은 신뢰성 있는 전송을 위한 연결 확립이 필요했기 때문이다. 연결 확립 과정이 필요없기 때문에 서버 쪽에서 listen()을 통한 연결 대기 상태가 필요가 없다. UDP 특징 TCP와 같이 연결 확립 과정이 필요없고 데이터 전송을 바로 시작할 수 있다. 또한 UDP 패킷에 주소를..

[TCP/IP 소켓 프로그래밍] (3) TCP 기반 서버 및 클라이언트 - 2

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 TCP 소켓의 입출력 버퍼 각 소켓은 입력 버퍼와 출력 버퍼를 관리하고 recv()를 통해 입력 버퍼에서 수신된 데이터를 읽어드리고 send()를 통해 출력 버퍼로 송신할 데이터를 쓴다. 소켓을 통한 데이터 수신 처리 - 데이터 수신 int recv(SOCKET s, const char* buf, int len, int flags); - recv함수는 성공 시 수신된 데이터의 바이트 수만큼 반환하고 그렇지 않으면 SOCKET_ERROR를 반환한다. // 한번에 100 바이트를 수신함 int recvLen = recv(hServSock, message, 100, 0); 위 코드를 통해 사용자가 수신해야할 데이터가 100바이트라면, 100바이트의 데이터가..

[TCP/IP 소켓 프로그래밍] (3) TCP 기반 서버 및 클라이언트 - 1

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 윈도우 기반의 소켓 프로그래밍입니다. TCP 기반 서버 및 클라이언트 구현 예시를 공부합니다. TCP/IP 프로토콜 스택 본 내용과 관련 있는 5계층과 프로토콜 스택은? 어플리케이션 계층 - Port 번호 전송 계층 - TCP/UDP 프로토콜 네트워크 계층 - IP 주소 링크 계층 - MAC 주소 물리 계층 TCP란 관련 내용: 2021.01.06 - [Computer Network] - [네트워크] 전송 계층 (2) TCP 프로토콜 / 혼잡 제어 [네트워크] 전송 계층 (2) TCP 프로토콜 / 혼잡 제어 TCP (Transmission Control Protocol) - 전송계층에서 신뢰성있는 통신을 위한 프로토콜 일대일 연결 지향적 (point ..

[TCP/IP 소켓 프로그래밍] (2) 소켓 프로토콜과 데이터 전송 특성

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 윈도우 기반의 소켓 프로그래밍입니다. 각 소켓 생성 과정에 필요한 정보에 대해 정리합니다. 프로토콜 이란 네트워크 통신을 위한 상호간의 규약 1. 소켓 생성 SOCKET socket(int af, int type, int protocol); af: 프로토콜 체계 (Protocol Family) type: 소켓 데이터 전송 방식 protocol: 프로토콜 - 첫번째 인자: 프로토콜 체계 PF_INET: IPv4 인터넷 프로토콜 PF_INET6: IPv6 인터넷 프로토콜 PF_LOCAL: 로컬 통신을 위한 UNIX 프로토콜 PF_PACAKET: Low Level 소켓을 위한 프로토콜 PF_IPX: IPX 노벨 프로토콜 - 두번째 인자: 타입 TCP (SO..

[TCP/IP 소켓 프로그래밍] (1) 소켓 생성

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 윈도우 기반의 소켓 프로그래밍입니다. 본 편에서는 기본적인 소켓 생성 과정과 기본 인터페이스에 대해 정리합니다. 소켓 이란 네트워크를 연결하기 위해 사용되는 인터페이스. 소켓에 주소체계, IP, 포트번호 등을 할당하여 사용한다. IP 주소와 포트번호를 할당하는 이유 IP 주소는 네트워크를 식별하고 목적지 호스트에게 전달하기 위해 사용한다. IP 주소만으로 호스트를 특정할 수 있으며 위와 같은 전달 역할은 네트워크의 라우터가 수행한다. 하지만, 같은 호스트 내에서도 여러 어플리케이션이 동작할 수 있다. 따라서 각 어플리케이션은 독립적인 포트번호를 할당받아 수신된 메세지가 자신의 어플리케이션에 도달할 수 있도록 한다. 위와 같은 포트 번호를 구분하여 메세..