TCP ip 19

#025_Window_Network_비동기 소켓 입출력 모델_IOCP모델

안녕하세요 삽잡이입니다. 이번시간에는 지금까지 배워왔던 모델들의 장단점을 총 종합해서 만들었다고 해도 과언이 아닌, 마지막 모델 IOCP 모델에 대해서 알아보려고 합니다.I/O Completion Port 모델이라고도 부를 수 있습니다. Window 서버로 만들어지는 경우가 많이 없지만,만약 Window 계열로 서버가 만들어 지는 경우의 거의 90% 이상은 IOCP 모델로 만들어진다고 생각하셔도 된다고 합니다. 기존에 Overlapped 모델과는 차이점이 뭘까요?Overlapped 모델 중 Completion Routine를 사용할 경우에는 Thread 하나를 가지고 작업을 진행했었습니다.하지만, 이 작업을 진행하는 쓰레드를 여러대 생성할 수 있을 경우에 그 만큼 동시 작업 처리에 효율성이 생기지요.....

#020_Window_Network_소켓 입출력 모델_WSAAsynvSelect 모델

안녕하세요 삽잡이입니다. 이번 시간에는 네트워크 입출력 모델 중 WSAAsyncSelect 모델에 대해서 알아보겠습니다. Async 에는 '비동기적인' 라는 뜻이 있습니다.그렇다면 이번 시간에 알아볼 WSAAsyncSelect 모델은 비동기적 모델일까요? 다음 시간에 언급하겠지만, 우선 WSAAsyncSelect 모델의 Async는 여러 작업을 처리할 수 있다는 개념을 나타낸 것입니다.즉, I/O (입출력) 방식이 비동기 방식이 아니라,한 클라이언트의 작업이 다 처리되지 못했더라도,여러 클라이언트들을 같이 작업할 수 있다는 의미에서 Async입니다...동시 처리가 아닌 여러 작업을 처리한다는 것을 말하는 것이죠. 이해가 안간다면 이전 시간에 배웠던 동기/비동기에 대해서혹은, 다음에 다시 언급할 때 참고하..

#014_Window_Network_고정 길이 데이터 전송

안녕하세요 삽잡이입니다. 이번 시간에는 다양한 데이터 전송 방식중에'고정 길이 데이터 전송'에 대해서 알아보려고합니다. 클라이언트와 서버간에 데이터를 주고받을 때... 즉, 통신할 때 어플리케이션 버퍼에 데이터를 입력받고 send 함수를 통해 TCP send 버퍼에 복사해왔었습니다.반대로, recv 함수를 통해 TCP recv 버퍼에서 데이터를 받아와어플리케이션 버퍼에 저장을 받으며 통신을 진행했었습니다. 이렇게 3바이트를 보냈다면 3바이트를 전송받고 7바이트를 보내면 7바이트를 받으며 통신을 진행할 것이라는 소리입니다. 이와 같이 데이터를 주고 받을 때 주의해야할 사항이 있습니다.TCP 방식을 사용해야할 때인데,TCP는 stream 방식을 사용합니다. UDP는 반대로 Datagram 방식을 사용하지요...

#013_Window_Network_클라이언트 서버 통신 (실행 및 연결 확인)

안녕하세요 삽잡이입니다. 이번 시간에는 TCP 서버와 클라이언트간 실제로 실행이 되는 결과를PC에서 확인하고, 연결 역시 확인해보도록 하겠습니다. 지금까지 배워온 대기 소켓, 통신 소켓을 실제로 확인해보는 것입니다.서버와 클라이언트를 통신하기 위한 코드를 보는 것이 아닌,결과 창만을 확인해보도록 하겠습니다. TCP 서버에서 listen() 함수가 성공적으로 return 이 되면 대기 큐가 생긴다고 했습니다. cmd 창에서 netstat -a 명령어를 쳐서 네트워크 연결 상태를 확인해보겠습니다. 본인은 9000번 포트를 통해 소켓을 하나 생성했습니다.이에 'LISTENING' 상태의 TCP 서버가 존재함을 확인할 수 있습니다.즉, 대기 소켓의 정보를 확인한것입니다.'로컬 주소'는 내 정보를 말하는 것이고 ..

#012_Window_Network_클라이언트 서버 통신 (소켓 관점)

안녕하세요 삽잡이입니다. 이번 시간에는 소켓 관점에서 본 클라이언트와 서버간 통신에 대해서 살펴보도록 하겠습니다. 참고로, 이전 내용들을 이해하지 않고 오시면 이해하는데 불편함이 있으실 수 있으니혹여나 처음 접하시는 분들은 이전 글들을 참고해주시길 바랍니다. 우리가 클라이언트와 서버의 통신 때 사용하던 send 함수의 예시입니다.이때 첫번째 인자인 '통신 소켓 핸들'은 클라이언트와 서버간에 통신을 위해 사용됩니다.즉, 통신 소켓의 핸들에는 현재 자신의 IP도 있지만, 상대방의 정보들도 알고 있다 이겁니다.다시말하면, 통신 소켓의 핸들을 통해 서로 연결되어있는 서버와 클라이언트간에 통신이 가능해지는 것입니다. send() 함수를 봤으니 이제 잠시 resv() 함수를 볼까요?recv() 함수에는 통신 소켓과..

#011_Window_Network_클라이언트 서버 통신 (데이터 관점)

안녕하세요 삽잡이입니다. 이번 시간에는 서버와 클라이언트간에 통신을 '데이터 관점'에서 바라보는 시간을 가지겠습니다. 즉, 데이터 관점에서 클라이언트와 서버가어떻게 데이터를 주고 받는지를 확인하겠다는 것입니다. A와 B라는 두 대의 컴퓨터가 있다고 가정해보겠습니다.A 는 서버이고 B는 클라이언트입니다. 어플리케이션 수준에서는 소켓의 핸들만을 알 수 있습니다.그리고 OS는 TCP(전송 계층) 수준, IP(인터넷 계층) 수준, 데이터 링크 계층을 관리합니다.즉, 우리가 어플리케이션을 만들고 통신을 하려고 해도 어플리케이션 계층의 수준이 아닌 이외의 수준은 OS가 알아서 처리해준다는 것입니다. 소켓을 만드는 동시에 OS는 TCP 계층 수준에서 Send 버퍼와 Recv 버퍼를 같이 만듭니다. 각각 서버와 클라이..

#010_Window_Network_클라이언트 서버 통신 (TCP 클라이언트 - 코드)

안녕하세요 삽잡이입니다. 이번 시간에는 TCP 서버가 데이터를 받고 뿌리는 현장을 코드와 함께 살펴보겠습니다. TCP 클라이언트도 다르지 않습니다. 우선 소켓을 하나 생성합니다. 그리고 클라이언트도 소켓 구조 주소체에 정보들을 채워넣습니다.서버에서 배웠는데.... 복습하는겸 다시 한번 가볍게 살펴보자면...소켓 주소를 채우는 것입니다. '주소 체계', 'IP', '포트번호'이들을 묶어서 소켓 주소라고 부르며, 우리가 생성한 소켓에 집어넣는 것입니다. 여기서 주소를 보시면 '127.0.0.1' 이라고 채워져 있는 코드를 확인할 수 있습니다.이는 루프백 주소라고 부르는데, 라우터를 거치지 않습니다.내 컴퓨터 내에 OS에서는 TCP, IP, 데이터 링크 수준들이 존재합니다.데이터를 주고 받기 위해서는 내 컴퓨..

#009_Window_Network_클라이언트 서버 통신 (TCP 서버 - 코드)

안녕하세요 삽잡이입니다. 이번시간에는 TCP 서버에 대한 실제 코드를 보면서 공부하는 시간을 가지도록 하겠습니다. 우선 통신을 위해 서버를 만들어야겠지요...그 중 가장 우선이 통신을 하기 위한 객체를 생성해야합니다. 소켓이지요....정확히는 소켓의 핸들이겠지만요... 첫번째 인자는 주소 체계를 설정하는 인자입니다. 주소 체계란, 주소 지정 방법을 가리킵니다. 프로토콜에 따라 주소를 지정하는 방법이 다르기 때문에 설정을 해줘야하는 것입니다. 통신을 하기 위해서 여러가지 채널들을 제공합니다.예를 들어 군사망, 범용망, 그 외 특수한 망 등등을 말입니다. 이를 구분짓는 정의 값을 첫번째 인자로 결정하는 것입니다. 통신영역을 설정하는 함수로써, 인터넷 영역을 사용할지 , IPv4 방식을 사용할지즉, 어떻게 통..

#008_Window_Network_클라이언트 서버 통신 (TCP 클라이언트)

안녕하세요 삽잡이입니다. 이번 시간에는 지난시간에 이은 TCP 클라이언트에 대해서 알아보려고합니다. 클라이언트는 가장 먼저 socket()함수를 통해 통신하기 위한 수단인 socket을 생성해야합니다.그 다음 클라이언트는 자신이 원하는 서버에 접속을 해야합니다.따라서, connect()함수를 제공해줍니다. 서버와 연결하기 위해서 필요한 함수이지요...해당 함수 안에는 일반적으로어떤 프로토콜 체계를 사용할지, 어떤 IP를, 어떤 포트를 사용하겠다는 정보를 포함시켜야합니다. socket() 함수까지는 통신 소켓이 아니지만, connect()함수가 성공하게 되면 통신 소켓이 됩니다.참고로, 클라이언트는 서버가 아니기 때문에 대기 소켓이 없습니다.단지, 통신 소켓을 가지고 있을 뿐이지요...통신 소켓도 여러개를..

#007_Window_Network_클라이언트 서버 통신 (TCP 서버)

안녕하세요 삽잡이입니다. 아... 속이 안좋고... 머리가 아픕니다...오늘은 평소보다 더!중간 중간 했던 말들을 또 하는 루프 사태가 발생할 수 있으니... 양해바랍니다....허허허.... 이번 시간에는 클라이언트 서버 프로그램에 대해서즉, 클라이언트와 서버가 어떻게 통신을 하는지에 대해 알아보겠습니다. 우선, 이 글은 TCP/IP 프로토콜 기반의 통신 방식을 알아보려고 하는 글입니다.TCP/IP 프로토콜 말고도 여러가지 프로토콜들이 존재하는데,각 프로토콜마다 통신하는 방법이 다릅니다.그 여러가지 프로토콜 중에서 일반적으로 가장 널리 사용하는 TCP/IP 프로토콜 통신을 배워보겠다는 것이지요. 네트워크에서 많이 사용하는 모델 중 하나가 바로 '크라이언트와 서버 모델'입니다. 일반적으로 서버는 한 대가 ..