분류 전체보기
![TCP와 링버퍼](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWS3rj%2FbtsdBezdtTI%2FSjztjRTOfzOT9vaMWEjitk%2Fimg.png)
TCP와 링버퍼
TCP와 L7 버퍼링 TCP와 UDP를 비교하였을 때, 개발 측면에서의 가장 큰 차이점은 UDP는 데이터그램 방식으로서 송신한 메시지가 정확한 크기로 상대방에게 전달되지만, TCP는 데이터 간 경계가 없이 스트림 방식으로 송수신된다는 점입니다. 이러한 특징으로 인하여 7계층에서 4계층 TCP 버퍼로부터 데이터를 읽어올 때, 메시지의 완전한 형태의 패킷으로 받아지지 않는 경우를 대비하기 위해 7계층에도 수신 버퍼가 필요합니다. 7계층에서 수신된 모든 네트워크 데이터를 버퍼링하고, 해당 데이터가 충분히 쌓이게 되어 읽을 수 있는 상태가 된다면 그 때 메시지를 읽어내어 버퍼에서 빼내는 방식을 사용해야 합니다. L7 버퍼의 필요성 수신 링버퍼는 TCP의 특성상 데이터의 경계가 없이 스트림으로 오는 수신 데이터를..
![더 빠른 길찾기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccIlFe%2FbtsdH3iA2ls%2FVzzJMch4TkKgl4BI3gjvCk%2Fimg.png)
더 빠른 길찾기
고전적인 길찾기 방법, ASTAR 그래프 형태의 구조에서 목적지로의 경로를 찾는 방법에는 다익스트라, 벨만-포드 알고리즘 등이 존재합니다. 하지만 이러한 그래프 구조는 실제 MMORPG 게임서버 맵에서 적용하기 쉽지 않기에, 타일 구조로 맵을 변환시켜 길찾기를 시도하고는 합니다. 타일 구조에서의 길찾기 방식 중 가장 대표적이고, 유명하며 간단한 방식이 A-Star 길찾기입니다. 출발지로부터 연결된 모든 인접 노드를 통해 목적지로 탐색해나가며, 탐색하는 노드마다 가중치를 부여해 목적지로 가는 최단 경로를 찾아내는 방식입니다. ASTAR 구현 ASTAR 구현을 위해서는, 각 타일에 대한 ‘탐색한 정보’를 담을 노드 구조체와, 탐색했던 노드와 탐색할 노드를 담을 컨테이너 자료형 두 개가 필요합니다. struc..
![레드블랙트리 구현 및 분석](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fojd5I%2FbtsdGoufiiM%2FYRK3O0BBvi4FzlhdWg8Edk%2Fimg.png)
레드블랙트리 구현 및 분석
개요 기본 이진트리와 레드블랙트리를 구현해보고, 시각화하여 확인할 수 있도록 합니다. 다른 컨테이너들과 성능을 비교해보고 게임 서버에서의 사용처를 분석합니다. 레드블랙트리 구현 이진탐색트리의 한계 이진탐색트리는 구현이 간편하지만, 다음 극명한 한계점들을 가지고 있습니다. 노드가 한쪽으로 쏠려서 관리될 수 있기에, 성능은 최악의 경우에 O(N)의 시간을 소모합니다. 이러한 경우 선형 탐색과 다를 바가 없기에, 기본 이진탐색트리를 사용하는 경우는 드뭅니다. 균형잡기 (밸런싱)과 회전 이러한 이진탐색트리의 한계를 극복하기 위해, 자체적으로 노드들의 높이를 맞출 수 있는 자가균형트리에서는 회전을 통해 노드간 밸런스를 맞춥니다. 코드와 주석이 문서 뒤에 위치합니다 레드블랙트리의 특징 레드블랙트리는 다음 네 가지의..
1% 네트워크 VI : 웹 서버에 도착하여 응답 데이터가 웹 브라우저로 돌아간다
VI : 웹 서버에 도착하여 응답 데이터가 웹 브라우저로 돌아간다 1% 네트워크 원리 을 읽고 정리한 문서입니다 ;) 서버의 개요 서버 머신은 용도에 따라 다양한 종류가 있으며, 하드웨어나 OS 부분은 클라이언트와 다른 것도 있지만, 네트워크에 대한 장비와 구성은 클라이언트와 조금도 다르지 않다. 사용하는 방법까지 같은 것은 아닌데, 서버의 어플리케이션은 동시에 다수의 클라이언트와 대화해야 하기 때문이다. 하나의 프로그램으로 여러 클라이언트들의 상태를 처리하기에는, 어느 클라이언트와 어디까지 대화가 진행되고 있는지를 파악해야 하기 때문에 쉽지 않다. 따라서, 클라이언트가 접속할 때마다 새로 서버 프로그램을 작동하여 서버 어플리케이션과 클라이언트를 1:1로 대화시키는 것이 일반적이다. 서버 프로그램을 접속..
1% 네트워크 V : 서버측의 LAN에는 무엇이 있는가
V : 서버측의 LAN에는 무엇이 있는가 1% 네트워크 원리 을 읽고 정리한 문서입니다 ;) 웹서버의 설치장소 요즈음의 인터넷 환경에서는 위협의 증가와 IP 주소의 부족으로 인해 서버 앞 단에 방화벽을 두는 것이 일반적이다. 이는 특정 서버에서 동작하는 특정 어플리케이션에 액세스하는 패킷만 통과시키고, 나머지는 차단한다. 프로바이더 등이 운영하는 데이터센터 시설에 서버를 설치하는 경우도 존재한다. 이 경우 NOC에 직접 접속되었거나 IX에 고속 회선으로 접속되어 있기에 쾌적환 네트워크 환경이 보장된다. 하지만 어떠한 경우라도, 패킷은 라우터에서 중계되고 최종적으로 서버에 도착한다는 점은 달라지지 않는다. 방화벽의 원리와 동작 방화벽의 기능을 수행할 다양한 방법이 고안되었지만, 성능과 가격, 편의성 등의 ..
1% 네트워크 III : 케이블의 앞은 LAN 기기였다
III : 케이블의 앞은 LAN 기기였다 1% 네트워크 원리 을 읽고 정리한 문서입니다 ;) 케이블과 리피터, 허브 속에 신호가 흘러간다 LAN 어댑터의 PHY (MAU) 회로에서 전기 신호로 형태를 바꾼 패킷은 RJ-45 커넥터를 통해 UTP (트위스트 페어 케이블)에 들어간다. 송출한 신호는 그대로의 모습으로 다음 기기에 도착하는 것이 아니라, 신호가 약해지고 왜곡이 생기는데, 이는 주변에 전자파가 금속 등의 도전체에 닿으면 전류가 발생하기 때문이다. 이러한 현상을 최소화 하기 위해 UTP 케이블 내부 선들은 두 가닥씩 꼬여 있다. 크로스토크 (crosstalk)라고 하는 내부 선끼리 잡음을 유발시키는 것 또한 선을 마주 꼬아 플러스와 마이너스 균형을 맞추어 해결한다. 이것보다 확실한 방법으로, 신호..
1% 네트워크 II-I IP와 이더넷의 패킷 송수신 동작
II-I IP와 이더넷의 패킷 송수신 동작 1% 네트워크 원리 을 읽고 정리한 문서입니다 ;) IP와 이더넷의 패킷 송수신 동작 패킷의 기본 패킷은 헤더와 데이터의 두 부분으로 구성된다. 헤더가 붙은 이상, 상위 계층에서 받은, 그 뒤에 붙은 데이터는 그저 바이너리 데이터로 보기 때문에, 이 것이 어떠한 프로토콜이든, 오류가 있던 전혀 상관하지 않고, 그저 이 데이터의 타입만 헤더로 적어놓게 된다. 패킷의 헤더를 조사하면 패킷의 목적지를 판단할 수 있고, 이 주소는 라우팅 테이블과 조합되면 어느 케이블로 가야 하는지를 알 수 있기에, 다음 중계 장치로 도착할 수 있는 것이다. 이렇게 요청을 보내면 거의 같은 경로로 회답 패킷이 오가는 것이 일반적이므로, 송수신 측을 구분하기보다는 둘 다 엔드 노드로 보는..
1% 네트워크 II : TCP/IP의 데이터를 전기 신호로 만들어 보낸다
II : TCP/IP의 데이터를 전기 신호로 만들어 보낸다 1% 네트워크 원리 을 읽고 정리한 문서입니다 ;) 소켓을 작성한다 TCP/IP 소프트웨어의 계층을 보면 다음과 같다. 네트워크 어플리케이션이 최상위에 존재한다. 웹 브라우저, 메일러, 웹 서버, 메일 서버 등 소켓 라이브러리가 어플리케이션과 OS 사이에 위치한다. 이 단계에 DNS 리졸버 또한 존재한다. OS 단계, 즉 프로토콜 스택은 두 계층으로 나뉜다. TCP / UDP 계층에서는 커넥션을 사용하여 통신할 것인지에 따라 캡슐화가 달라진다. IP 계층에서는 위 계층을 타고 온 데이터를 IP 주소를 통해 경로를 결정하여 패킷을 보낸다. 드라이버 소프트웨어 계층에서 LAN 드라이버가 LAN 어댑터를 제어한다. 기기에 하드웨어로 존재하는 LAN 어..