본문 바로가기

전체 글80

KMP 문자열 패턴 매칭 이 사이트에서 많이 공부를 했다. Python을 사용하다보면 문자열 처리에서 in을 단 한번이라도 써 본 사람이 많을 것이다. 물론 문자열 말고도 사용이 되지만 in의 역할은 문자열 내에 내가 찾고 싶은 패턴이 있는 문자열이 있는지 없는지에 대한 여부를 확인 가능하다고 한다. 그럼 다른 언어에서는? 이 궁금증을 해결하고자 찾아보니 KMP라는 좋은 알고리즘을 알게 되었다. (in도 이렇게 구현되지 않았을까...) 간단하게 KMP는 in 처럼 문자열 내에, 내가 찾고 싶은 문자열이 있느냐 없느냐를 판단하는 알고리즘이라 생각하면 된다. 시간 복잡도는 무려 O(n+m) // n은 비교 대상 문자열 길이, m은 찾고 싶은 문자열의 길이... 그럼 이 KMP가 과연 빠른가를 브루트 포스랑 비교해보.. 2023. 6. 10.
WebSocket과 리눅스에서 소켓이란...? 준비과정 사실 소켓 디스크립터(sd)라는 단어를 듣고, 오잉? 이게 뭐지 해서 찾아보다가 이렇게 정리하게 되었다 ㅎㅎ... 사실 디스크립터라는 단어를 자주 접해보기는 하였는데, OS에서 파일 디스크립터 이야기를 지겹게 들었던 것이 기억나 아 그럼 소켓 디스크립터는 무엇인가에 대해 공부를 해보았다. 이를 통해 OS가 소켓을 어떻게 관리하는지에 대해 더 깊게 공부하는 계기가 되었다. 소켓 일단 소켓에 대해 조금 공부해보자 ㅎㅎ 일단 네트워크를 이용하여 통신을 하는 각 프로세스간의 종착점이라 생각하면 된다. 그렇기에 소켓은 전송 계층과 응용 프로그램 사이의 인터페이스 역할을 하며 떨어져 있는 두 호스트를 연결해준다. 소켓은 프로토콜, IP, Port로 정의가 된다. WebSocket은 뭐냐? 가끔씩 webso.. 2023. 6. 7.
OSI 7계층 PDU이름 아마 어떤 준비를 하던가, 가끔씩 이름이 햇갈릴 때를 대비해 한번 정리해 보았다 ㅎㅎ PDU란? Protocol Data Unit으로서 각 계층에서 헤더와 데이터를 합친 부분을 말한다 1계층 PDU : Bit ( 0과 1로 되어 있을테니...) 2계층 PDU : Frame 3계층 PDU : Packet 4계층 PDU : Segment ( 여러 곳에서 사용을 하는 단어 인데, 여기서도 사용을 한다.) 5계층 PDU : Data 6계층 PDU : Data 7계층 PDU : Data 잡담 전에 어디 수업에서, 굳이 이렇게 이름을 안나누고 다 패킷이라고 부르는 경우도 있다고는 하는데, 사실 패킷을 제일 많이 부르는 것 같다 ㅎㅎ... 2023. 6. 7.
DNS 계층 구조 DNS란 Domain Name Space의 약자이다. 우리는 네트워크 상에서 Host를 식별하기 위해 IP주소를 사용한다. 하지만 일반적으로 우리는 도메인 이름으로 사이트에 접속하는 경우가 대부분인데, 이 또한 최종적으로는 IP 주소랑 매핑이 되어야만 한다. 그래서 이 도메인 이름을 IP주소로 해석을 해주는 DNS가 나오게 되었다. DNS는 보통 패킷의 사이즈가 매우 작아 loss 발생이 적기에 UDP로 빠르게 보낸다고 한다. ( loss 되어도 단순 접속을 위한 시도이니 다시 시도하면 된다. ) 다만 큰 패킷을 보내거나 Zone Transfer 시에는 신뢰성 있는 전송이 필요해 TCP로 전송한다고 한다. (이에 대해서는 나중에 공부해 보겠다.) 역할 1) 호스트에게 별칭을 줄 수 있다. ex) rela.. 2023. 6. 6.
728x90