본문 바로가기

분류 전체보기56

회고 프로젝트 | 2023년 상반기, 뭐 했더라? 여름을 맞이하며 쓰는 6개월 회고 ※  아래 내용은 개인 의견이 포함된 블로그 주인의 일상 이야기입니다.      ※  그리 특별한 내용이 없습니다. ㅠㅠ   해당 게시글을 공개로 바꾼 2024년 7월 16일 기준, 다음 달이면 어느덧 입사한 지 만 2년이 된다. 아래 게시글은 작년 6월에 작성하려고 시도한(?) 회고 프로젝트다. 아래 회고 프로젝트를 적다가 중단한 이유는, 1. 내가 한 일을 구체적으로 적기에 보안상 이슈가 있을 것 같았다.2. NDR을 개발하기 시작한 지 6개월 차였던 당시에 "매달 진행한 업무"를 정리하면서 내가 많이 부족하다는 것을 느꼈고, 3. 무엇보다 내 글이 다른 사람들에게 큰 도움이 안 될 것 같아서였다. 회고 프로젝트를 시작했던 이유는 비전공자 개발자로서 네트워크 보안 개발을 희망하는 사람들에게 도움을 줄.. 2024. 7. 16.
RCU (Read-Copy Update)에 대한 간단한 이야기 ※  아래 내용은 스스로 공부한 내용을 정리한 글입니다.     ※  때로 정확하지 않을 수 있으며, 참고만 부탁드립니다.     ※  잘못된 내용이 있을시 댓글로 알려주시면 감사하겠습니다.  시작에 앞서, RCU를 이해하기 위해 linked list가 상당히 중요함을 강조하겠다. 모든 알고리즘의 구성은 대체로 linked list를 활용한다. tree도 linked list로 연결을 하고, hash도 bucket 당 linked list로 매달아 놓는 특징이 있다. 그러다 보니 병렬 처리 시에 공유자원으로 linked list를 처리하는 게 매우 중요하다는 것을 인지하고 RCU에 대한 이해를 시작하자. RCU (Read-Copy Update) 개념은 바로 등장한 것은 아니다. 십여 년에 걸쳐 defer.. 2023. 7. 18.
Valgrind의 Invalid read 와 Invalid write에 대해 ※  아래 내용은 스스로 공부한 내용을 정리한 글입니다.     ※  때로 정확하지 않을 수 있으며, 참고만 부탁드립니다.     ※  잘못된 내용이 있을시 댓글로 알려주시면 감사하겠습니다. Invalid readInvalid read는 할당되지 않은 메모리로부터 값을 읽으려 할 때 발생되는 현상이다. malloc()해준 크기를 넘어 값을 읽거나, stack의 상단을 넘치게 읽었을 경우 Invalid read가 발생한다. valgrind에서 Invalid read 메시지가 나올 때는, 얼만큼의 바이트 크기를 초과로 읽어 들였는지 확인할 수 있다. 아래는 Invalid read의 샘플 코드이다.포인터 변수 p에 20 byte 크기를 할당했고, for 문으로 값을 채워주었다.하지만 변수 p를 printf 하.. 2023. 7. 18.
Multi Thread 환경에서 성능 비교 1탄 ※  아래 내용은 스스로 공부한 내용을 정리한 글입니다.     ※  때로 정확하지 않을 수 있으며, 참고만 부탁드립니다.     ※  잘못된 내용이 있을시 댓글로 알려주시면 감사하겠습니다. 테스트 조건8개의 멀티 스레드를 띄우고, 3초간 while 루프 안에서 count++ 하도록 함.단, 모든 스레드가 완전히 띄워졌을 때 루프를 시작해야 한다. 비교 케이스 local 변수 카운팅tls 변수 카운팅global 변수 카운팅global 변수 mutex lock 사용 시 카운팅 1. local 변수local 변수는 stack에 저장된다. 그리고 스레드끼리는 stack을 공유하지 않는다.위 그림처럼, 스레드마다 stack 크기가 지정되므로 스레드끼리 독립적인 메모리 주소를 갖게 된다.   2. TLS 변수TL.. 2023. 7. 16.
Multi Thread에서 mutex lock 사용하기 ※  아래 내용은 스스로 공부한 내용을 정리한 글입니다.     ※  때로 정확하지 않을 수 있으며, 참고만 부탁드립니다.     ※  잘못된 내용이 있을시 댓글로 알려주시면 감사하겠습니다.    멀티 스레드 환경에서 공유 자원에 동시에 접근해도 될까?멀티 스레드 환경에서 공유된 자원에 동시에 접근하게 되면, 스레드끼리 경쟁이 일어나면서 false sharing(거짓 공유), cache thrashing(캐시 쓰레싱), cache invalid storm 같은 문제가 발생한다. 이를 해결하기 위해 공유 자원에 접근할 때 하나의 프로세스가 접근하고 있는 경우 다른 프로세스는 접근하지 못하도록 제한하기 위해 mutex lock을 이용한다. Mutex는 무엇일까?Mutext는 mutual exclusion이라.. 2023. 7. 10.
이중 포인터(double pointer) 이해하기 in C 포인터에 대해 간단히 말하자면,포인터란 해당 변수의 메모리 공간 주소를 가리키는 변수를 말한다. 변수에서 쓰는 * 표시는 역참조 표시이며, 해당 변수가 가리키는 메모리주소의 값을 가져오는 것을 의미한다. 사실 말로만 설명하면 이해하기 어려운 게 포인터다. 그래서 직접 주소값을 찍어보며 포인터 변수를 알아보았다.int a = 10;int *b = &a;int **c = &b;이렇게 세 가지의 변수를 선언했다. a는 정수형 변수,b는 포인터 변수,c 또한 포인터 변수지만 b와 달리 이중포인터로 선언했다. a와 b, c의 메모리 주소값을 보자.printf("a address : %p\\n", &a);printf("b address : %p\\n", &b);printf("c address : %p\\n", &c.. 2023. 7. 9.
ARP, Address Resolution Protocol | 직접 설명해보는 ARP 흐름 ※  아래 내용은 스스로 공부한 내용을 정리한 글입니다.     ※  때로 정확하지 않을 수 있으며, 참고만 부탁드립니다.     ※  잘못된 내용이 있을시 댓글로 알려주시면 감사하겠습니다.     ※ 노란 형광펜은 궁금점, 회색 형광펜과 파란 형광펜은 궁금점 해결에 대한 표시 입니다.ARP (Address Resolution Protocol) LAN (L2) 에서 목적지를 제대로 찾을 수 있도록 돕는다.  ARP의 흐름을 알아보자. 먼저 FTP에 hostname이 들어온다. FTP 클라이언트는 DNS의 resolver에게 hostname을 주고 IP 주소를 얻는다. FTP 클라이언트는 TCP와 IP 주소를 연결하는 설정을 한다. TCP는 IP 주소와 IP datagram을 보내면서 remote host.. 2022. 9. 29.
Port, IP, MAC 직접 설명해보는 식별자 이야기, 그리고 host, swtich, network의 관계 ※  아래 내용은 스스로 공부한 내용을 정리한 글입니다.     ※  때로 정확하지 않을 수 있으며, 참고만 부탁드립니다.     ※  잘못된 내용이 있을시 댓글로 알려주시면 감사하겠습니다.     ※ 노란 형광펜은 궁금점, 회색 형광펜과 파란 형광펜은 궁금점 해결에 대한 표시 입니다.  7 Layer에는 세 가지의 식별자가 있다. L2의 MAC 주소, L4의 Port 번호, L3의 IP 주소다. 이것들은 무엇에 대한 식별자일까? MAC 주소는 H/W 단의 NIC (Network Interface Card) 에 대한 식별자다. H/W에 붙은 번호로 이해하면 된다. 더 쉽게 말하면 LAN 카드다. LAN 카드는 모두 MAC 주소를 가지고 있다. 만약 노트북이 두 개의 NIC을 가지고 있으면 MAC 주소도 .. 2022. 9. 29.
직접 설명해보는 switch가 하는 일 ※  아래 내용은 스스로 공부한 내용을 정리한 글입니다.     ※  때로 정확하지 않을 수 있으며, 참고만 부탁드립니다.     ※  잘못된 내용이 있을시 댓글로 알려주시면 감사하겠습니다.   ※ 노란 형광펜은 궁금점, 회색 형광펜과 파란 형광펜은 궁금점 해결에 대한 표시 입니다.  "switch가 하는 일은 swtiching이다"  swtich는 "교차로", swtiching은 "어떤 인터페이스의 경로 선택", 그리고 Network는 "고속도로", "고속도로 위 이정표"는 라우팅 테이블, packet은 "자동차"라고 하자.경로 1번은 A->B->E->D->목적지경로 2번은 A->D->목적지 라고 할 때, 경로 2번이 훨씬 빠르고 효율적이다.  A, B, C, D, E, F 같은 각 지점은 라우터라고 .. 2022. 9. 29.