컴퓨터 기초/TCP&IP20 11.프로세스간 통신 #.프로세스간 통신의 기본 개념 프로세스간 통신의 기본 이해 프로세스는 완전히 별개의 메모리 구조를 지닌다. 따라서 fork 함수 호출을 통해서 생성된 자식 프로세스 조차 부모 프로세스와 메모리 공간을 조금도 공유하지 않는다. 그래서 프로세스간 통신은 별도로 마련된 방법을 통해서만 이뤄질 수 있다. #.파이프(PIPE) 기반의 프로세스간 통신 다음 그림은 프로세스간 통신의 방법으로 사용되는 파이프 기법의 구조적 모델을 보이고 있다. 위 그림에서 보이듯이 두 프로세스간 통신을 위해서는 파이프라는 것을 생성해야 한다. 이 파이프는 프로세스에 속하는 자원이 아니다. 이는 소켓과 마찬가지로 운영체제에 속하는 자원이다. 운영체제가 마련해 주는 메모리 공간을 통해서 두 프로세스는 통신을 하게 된다. #include.. 2020. 8. 14. 10.멀티프로세스 기반의 서버구현 프로세스의 이해와 활용 #.다중 접속 서버의 구현 방법들 네트워크 프로그램은 CPU의 연산을 필요치 않는 데이터의 송수신 시간이 큰 비중을 차지하므로, 둘 이상의 클라이언트에게 동시에 서비스를 제공하는 것이 CPU를 보다 효율적으로 사용하는 방법이 된다. 때문에 우리는 둘 이상의 클라이언트에게 동시에 서비스를 제공하는 다중접속 서버에 대해 논의하고자 한다. 다음은 대표적인 다중접속 서버의 구현 모델 및 구현 방법이다. #.프로세스(Process)의 이해 프로세스는 간단히 다음과 같이 정의할 수 있다. "메모리 공간을 차지한 상태에서 실행중인 프로그램" 하드디스크에 저장되어 있는 상태는 프로그램이라고 한다. 이 프로그램이 메인 메모리(Main Memory)라는 곳으로 이동해서 실행을 위한 준비를 마치게 되.. 2020. 8. 13. 9.소켓의 다양한 옵션 소켓에는 다양한 특성이 존재하는데, 이러한 특성은 소켓의 옵션변경을 통해서 변경이 가능하다. #.Protocol Level 소켓의 옵션은 계층별로 분류된다. IPPROTO_IP 레벨의 옵션들은 IP프로토콜에 관련된 사항들이며, IPPROTO_TCP 레벨의 옵션들은 TCP 프로토콜에 관련된 사항들이다. SOL_SOCKET레벨의 옵션들은 소켓에 대한 가장 일반적인 옵션들로 생각하면 된다. #.getsockopt & setsockopt 거의 모든 옵션은 설정상태의 참조(Get) 및 변경(Set)이 가능하다. 그리고 옵션의 참조 및 변경에는 다음 두 함수를 사용한다. #include int getsockopt(int sock, int level, int optname, void* optval, socklen_t.. 2020. 8. 12. 8.도메인 이름과 인터넷 주소 #. Domain NameSystem IP주소와 도메인 이름 사이에서의 변환을 수행하는 시스템을 가리켜 'DNS(Domain Name System)'라 하며, DNS의 중심에는 DNS서버가 있다. #.도메인이름이란? 인터넷에서 서비스를 제공하는 서버들 역시 IP주소로 구분이 된다. 그러나 기억하기 쉽지 않아 기억하기 좋고 표현하기도 좋은 형태의 도메인 이름이라는 것을 IP주소에 부여해 사용하고 있다. #.DNS서버 네이버의 IP주소인 222.122.195.5를 직접 입력하여 네이버의 메인페이지에 접속하는 것과 www.naver.com 의 입력틍 통해 접속하는 것에 어떤 차이점이 있는 것일까?네이버의 메인 페이지에 접속한다는 점에서 차이가 없지만, 접속의 과정에는 차이가 있다. 도메인 이름은 해당 서버에 .. 2020. 8. 12. 7.소켓의 우아한 연결종료 #.TCP 기반의 Half-close TCP에서는 연결과정보다 중요한 것이 종료과정이다. 연결과정에서는 큰 변수가 발생하지 않지만 종료 과정에서는 예상치 못한 일이 발생할 수 있기 때문이다. #.일방적인 연결종료 문제 리눅스의 close 함수호출과 윈도우의 closesocket 함수호출은 완전종료를 의미한다. 완전종료라는 것은 데이터를 전송하는 것과 수신하는 것조차 불가능한 상황을 의미한다. 때문에 한쪽에서의 일방적인 close 또는 closesocket 함수호출은 경우에 따라서 효율적이지 못하다.  호스트A가 마지막 데이터를 전송하고 나서 close 함수의 호출을 통해서 연결을 종료하였다. 때문에 이후부터 호스트A는 호스트B가 전송하는 데이터를 수신하지 못한다. 결국엔 호스트B가 전송한, 호스트A가 .. 2020. 8. 11. 6.UDP 기반 서버/클라이언트 #.udp 소켓 특징 1.장점 - tcp 보다 간결한 구조로 설계되어서 상황에 따라 좋은 성능을 발휘 한다.(seq와 같이 패킷에 번호부여하는일 없음) - 프로그램 관점에서 구현이 용이하다. - 데이터 손실이 자주 발생하지는 않는다. - 신뢰성 보다 성능이 중시되는 상황에서 좋은 선택이 될 수 있다. 2.단점 - 상대방의 수신여부를 알 수 없다. - 전송도중에 데이터가 분실될 수 있다. - 신뢰할 수 없는 전송방법을 제공한다. - 데이터를 전송할 때마다 반드시 목적지의 주소 정보를 별도로 추가해야한다. (tcp 처럼 연결된 상태가 아니기 때문에.) tcp는 신뢰성 없는 ip를 기반으로 신뢰성 있는 데이터 송수신을 위해서 흐름제어를 하지만, udp는 흐름제어가 존재하지 않는다. 흐름제어 존재 유무가 tcp.. 2020. 8. 11. 5.TCP 기반 서버 클라이언트 - 2 # 앞전 포스팅에서 작성한 에코 클라이언트만 문제가 있다면? - echo_server.c while((str_len=read(clnt_sock,message,BUF_SIZE))!=0) // 클라이언트로부터 수신한 문자열이 있을때에 write(clnt_sock,message,str_len); // 그 문자열을 그대로 에코(문자열 끝 널문자는 제외!) - echo_client.c write(sock,message,strlen(message)); // 서버로 문자열(널문자 포함) 전송 str_len=read(sock,message,BUF_SIZE-1); // 서버에서 에코한 문자열 수신 #.참고 0) TCP 소켓은 "데이터의 경계가 없다. 1) 클라이언트가 서버로 문자열을 write 함수 한번을 호출하여 전달.. 2020. 8. 11. 4.TCP 기반 서버 클라이언트 #.TCP/IP 프로토콜 스택 #.LINK 계층 이 계층은 물리적인 영역의 표준화에 대한 결과이다. 이는 가장 기본이 되는 영역으로 LAN, WAN 과 같은 네트워크 표준과 관련된 프로토콜을 정의 하는 영역이다. #.IP계층 목적지로 데이터를 전송하기 위해서 중간에 어떤 경로를 거쳐갈 것인가? 이문제를 해결하는 것이 IP 계층이고, 이 계층에서 사용하는 프로토콜이 IP 이다. IP 자체는 비 연결지향적이며 신뢰할 수 없는 프로토콜이다. 즉, 오류발생에 대한 대비가 되어 있지 않은 프로토콜이 IP이다. #.TCP/IP 계층 데이터의 전송을 위한 경로의 검색을 IP 계층에서 해결해주니, 그 경로를 기준으로 데이터를 전송만 하면 된다. TCP와 UDP계층은 이렇듯 IP 계층에서 알려준 경로 정보를 바탕으로 데.. 2020. 8. 5. 3.주소체계와 데이터 정렬 #.ip 와 port ip는 인터넷 프로토콜의 약자로 인터넷 상에서 데이터를 송수신할 목적으로 컴퓨터에게 부여하는 값이다. 반면 port 번호는 컴퓨터에게 부여하는 값이 아닌, 프로그램상에서 생성되는 소켓을 구분하기 위해 소켓에 부여되는 번호를 뜻한다. #.인터넷 주소의 종류 ip 주소는 IPv4 와 IPv6로 나뉜다. 둘의 차이점은 IP 주소 표현에 사용되는 바이트 크기에 있다. IPv4는 4바이트(32비트) 주소체계이고, IPv6는 16바이트(128비트) 주소체계이다. IPv4 기준의 4바이트 IP 주소는 네트워크 주소와 호스트(컴퓨터) 주소로 나뉘며, 주소의 형태에 따라서 A,B,C,D,E 클래스로 분류가 된다. "IP 주소 = 네트워크 주소 + 호스트 주소" 네트워크 주소란 네트워크의 구분을 위한.. 2020. 8. 5. 이전 1 2 3 다음