목록Server&Network (16)
방프리
이제 접속이 되었다는 로그를 확인하였으니 데이터 송,수신을 통해서 플레이어 동기화를 진행해보자. 포톤도 공부해보고 있는데 PUN 모델을 기준으로 설명하면 간단하게 다음과 같다. 어렵게 생각할 필요 없이 서버는 각각의 클라이언트에서 보내준 데이터를 받고 그대로 다른 클라이언트들에게 데이터를 보내주는 역할만 한다. 서버코드는 다음과 같다. const socketIO = require('socket.io')(5000); console.log('Server Start : port 5000'); socketIO.on('connection', function(socket) { console.log(`Player Connected : ${socket.id}`); //플레이어의 위치가 수정되면 socket.on('Pl..
IOCP 등 소켓 통신을 공부하면서 웹 소켓 통신을 사용해보면 어떨까라는 호기심이 생겨 사용해보았다. 마침 회사에서 Nodejs를 사용해서 관련하여 공부할 겸 테스트를 해보기로 하였다. 일단 Nodejs를 세팅한 웹 서버의 정보는 다음과 같다. 운영체제 Ubuntu 18.04 Nodejs Nodejs 14.16.0 Socket.IO 4.0.0 npm의 경우에는 따로 업데이트하지 않고 그대로 사용했다. Socket.IO 버전 관련해서 조사해보니 꽤나 많은 버전업이 있었는데 이 주기가 너무 짧아 사용 전 자기 버전의 가이드 문서를 반드시 한 번 확인해볼 필요가 있다. SocketIO 주소 : socket.io/ Socket.IO SOCKET.IO 3.0 IS HERE ~/Projects/tweets/inde..
IOCP란? - 입출력 완료를 쓰레드에 알려주는 모델. Completion Port에 들어온 입출력 통보를 Completion queue에 저장하고, queue에 저장된 데이터를 미리 생성한 Worker Thread에서 처리하는 방식으로 되어 있다. TCP/IP 열혈강의 책의 Iocp Echo 프로그램을 기반으로 제작하였다. 관련 소스 코드 https://github.com/deahoum/IocpChat deahoum/IocpChat Chatting program used by Iocp connection. Contribute to deahoum/IocpChat development by creating an account on GitHub. github.com * Echo 프로그램과 비교하면서 분석해야..
01. 다음 중 Time-wait 상태에 대해서 잘못 설명한 것을 모두 고르면? a. Time-wait 상태는 서버프로그램에서 생성한 소켓에서만 발생한다. b. 연결종료의 Four-way handshaking 과정에서 먼저 FIN 메시지를 전달한 소켓이 Time-wait 상태가 된다. c. 연결요청 과정에서 전송하는 SYN 메시지의 전송순서에 따라서 Time-wait 상태는 연결종료와 상관없이 일어날 수 있다. d. Time-wait 상태는 불필요하게 발생하는 것이 대부분이므로, 가급적이면 발생하지 않도록 소켓의 옵션을 변경해야 한다. a : Time-wait 상태는 서버, 클라이언트 구분 없이 먼저 연결의 종료를 요청하면 해당 소켓은 반드시 Time-wait 상태를 거친다. 하지만 클라이언트의 경우엔 ..
01. 다음 중 DNS(Domain Name System)에 대한 설명으로 잘못된 것을 모두 고르면? a. DNS가 존재하기 때문에 IP를 대신해서 도메인 이름을 사용할 수 있다. b. DNS 서버는 사실 라우터를 의미한다. 라우터가 도메인 이름정보를 참조하여 데이터의 진로를 결정하기 때문이다. c. 하나의 DNS 서버에 모든 도메인 정보가 다 등록되어 있지는 않다. 그러나 등록되지 않은 도메인의 IP주소도 얻어올 수 있다. d. DNS 서버는 운영체제에 따라서 구분이 된다. 즉, 윈도우 운영체제용 DNS 서버와 리눅스용 DNS 서버는 구분이 된다. b : DNS 서버는 일종의 분산 데이터 시스템으로 도메인 이름 정보를 참조하여 IP를 알아낸다. d : DNS 서버는 운영체제에 따라 구분되지 않는다. 0..
01. TCP에서의 스트림 형성이 의미하는 바가 무엇인지 설명해보자. 그리고 UDP에서도 스트림이 형성되었다고 할 수 있는 요소가 있는지 없는지 말해보고, 그 이유에 대해서도 설명해보자. 스트림 형성은 두 소켓이 연결되어서 데이터의 송수신이 가능한 상태를 말한다. 소켓 스트림은 한쪽 방향으로만 데이터가 이동 가능하기 때문에 일방적으로 데이터를 송신하는 UDP에서도 스트림잉 형성이 가능하다. 02. 리눅스에서의 close 함수 또는 윈도우에서의 closesocket 함수 호출은 일방적인 종료로써 상황에 따라서 문제가 되기도 한다. 그렇다면 일방적인 종료가 의미하는 바는 무엇이며, 어떠한 상황에서 문제가 되는지 설명해보자. 일방적으로 종료한다는 것은 데이터가 송수신 상태에서 중간에 스트림이 끊길 수도 있다는..
01. TCP보다 UDP가 빠른 이유는 무엇인가? 그리고 TCP는 데이터의 전송을 신뢰할 수 있지만 UDP는 신뢰할 수 없는 이유는 또 무엇인가? 간결한 구조와 일방적인 데이터 송신의 구조이기 때문에 굳이 상대방에서 도착했는지 확인하지 않고 보내기 때문에 TCP보다 빠르다. 하지만 신뢰성 있는 데이터 송수신을 위한 흐름제어가 없다. 02. 다음 중 UDP의 특성이 아닌 것을 모두 고르면? a. UDP는 TCP와 달리 연결의 개념이 존재하지 않는다. 따라서 반드시 TCP에서 보인 것처럼 1대 1의 형태로 데이터를 송수신하지 않을 수 있다. b. UDP 기반으로 데이터를 전송할 목적지가 두 군데라면, 총 두 개의 소켓을 생성해야 한다. c. UDP 소켓은 TCP 소켓이 할당한 동일한 번호의 PORT에 재할당..
01. TCP 소켓의 연결설정 과정인 Three-way handshaking에 대해서 설명해 보자. 특히 총 3회의 데이터 송수신이 이뤄지는데, 각각의 데이터 송수신 과정에서 주고 받는 데이터에 포함된 내용이 무엇인지 설명해보자. 소켓과의 연결, 데이터 송수신 그리고 연결종료의 과정을 Three-way handshaking이라 하며, 통신이 이뤄지는 과정에서 SYN과 ACK라는 데이터를 포함한다. 02. TCP는 데이터의 전송을 보장하는 프로토콜이다. 그러나 인터넷을 통해서 전송되는 데이터는 소멸될 수 있다. 그렇다면 TCP는 어떠한 원리로 중간에 소멸되는 데이터의 전송까지 보장을 하는 것인지 ACK와 SEQ를 대상으로 설명해보자. TCP는 SEQ의 데이터를 통해 패킷이 제대로 송수신되었는지 확인한다. ..