IT 지식/네트워크(Network)

컴퓨터 네트워크 - Socket program - TCP(Web) & UDP

나아가는중 2021. 11. 30. 20:56
반응형

Socket

프로세스 간에 메시지 송수신시에 소켓을 통해 전달한다. 소켓은 애플리케이션 프로세스와 종단 Transport protocol(TCP or UDP)의 데이터 전달 통로의 역할을 한다. 프로세스는 소켓을 통해 Transport 층으로 데이터를 보내고 인터넷을 통해 전달이 되면 Transport층에서 소켓을 통해 프로세스로 전달하게 된다.

 

Socket program

Socket(소켓) 프로그래밍이란 네트워크 상에서 두 개의 애플리케이션 프로세스가 특정 포트를 통해 메시지를 주고받는(양방향 통신)이 가능하도록 만들어주는 방법이다. 서버와 클라이언트는 특정 포트를 통해 연결을 유지하고 있어 실시간으로 양방향 통신하는 것을 소켓 프로그래밍이라 한다. 실시간으로 데이터를 주고받는 상황에서 사용되며 실시간 동영상 스트리밍, 게임 등에 자주 사용된다.

 

소켓 프로그래밍을 사용하기 위해서는 클라이언트와 서버 모두 소켓을 생성해 가지고 있어야 한다. HTTP 프로그래밍에서는 클라이언트만 필요한 경우 서버로 요청을 보낼 수 있는 반면 소켓 프로그래밍에서는 서버 또한 클라이언트로 요청을 보낼 수 있다.

 

Socket program - TCP(Web)

서버는 특정 포트번호를 주어 소켓을 생성하면 welcomeSocket을 가지고 클라이언트 요청에 대기한다. 클라이언트는 소켓을 생성할 때 연결한 서버의 ID(Domain name), 포트 번호를 주면 바로 서버의 welcomSocket으로 three-way handshaking(연결)을 시작한다. 서버는 클라이언트로부터 요청이 오면 이에 대응하는 한 개의 소켓(connection socket)을 생성하여 클라이언트와 연결한다. 연결이 되면 데이터 전송은 클라이언트 소켓과 서버의 연결 소켓(connection socket) 간에 직접 이루어진다(Direct virtual pipe).

 

TCP 연결마다 서버는 새로운 클라이언트 연결마다 소켓이 생성되어 동일한 포트번호를 가진 복수개의 소켓이 만들어진다. 서버에는 동일한 포트번호의 복수개의 소켓 중 어느 클라이언트에서부터 만들어졌는지에 대한 정보를 같이 지칭해서 구분해야 한다. 그렇기 위해 4 tuple(클라이언트 IP 주소, 클라이언트 포트 번호, 서버 IP 주소, 서버 포트 번호)이 사용된다.

 

Socket program - UDP(Web)

UDP에서는 TCP와 달리 클라이언트 소켓이 생성될 때에 서버로 연결을 시도하지 않는다. 따라서 서버에서는 클라이언트 소켓 생성에 따른 소켓(connection socket)을 생성하지 않는다. 포트번호 한 개에는 단 한 개의 소켓이 서버에 존재한다. 클라이언트와 서버 간에  handshaking이 없고 연결을 맺지 않는다.

 

서버의 소켓은 클라이언트의 정보를 필요로 하지 않아 서버 IP 주소와 서버 포트 번호 2개의 tuple만 필요로 한다. 서버는 응용 프로그램 하나에 서버 소켓을 하나만 두어 모든 클라이언트 세그먼트를 송수신한다. 연결을 맺지 않으므로, 클라이언트는 세그먼트 송신 시에 서버의 IP주소와 포트 번호를 적은 데이터그램을 명시적으로 만들 워 줘야 한다. 서버는 매 수신 패킷마다 송신 클라이언트의 IP주소와 포트를 추출해야 한다.

반응형