상위 문서: Application Layer
개요
Socket 프로그래밍(Socket programming)의 목표는 socket을 사용하여 network communication을 사용하는 client/server 애플리케이션을 만드는 것이다. 이때 socket은 사용하는 transport service의 종류, UDP와 TCP에 따라 다르게 구현된다. UDP는 client와 server 사이에 'connection'(handshaking)이 존재하지 않는다. 또한 UDP를 통해서 전송되는 데이터는 out-of-order되거나, 누락될 수도 있다. 하지만 TCP는 handshaking을 통해서 클라이언트와 서버 사이의 'connection'을 구성한 다음, 서버와 클라이언트 사이의 통신이 진행된다. 이를 통해서 reliable data transfer를 가능케 한다.
Socket programming with UDP
파일:The client-server application using UDP.png
위는 UDP에 의해 구현된 클라이언트와 서버가 데이터를 주고 받는 socket 프로그래밍의 예시를 보여준다.
- 먼저 서버와 클라이언트는 데이터를 주고 받기 위해 각각 serverSocket, clientSocket을 만든다.
- 클라이언트는 데이터를 clientSocket를 통해 severSocket에 송신한다.
- 서버는 severSocket을 통해 해당 데이터를 읽는다.
- 서버도 데이터를 severSocket를 통해 clientSocket에 답장한다.
- 클라이언트는 clientSocket을 통해 해당 데이터를 읽고 clientSocket을 닫는다.
Socket programming with TCP
파일:The client-server application using TCP.png
위는 TCP에 의해 구현된 클라이언트와 서버가 데이터를 주고 받는 socket 프로그래밍의 예시를 보여준다.
- Server 측
- 서버는 클라이언트의 요청(request)을 받기 위해 특정 포트 번호(port=x)를 사용하여 소켓을 생성한다.
- serverSocket = socket() 명령어로 수행된다.
- 서버는 클라이언트로부터의 TCP 연결 요청을 기다린다.
- connectionSocket = serverSocket.accept() 명령어를 통해 TCP 연결이 설정된다.[1]
- 서버는 연결된 클라이언트로부터 전송된 데이터를 connectionSocket을 통해 읽는다.
- 서버는 클라이언트로부터 받은 요청에 대해 처리 후, 응답(reply)을 clientSocket으로 전송한다.
- reply 전송이 끝나면 서버는 connectionSocket을 닫고 이를 종료한다.
- 서버는 클라이언트의 요청(request)을 받기 위해 특정 포트 번호(port=x)를 사용하여 소켓을 생성한다.
- Client 측
- 클라이언트는 서버 IP 주소와 포트 번호(port=x)를 사용하여 서버와의 TCP 연결을 설정하기 위한 소켓을 생성한다.
- clientSocket = socket() 명령어로 수행된다.
- 클라이언트는 clientSocket을 통해 서버에 요청(request)을 보낸다.
- 서버로부터 전송된 응답(reply)을 클라이언트의 clientSocket을 통해 읽는다.
- 클라이언트는 응답을 받은 후, clientSocket을 닫고 종료한다.
- 클라이언트는 서버 IP 주소와 포트 번호(port=x)를 사용하여 서버와의 TCP 연결을 설정하기 위한 소켓을 생성한다.
각주
- ↑ accept()는 연결 요청이 도착할 때까지 기다리며, 요청이 오면 이를 수락하여 새로운 소켓인 connectionSocket을 반환한다.