전체보기(67)
-
L3에 관한 정리
안녕하세요 대학생 개발자입니다. 오늘은 L3에 대해서 정리를 좀 해보도록 하려고 합니다. L1, L2까지는 직접 연결된 단 두 개의 호스트만을 연결할 수 있는 방법에 대해서 제시를 하고 있었는데요 이제 L3로 오게 되면서 멀리 있는 호스트 즉 경유지를 거쳐서 직접 연결되지 않은 호스트에게 데이터를 전달할 수 있는 프로토콜이 등장하게 됩니다. 바로 IP라는 프로토콜입니다. 물론 OSI의 L3는 IP 다는 100% 맞다는 것은 아니지만 TCP/IP 4 layer에서는 일반적으로 IP이기 때문에 IP라고 말씀드렸고요. 그리고 주로 게임 서버에서는 IP 외에는 건드릴 경우가 없다고 생각해서 IP에 대해서 정리를 해보려고 합니다. 123.211.151.4와 같이 IP는 Dotted decimal type으로.으로..
2021.10.29 -
연산자와 조건문에 대한 얘기
안녕하세요 대학생 개발자입니다. 이번 글에서는 연산자와 조건문에 대한 얘기를 간단히 해보려고합니다. ----- cpu는 1,0 으로만 읽을 수 있는데 음수와 뺄셈을 어떻게 하는지..? 우선 이전 글에서 변수에 대한 언급을 했었습니다. 변수는 공간일 뿐이라고 말씀드렸었던 부분이 있는데요. 그저 공간밖에 존재하지 않는 상황에서 연산은 어떻게하며 뺄샘과 같은 처리는 어떻게 하는지 의문이실겁니다. 시작 전에 말씀드리지만 메모리에는 음수라는 개념이 존재하지 않습니다. 그저 1,0 만 존재하는 공간에 불과합니다. 이를 음수라고 정의하는건 사람이 한것이죠. 우선 시작하겠습니다. + 연산은 2진수에서도 10진수와 동일합니다 1111 + 1 = 10000 이죠 1010 + 101 = 1111 이죠 하지만 뺄샘같은 경우는..
2021.10.29 -
변수와 타입, 키워드에관한 얘기
안녕하세요 대학생 개발자입니다. 이번 글에서는 c언어의 기본을 공부할 때 간략하게 듣긴 했지만 정확한 원리에 대한 생각을 해보지 않았을 부분에 대해서 언급을 하려고 합니다. 게임 서버를 개발하실 정도의 실력이 가지고 계신 분들이라면 다 아실법한 내용들이 위주로 나오게 됩니다. 그러니까 아시는 분들은 어느 정도 걸러서 들으셔도 좋습니다. 게임서버를 개발하며 가장 중요한건 최적화와 안정성입니다. 알고리즘에 대한 최적화 부분도 상당부분 중요합니다. 하지만 당연히도 알고리즘만으로 최적화 할 수 있는 부분은 한계가 있습니다. 우선 우리는 메모리라는 녀석이 어떻게 생겨먹은 녀석이고 어떻게 사용할때 효율적인지를 알아보기 위해서 메모리에 대해 알아보고 갈겁니다. 그러다 보니 자연스럽게 언어와 관계없이 메모리 관점에서의..
2021.10.28 -
L2에 대한 내용 정리
안녕하세요 대학생 개발자입니다. 어제 글을 3개 적으면서 제가 다시 읽어봤는데 주저리주저리에 뇌피셜 가득인 글이더라구요... 어느 정도는 걸러서 들으시면 될 것 같습니다. 부족한 점 있다면 댓글로 잘못된 부분 말씀해 주신다면 반영해서 수정하도록 하겠습니다. 이번 글은 저번에 다 정리해보려고 했던 L7 to L7을 쪼개서 L2부분에 대한 내용만 좀 정리를 해보려고 합니다. 먼저 L2라고 한다면 ethernet을 통해서 전달되는 계층입니다. 즉 L1을 통해서 직접 연결되어있는 기기간의 통신을 정의하는 것입니다. 우선 L2는 연결된 모든 기기에게 데이터를 뿌린다 라는 개념이 존재합니다 브로드캐스팅이라고 합니다 그리고 내가 보내려고 하는 하나의 호스트에게만 데이터를 전달하는 유니캐스트가 존재합니다. 그리고 일부..
2021.10.28 -
내 손을 떠난 메시지 처리과정에 대한 정리
안녕하세요 대학생 개발자입니다. 이번 글에서는 TCP IP에 대한 간단한 정리..라고 적어놓고 나열을 해보겠습니다. 이번 글에서 주로 다루게 되는 내용은 다음과 같습니다. L7에서 메시지를 만들어서 다른 L7에게 전달을 하려고 한다면 어떤 일이 일이 일어나는지 간단하게 정리할겁니다. 그럼 시작하겠습니다. L7에서 AAA라는 데이터를 보내려고 한다면 우리는 API를 통해 전달을 해야 할 겁니다. 리눅스의 경우에는 오픈소스이기 때문에 커널이 오픈되어있고 커널에서 직접 뭔가를 할 수 있을것 같지만, 윈도우즈의 경우에는 유저에 대해서 커널이 닫혀있는 os입니다. 그러므로 우리가 직접 하드웨어를 제어하거나 커널에 직접 접근한다는 것은 불가능합니다. 그러므로 우리는 윈도우즈에서 제공하는 API를 사용해서 간접 접근..
2021.10.27 -
네트워크의 기본(TCP IP Layer (feat OSI 7Layer))
안녕하세요 대학생 개발자입니다. 이번 글에서는 기본적인 틀이라고 볼 수 있는 OSI 7Layer와 현재 가장 많이 사용하고있는 TCP/IP에 대해서 정리를 해보려고 합니다. 위 그림중 좌측에 보시는 게 osi 7 layer입니다. 하지만 저는 osi 7 layer는 완벽히는 모르고 tcp ip에 빙자해서 대략 설명하려고 합니다! 윗 계층부터 아랫 계층까지 출발해 보겠습니다. Physical layer 진짜 케이블을 의미합니다. 케이블이나 리피터 등 같은 그런 것들입니다. 데이터를 전기신호, 빛 신호 등을 이용해서 전달해주는 애들입니다. 리피터는 생겨먹은 것은 장비처럼 생겨서 L1스위치냐라고 물을 수도 있지만 주소가 존재하지 않을 뿐더러 네트워크 통신에서 그 어떠한 헤더를 뜯어볼 수도 없기 때문에 스위치라..
2021.10.27 -
Windows 에서 listen함수의 Backlog Queue의 크기를 구해보자.
안녕하세요 대학생 개발자입니다. 오늘의 목표는 listen을 했을 때 커널에 back log queue(listen queue)가 생기는데 그 큐의 사이즈의 크기를 코드로 직접 구해보려고 합니다. 서버 측에서 listen을 콜 할 때 SOMAXCONN -> 7fffffff signed int 중 가장 큰 값을 인자로 전달합니다. client에서 실제 connect를 과연 몇 개까지 할 수 있을까를 실험해봤습니다. client는 무한루프를 돌면서 loop back address:8000 으로 connect를 시도합니다. 실제 연결된 클라이언트 수는 200명에 불과합니다. 분명 나는 signed int 중 가장 큰 값인 7fffffff를 인자로 전달했는데 왜 200개밖에 되지 않을까? 당연히 21억어쩌고하는..
2021.10.27