-
멀티플렉싱 SELECTIOT네트워크프로그래밍 2021. 11. 2. 19:54
멀티 프로세스 서버(fork)의 단점 성능이 점점 저하된다. 구현이 쉽지 않다. 프로세스 통신이 필요할 한 상황에서 서버 구현이 복잡하다. -> 그 대안으로 나온 것이 IO 멀티플렉싱이다. 멀티플렉싱 실전화기로 나타낸 것이다. 왼쪽은 하나의 리소스를 둘 이상의 영역에서 공유하는 것을 가리키는 것을 멀티 플렉싱이라고 한다. Select 함수의 기능과 호출 순서 fd_set 자료형 데이터 조작함수 FD_ZERO(fd_set *fdset) *fdset의 모든 비트를 0으로 FD_SET(int fd, fd_set *fdset) *fdset 중 소켓 fd에 해당하는 비트를 1로 FD_CLR(int fd, fd_set *fdset) *fdset 중 소켓 fd에 해당하는 비트를 0으로 FD_ISSET(int fd, ..
-
멀티캐스트와 브로드 캐스트IOT네트워크프로그래밍 2021. 10. 19. 19:59
멀티캐스트 하나의 패킷을 다수의 호스트로 동시에 전송하는 기능 멀티캐스트에 참여하는 호스트들 : 멀티캐스트 그룹 UDP 패킷을 전송한다. Sender와 Receiver Sender : 임의의 멀티캐스트 그룹에 데이터를 전송하는 호스트 UDP 소켓 생성 티캐스트 그룹으로 데이터 전송 TTL 설정(소켓 옵션 설정) Receiver : 임의의 멀티캐스트 그룹으로부터 데이터를 수신하는 호스트 UDP 소켓 생성 멀티캐스트 그룹 가입 (ip_mreq 구조체). 멀티캐스트 그룹 지정 (소켓 옵션 설정) 브로드캐스트 UDP를 기반 전송 목적지 IP주소 뿐이다. 동일 네트워크에 속하는 모든 호스트에 동시 전송 주소 선택에 따른 브로드캐스트 방식의 구분
-
멀티쓰레드 기반의 서버구현IOT네트워크프로그래밍 2021. 10. 12. 20:01
쓰레드 '경량화된 프로세스'라고 생각하면 편하다. 프로세스의 단점을 보안하기 위해 나왔다. 리눅스 gcc 에서 쓰레드를 사용하려면, 컴파일 생성 명령어 맨 뒤에 -lpthread라고 해줘야 한다. 프로세스와의 차이점 스텍을 제외한 나머지 메모리 공간을 공유 일부 메모리를 공유하므로 스레드간 통신이 편리하다. 쓰레드를 생성하는 함수 Pthread_create 함수 #include int pthread_create (pthead_t * thread, pthread_attr-t * attr, void * (* start_routine) (void *), void * arg ); 성공 시 0, 실패 시 이외의 값 리턴 thread : 생성된 쓰레드의 ID를 저장할 변수의 포인터를 인자로 전달 Attr : 생성하..
-
다중 접속 서버IOT네트워크프로그래밍 2021. 10. 5. 20:47
연결형과 비연결형 서버 연결형 스트림형 트랜스포트 프로토콜(TCP)을 사용하며 데이터의 안정적인 전달 비연결형 비연결형 트랜스포트 프로토콜(UDP)을 사용하는 서버로 네트웍이 안정적인 데이터의 전달을 책임지지 못하기 때문에 응용 프로그램이 필요하면 이를 보상해 주어야 한다 Stateful(TCP)과 Stateless(UDP) 서버라고 생각하면 된다. Iterative 서버 클라이언트의 서비스 요구를 순서대로 처리해 주는 서버 request 처리 시간이 짧은 경우에 사용 Iterative 서버는 프로그램 구현이 concurrent 서버보다 비교적 간단 -> 은행 창구에서 한명의 점원이 일을 처리하는 것과 비슷하다. Concurrent 서버 동시에 여러 클라이언트들에게 서비스를 제공하기 위하여 새로운 클라이..
-
UDP기반의 Client/ServerIOT네트워크프로그래밍 2021. 9. 28. 20:35
특징 신뢰할 수 없는 데이터 전송 방식이다. 흐름제어를 하지 않는다. 순서가 보장되지 않음 사용처 상당히 많은 패킷이 오가면서 별로 중요하지 않은 몇개의 데이타 손실 정도는 눈감아줄수 있는 곳 단순한 요청-응답을 필요로 하는 프로세스 흐름 제어와 오류 제어가 크게 필요하지 않은 프로세스 멀티캐스팅과 브로드캐스팅을 위한 전송 프로토콜 UDP 방식의 통신과정 listen 과정과 accept 과정이 필요없다. 클라이언트와 연결을 맺지 않기 때문에, fork, select, poll, thread 등을 이용해서 프로세스를 분기할 필요가 없다. UDP 서버의 소켓 하나의 소켓만 있으면 된다. 연결 설정 과정이 필요 없다 하나의 소켓을 가지고 여러 개의 소켓에 데이터 송*수신 가능하다.
-
도메인 이름과 IP 주소 변환IOT네트워크프로그래밍 2021. 9. 28. 19:48
도메인 인터넷에 연결된 컴퓨터를 사람이 쉽게 기억하고 입력할 수 있도록 문자(영문, 한글 등)로 만든 인터넷주소 DNS 서버 계층 구조를 가진 분산 데이터 베이스 서버 반복적으로 찾아가는 방식과 제귀적으로 검색하는 방법이 있다. Gethostbyname() : 도메인 명을 네트워크에서 통용되는 32비트 2진수로 바꾸어 준다. 도메인 이름 -> IP 주소를 얻는다. 인자로 호스트명을 주면 그 호스트에 대한 정보를 구할 수 있다 Gethostbyaddr() : 네트워크에서 통용되는 32비트 2진수를 도메인 명으로 바꾸어 준다. Hostent구조체 Struct hostent { char *h_name; // 공식 도메인 이름 char **h_aliases; // 해당 호스트의 닉네임 같은 것이다. 이걸로도 들..
-
주소체계와 데이터 정렬IOT네트워크프로그래밍 2021. 9. 14. 20:22
네트워크 바이트 순서 바이트 순서(Byte Order) 상위 바이트의 값을 메모리에서 어느쪽으로 두느냐에 따라서 구분한다. Big-Endian 상위 바이트 값이 메모리상에 먼저(번지수가 작은 위치) 표시 호스트 바이트 순서(Host Byte Order) Little-Endian 하위 바이트 값이 메모리상에 먼저(번지수가 작은 위치) 표시 호스트 바이트 순서(Host Byte Order) 데이터 표현 방식에 따라 문제점이 발생한다. 그래서 네트워크 상에서는 Big-endian을 쓴다. 바이트 순서 변환 (Endian Conversion) unsigned short htons(unsigned short); /*Port 정보의 바이트 순서 변경*/ unsigned short ntohs(unsigned shor..