본문 바로가기

반응형

진리는어디에

(289)
RST 메시지 1. Connect 시도시 목적 host와 port에 connection을 대기하는(listen)하는 프로세스가 없는 경우 발생 2. TCP가 현재 맺고 있는 연결을 날려 버리고자 하는 경우 발생. 3. TCP가 이전에 맺고 있던 연결이 더 이상 유효 하지 않다고 알리는 경우 발생
XML 기초 이번 포스트의 "XML의 의미"라고 적은 것은 XML의 기본적인 개념과 기능들을 알아 보고 XML이라는 도구를 어떻게 우리 생활에 도움이 되도록 사용 할 수 있는지 알아 보고자 함이다. 책이나 기타 웹문서에도 XML에 대한 설명들이 잘 나와 있지만, 여기에는 XML을 공부하면서 개인적으로 느꼈던 XML의 특성과 장점을 들어 어떻게 우리 생활에 XML이라는 도구가 도움을 줄 수 있는지 알아 보고자 한다. XML 기능 XML이 어떻게 우리 생활에 도움이 되는지 알아보기 전에 XML이 할 수 있는 일에 대해서 먼저 알아 보도록 하자. 흔히 우리는 XML이라고 하여 간단한 태깅 기능을 제공하는 문서만을 생각하지만 개인적으로는 XML, XPath, XSTL, Schema or DTD들을 묶은 하나의 패키지 형태가..
정규 표현식(Regular Expressions) /** 개인적으로 UNIX/Linux 환경에서 작업을 하다 보면 정규 표현식을 사용해야 하는 경우가 종종 발생한다. 정규 표현식을 사용하지 않는다고 하더라도 크게 못할일은 없지만, 무식하면 손발이 고생한다는 말을 절실하게 느끼게 된다. 이왕이면 할일이면 고생스럽게 손노가다를 하느니 간단하게 정규표현식을 이용해서 처리하면 더 좋지 아니한가? 그리고 한가지!! 나도 매일 착각하는 것이지만 정규 표현식에 적용되는 것은 문자 하나 단위지 문자열 단위가 아니라는 것!! 잊지 말아야 하겠다.. */ . 개행문자를 제외한 어떠한 문자와도 매칭 * 이전 표현식과 매칭되는 문자가 0개 이거나 그 이상이 있음 + 이전 표현식과 매칭되는 문자가 1개 이거나 그 이상이 있음 ? 이전 표현식과 매칭되는 문자가 0개 이거나 1개..
커널 오브젝트 - 핸들 /** 갈 수록 윈도우와 리눅스 사이에서 왔다 갔다 해야 할 일이 많아 지고 있다. 오늘은 윈도우의 커널 오브젝트(Kernel Object)라는 것에 대해서 알아 보도록 하자. */ 유저 모드와 커널 모드 '커널 오브젝트'에 대해 알아보기 전에 '유저 모드'와 '커널 모드'의 실행이라는 것에 대해서 알아 보도록 하자. 프로그램을 실행하게 되면 사용자가 직접 접근할 수 있는 유저 영역과 시스템 콜등을 통해서만 접근할 수 있는 커널 영역이 있다. 주로 커널 영역에는 운영체제, 프로세스간에 공유되는 데이터들이 보존되어 함부로 메모리 억세스를 할 수 없도록 제한하고 굳이 그 자원을 사용하기 위해서는 필수적으로 커널에게 자원을 요청하여 그에 대해 구분 할 수 있는 무엇인가를 얻어와 커널의 허가 아래서 사용해야 한..
connected UDP socket 일반적으로 UDP는 비연결 지향형 프로토콜로 알려져 있다. 맞는 말이다. 하지만 디폴트 UDP에 connect라는 것을 첨가하여 보다 편리 하게 쓸 수 있는 것도 사실이다. UDP소켓에다 connect 함수를 사용 한다는 것은 TCP의 그것 처럼 동작한다는 뜻은 아니다(Three-way handshaing 이라던지 하는 과정 들이 없다). 다만 커널에 소켓이 향하고 있는 주소를 기록해 두고 send 할 때 마다 주소를 넘겨 줘야 한다는 것 외의 모든 동작방법이나 기타등등은 다 똑같다. 자꾸 말을 번복하는 것 같지만, 내부에서 돌아가는 것은 다 똑같으나 사용법에 있어서 connected UDP와 unconnected(default) UDP는 다소 다른 점이 있다. 더 이상 목적지 주소와 포트를 지정 할 필..
[C++] operator 사용하기 /** stl을 좀 더 제대로 사용하고자 하니, functor가 필요하고, functor를 사용하고자 하니 operator가 필요 했다. 평소 operator를 잘 사용하지 않는 편에다가 'operator ()'라는 것이 익숙하지 않기에 그에 대한 테스트 코드를 작성 해 보았다. */ #include class __testOperator { public : __testOperator() { std::cout
Threads Scheduling /** 이래저래 먹고 사는데 바쁘다 보니 글하나 올리기도 빡세구나. 아직도 해야 할 일이 많은데 내가 생각하는 뭔가를 정리하고 올린다면 시간이 더 많이 걸릴 것 같고, 오늘은 웹에서 떠돌아 다니는 원문을 간단하게 해석해 보는 것으로 블로깅을 마무리 해야겠다. 주제는 쓰레드 스케줄링(thread scheduling)에 관련한 것으로, 내가 멀티 쓰레드를 이용해서 뭔가를 하는데 아무리해도 성능이 안나오길래 혹시 scheduling에 관련한 문제가 있지 않나 해서 조사하다 찾은 문서를 설명 할 것이다. 원론적인 스케줄링에 관련된 이야기는 아니고, 여러가지 스케줄링 기법이 있고, 내가 생성한 쓰레드가 어떤 스케줄링 알고리즘을 사용하게 설정 하느냐 하는 API 사용법 정도라고 생각하면 되겠다. 보다 자세한 쓰레드..
RTP(RealTime Transfer Protocol) 일반적으로 생각하기에 '실시간 전송 프로토콜'이라는 단어를 말하면 A라는 호스트에서 어떤 이벤트가 발생하면 그와 동시에 B라는 상대편에서도 그 이벤트에 대한 인식을 할 수있을 것을 생각하곤 한다. 하지만 네트워크 상에서의 물리적인 제약으로 그런 실시간은 불가능하다. 아주 좋게 가정해서 전파가 빛의 속도로 전송 된다고 가정하자. 빛은 1초에 지구를 7바퀴 반을 돈다고 한다. 계산을 편하게 하기 위해서 1초에 10바퀴를 돈다고 하자. 그럼 우리 나라에서 지구 반대 편에 있는 미국으로 데이터를 전송하기 위해서는 1/10의 초의 절반 1/20초가 걸린다. 이것는 우리 나라에서 미국으로 직선으로 아무런 방해도 받지 않고 날아가는 아주 나이스한 경우의 이야기고, 미국 까지 가는 도중에는 수많은(?) 라우터를 거쳐 ..
byte order(little-endian and big-endian) /** 1699년 걸리버가 표류한 소인국 릴리푸틴(Lilliputin)들은 삶은 달걀을 먹는 방법에 생사를 걸었다. 왕은 달걀의 양끝 중 작은 쪽부터 깨서 먹을 것을 명령했으나 큰 끝부터 깰 것을 고집하는 빅-엔디안(Big-Endians)들이 사생결단해 저항했다. 36 월력(月曆)간 6차례 대 폭동이 일어나고 1만1천명이 작은 끝부터 깨기를 거절하고 죽음을 택했다. 걸리버 여행기 中 */ 네트워크 바이트 순서(Network-byte order) CPU가 데이터를 처리하기 위해서는 가장 먼저 메모리에 데이터가 적재가 되어 있어야만 한다. 그런데 이 세상에는 CPU의 종류가 한 두 가지가 아니고, CPU를 만들어 내는 회사 또한 한 두군데가 아니다. 그리고 그 회사들은 저마다 각각의 바이트 순서(byte o..
주소값 변환 하기(inet_aton, inet_ntoa, inet_addr, inet_network) #include #include #include struct in_addr { unsigned long int s_addr; }; int inet_aton(const char *cp, struct in_addr *inp); char *inet_ntoa(struct in_addr in); in_addr_t inet_addr(const char *cp); in_addr_t inet_network(const char *cp); inet_aton() IPv4의 Dotted-Decimal Notaion 아이피 주소를 네트워크 바이트 오더(big-endian) 바이너리 폼으로 변경하여 in_addr에 저장한다. 주소가 정상적인 것이라면 0이 아닌 값을 리턴하고, 그렇지 않다면 0을 리턴한다. #include #in..

반응형