TCP: 4개의 글
들어가며 서버와 클라이언트 프로그래밍은 다양한 방법으로 할 수 있습니다. 그 net모듈을 사용하여 통신하는 서버 프로그래밍입니다. TCP/IP는 우리가 스타크래프트에서 네트워크 통신을 하며 게임을 해보았다면 익숙한 단어입니다. 아래 예제는 tcpserver.js와 tcpclient.js를 생성해 두개가 서로 데이터를 보내는 예제입니다. 최초 서버가 접속이 가능하도록 대기를 하고 있고, 클라이언트는 서버로 접속을 합니다. 접속된 connection을 통해 서로 데이터를 주고 받을 수 있습니다. 소스코드 소스코드는 tcpserver.js와 tcpclient.js로 구성되어 있습니다. tcpserver.js 서버를 생성하기 위해서 net의 모듈을 상용합니다. net.createServer를 통해 서버 객체를 ..
1. Half-close란? 1-1. 일방적인 close()의 문제점 A호스트와 B호스트가 서로 TCP통신하고 있다. 그러나 A호스트가 일방적으로 close()로 연결을 종료하면 B호스트는 A호스트로 데이터를 보낼게 있어도 보낼 수 없다. 따라서 일방적으로 송수신 스트림을 끊어버리는 건 문제가 있으므로, 하나의 스트림(주로 송신을 닫고, 수신을 열어둠)만 닫는 것을 Half-close 기법이라고 한다. 1-2. Half-close가 필요한 이유 서버는 단순히 데이터를 연속해서 전송하면 되지만, 클라이언트는 언제까지 데이터를 수신해야 하는지 알 수 없다. 주기적으로 read()함수를 호출하다가는 블로킹(호출된함수가 반환되지 않음) 상태에 빠질 수도 있다. 그러므로, 데이터전송이 끝났음을 알리는 EOF를 날..
TCP소켓에 이어서 쓴다 1. UDP소켓이란? UDP소켓은 비연결지향형 소켓이다. TCP에 있는 흐름제어가 없다. 특징으로는 전송순서에 상관없이 가장 빠른 전송,경로를 지향한다. 데이터 손실의 우려가 있고 한번에 전송할 수 있는 데이터의 크기가 제한된다. 데이터의 경계가 존재한다. TCP소켓과 반대라고 생각하면 쉽다. 데이터의 경계가 존재한다는 건, 3번 write()했으면 3번 read()를 해서 수신해야한다는 것이다. 이러한 특징때문에 UDP는 주로 고속의 데이터 전송이나 데이터가 조금 손실되도 상관없는 곳에 쓰인다. 대표적인 예가 동영상 스트리밍을 들 수 있겠다. 중학교 때 스타좀 (많이)해봤는데.. 스타크1을 한사람이면 특히 UDP란 글자가 익숙할거다. 게임플레이어간에 고속통신을 위하여 UDP로 ..
TCP소켓 프로그래밍의 기초 0. 다루는 소켓에 대하여 일반적으로 사용되는 INET(TCP/IP 를 이용한 인터넷 주소 패밀리)와 TCP(데이터 연결지향형, 신뢰성이 높은 Stream) 에 대해서 다룬다. 리눅스(centos7) 환경을 기준으로 다룬다. 이번에도 느낀건데 이런식으로 넘버링하면서 공부하면 뇌에 효율적으로 저장되는거같다.. 1. 소켓이란? 직관적인 예로 전구는 소켓을 이용하여 전기를 공급받는다. 이처럼 컴퓨터도 네트워크에서 데이터를 얻기위해 소켓을 사용할 수 있다. 소켓 프로그램은 서버-클라이언트의 2개의 프로그램으로 쌍을 이룬다. 서버는 서비스를 제공하는 프로그램이고, 클라이언트는 서버에 서비스를 요청하는 프로그램이다. TCP 소켓이란? TCP소켓은 연결지향형이다. 중간에 데이터가 소멸되지..