본문 바로가기

개발자 레니는 지금 -/공부하는 중

ING - [ TCP/IP ] 1. 네트워크 프로그래밍의 이해







네트워크 프로그래밍의 이해













 네트워크 프로그래밍이란?



- 두 디바이스(컴퓨터 or 핸드폰 등등)간의 데이터를 주고 받을 수 있도록 프로그래밍을 하는 것이다.


Socket ( 소켓 ) 






- 두 디바이스간에 데이터를 주고 받으려면 물리적 연결이 필요한데 이러한 연결을 도와준다.

- 소켓을 통해 연결된 두 디바이스는 서로 데이터를 주고 받을 수 있다.

- 모든 데이터 송수신 작업이 끝나고 소켓을 닫으면 두 디바이스간의 연결은 사라진다.






 컴퓨터의 주소?



- 우리가 누구에게 전화를 하려면 그 사람 고유의 전화번호를 알고 있어야 하며, 집에 방문하려면 집 주소가 있어야 한다. 그와 마찬가지로 다른 디바이스가 내 디바이스에 접속을 하려하면 내 디바이스 주소를 알아야한다.


IP

- 어떤 디바이스인지를 식별한다.

PORT

- 어떤 프로그램인지를 식별한다.





예를 들어 내 디바이스에서 온라인 게임을 실행 시키면 내부적으로 211.111.11.1 IP에 PORT 10을 넣어 게임 프로그 서버로 접속하게 된다는 얘기.





 소켓 연결 과정



- 두개의 디바이스가 연결되는 과정이라고 생각하고 보면된다, 모든 네트워크 프로그램 개념은 동일 하다.

- 네트워크 프로그램을 만들 때는 언제나 Server와 Client가 짝을 이루게 만들어야 한다.


1. SERVER


A. socket을 생성한다.

- 모든 프로그램은 소켓을 생성하는 함수가 있다. 보통 함수명은 socket이며 언어 마다 이름은 다를 수 있지만 반드시 존재한다.


B. socket에 주소정보를 할당한다.

- 우리가 누구에게 전화를 하려면 고유한 전화번호를 알고 있어야한다. 그와 마찬가지로 다른 디바이스가 내 디바이스에 접속하려고 하면( Client가 Server에게 접속하려고 한다면 ) 내 주소를 알아야하며 내 주소를 알려주기전에 나에게 그 주소를 할당해 주는 작업이 필요하다.

- 이런 함수를 bind라 하며 거의 모든 프로그램 언어가 비슷한 명을 사용한다.


C. 연결 수신 대기 상태

- client가 연결을 시도하면 받을 수 있도록 해당 socket을 listen socket으로 설정한다. 이렇게 socket을 listen 상태로 바꾸는 함수는 대부분 listen이라는 이름을 갖고 있는 함수를 사용한다.


D. client의 연결 시도

- sever가 연결을 받을 준비( listen socket 상태 )가 되어 있으므로 client에서는 server에 연결을 시도한다. 이때, client는 connect 함수를 사용하며 위의 server 소켓이 가지고 있는 IP, PORT를 입력한다.


E. 연결 수락

- client가연결을 요청하면 server에서는 수락을 할 수 있다. 여기서 수락을 하는 함수 명은 accept이며 수락과 동시에 또 하나의 socket이 생성 된다. listen으로 설정된 socket은 또 다른 client의 연결을 받기위해 계속 대기 해야 하기 때문이다.


이렇게 연결이 완료되면 데이터 송수신을 할 수 있다.