본문 바로가기

CS/컴퓨터네트워크8

[열혈] 멀티 프로세스 기반 서버구현 목적 : 멀티 프로세스 기반 서버 구현에 대해 이해 프로그램 : 1. 멀티 프로세스를 이용해서 한 번에 복수의 클라이언트와 통신 가능 2. 서버-클라이언트가 연결된 직후 서버 프로그램은 클라이언트의 ip, port번호를 출력 3. 클라이언트가 서버에 메세지를 보내면 서버는 그 메세지를 다시 클라이언트에게 전송함. 클라이언트 프로그램은 해당 메시지 출력. 4. 클라이언트는 q를 입력하여 연결을 끝낼 수 있음. 이 때 half-close 방식 사용 5. 서버는 어떤 클라이언트와 통신이 끝나면 그 클라이언트와 통신을 담당한 프로세스를 종료하고 sigaction을 이용해서 거둬들임. 해당 프로세스 아이디 출력 에코 서버-클라이언트, 좀비 프로세스, 고아 프로세스, fork. wait. waitpid, signa.. 2020. 10. 25.
[열혈] dns 도메인 이름, dns, 리눅스에서 도메인 이름으로 IP주소 얻어오기 도메인 이름 : 인터넷에서 서비스를 제공하는 서버들 역시 IP주소로 구분이 된다. ip주소로 서버의 주소정보를 기억하긴 힘들기 때문에 직관적인 형태의 도메인 이름을 IP 주소에 부여해서 이것이 IP주소를 대체할 수 있도록 한다. dns서버 : 도메인 이름에 해당하는 IP주소를 저장한 서버. dns 서버에 도메인 이름을 줘서 IP주소를 얻어낼 수 있다. 컴퓨터에 기본으로 설정된 디폴트 dns 서버가 모든 도메인의 IP 주소를 알고 있지는 않다. 만약 모른다면 다른 dns서버에 물어봐서 알려준다. 아래 그림과 같이 dns는 계층적으로 관리되는 일종의 분산 데이터베이스 시스템이라고 할 수 있다. 콘솔에서 ping www.naver.com 을 .. 2020. 10. 24.
[열혈] half close 목적 : half close의 의미, 사용이유, 사용 예제코드의 이해 배경지식 : write시 출력버퍼에 쓰고, read시 입력 버퍼에서 읽어온다. tcp의 슬라이딩 윈도우에 의해 입력버퍼의 크기보다 큰 데이터가 들어오진 않는다. 통신의 종료를 원한다는 것은 더이상 전송할 데이터가 존재하지 않는 상황을 의미한다. 이때, 본인의 출력 스트림을 종료시켜도 된다. 하지만 상대방도 종료를 원하는지는 모르기 때문에, 본인의 입력 스트림은 종료하면 안되는 경우가 생긴다. 이런 경우 본인의 출력 스트림만 종료할 수 있다. 이걸 half close라 한다. 출력 스트림을 종료하면 상대 호스트로 EOF가 전송된다. 이걸로 수신받아야 하는 데이터의 끝을 알 수 있다. #include int shutdown(int sock.. 2020. 10. 24.
[열혈] 단순한 서버-클라이언트 코드 구조의 이해 서버, 클라이언트 코드의 가장 단순한 버전을 이해하기 위한 글 1. 네트워크 프로그래밍과 소켓의 이해 네트워크 프로그래밍 : 네트워크로 연결된 서로 다른 컴퓨터가 서로 데이터를 주고받을 수 있도록 하는 것 소켓 : 물리적으로 연결된(ex. 인터넷) 네트워크 상에서의 데이터 송수신에 사용하는 운영체제가 제공하는 sw장치. 네트워크 망의 연결에 사용되는 도구. 네트워크를 통한 두 컴퓨터의 연결을 의미하기도 한다. 네트워크 프로그래밍을 소켓 프로그래밍이라고도 한다. 서버의 소켓 생성과정 1. socket() : 소켓 생성 2. bind() : IP주소와 PORT번호 할당 3. listen() : 연결요청 가능 상태로 변경 4. accept() : 연결요청 수락 클라이언트의 소켓 생성 과정 1. socket().. 2020. 10. 19.