Socket
일반적인 network application 은 client prorgram 과 server program 의 쌍으로 구성된다. client program 과 server program 이 실행되면, client process 와 server process 가 생성되고 process 간 communication 을 위해 socket 을 사용한다.
socket 은 application layer 와 transport layer 사이에 존재한다. 프로그래머는 TCP/UDP 헤더를 어떻게 만들어야 하는지, 구조가 어떻게 되는지 등의 고민 없이 socket API 를 사용하여 network application 을 만들 수 있다.
Socket Programming with UDP
다음은 UDP 의 몇 가지 특징들이다.
- UDP 는 connectionless protocol 이므로 데이터 전송 전에 handshanking 이 없다.
- UDP 는 전달된 데이터가 손실되거나 변조될 수 있어 unreliable 하다.
따라서 application 을 개발할 때 UDP 는 unreliable transfer 를 제공한다는 것을 알아야 한다.
위의 그림은 UDP 를 사용한 application 의 간단한 예이다.
client 측의 동작은 다음과 같다.
- client 는 UDP socket 을 생성한다. UDP socket 생성 시 port number 는 사용하지 않는다. (socket)
- client 는 server 에 보낼 data 를 생성하고, socket 을 통해 destination address(server's IP address & port number) 과 함께 data 를 보낸다. (sendto)
- socket 을 통해 server 로 부터 응답을 받는다. 응답에는 packet 의 data 와 server address(server's IP address and port number) 가 있다. (recvfrom)
- socket 을 close 한다. (close)
server 측의 동작은 다음과 같다.
- server 는 UDP socket 을 생성한다. (socket)
- server 는 입력한 port number 로 socket 을 bind 한다. (bind)
- socket 을 통해 전달된 packet 의 data 와 client's address 를 얻는다. (recvfrom)
- server 는 client 에 보낼 data 를 생성하고, socket 을 통해 client's address 와 함께 data 를 보낸다. (sendto)
UDP client 는 socket - sendto - recvfrom - close 순으로 동작하고, UDP server 는 socket - bind - recvfrom - sendto 순으로 동작한다. sendto 와 recvfrom 의 순서는 application 마다 달라질 수 있다.
Socket Programming with TCP
TCP 는 connection-oriented protocol 이므로 데이터 전송 전에 3-way handshaking 을 통해 TCP connection 을 생성한다.
server 가 먼저 socket 을 생성하면, client 는 TCP socket 을 만들어 server TCP 와 connection 을 시도한다. client 와 연결되면 server TCP 는 새로운 socket 을 생성해 client 와 communicate 한다. 이때 handshaking 을 하던 socket 은 Welcoming socket, client 와 communicate 하기위해 새로 생성된 socket 을 Connection socket 이라고 한다.
application 을 개발할 때 TCP 는 reliable, in-order transfer 를 제공한다는 것을 알아야 한다.
위의 그림은 TCP 를 사용한 application 의 간단한 예이다.
client 측의 동작은 다음과 같다.
- client 는 TCP socket 을 생성한다. (socket)
- client 는 server's IP address 와 port number 를 사용해 server 에 TCP connection 요청을 보낸다. (connect)
- connection 이 생성되면 client 는 server 에 보낼 data 를 생성해 connection 이 생긴 socket 을 통해 보낸다. (send)
- socket 을 통해 server 가 전달한 data 를 받는다. (recv)
- socket 을 close 하여 TCP connection 을 close 한다. (close)
server 측의 동작은 다음과 같다.
- server 는 TCP welcoming socket 을 생성한다. (socket)
- server 는 입력한 port number 로 socket 을 bind 한다. (bind)
- server 는 client 의 TCP connection request 를 기다린다. maximum number of queued connection 을 설정할 수 있다.(listen)
- server 는 특정 client 에 대한 connection socket 을 생성한다. handshaking 이 성공하면 client socket 과 connection socket 사이에 TCP connection 이 생성된다. (accept)
- connection socket 을 통해 client 가 전달한 data 를 받는다. (recv)
- client 에 보낼 data 를 생성해 socket 을 통해 보낸다. (send)
- connection socket 을 close 한다. (close)
TCP client 는 socket - connect - send - recv - close 순으로 동작하고, TCP server 는 socket - bind - listen - accept - recv - send - close 순으로 동작한다. send 와 recv 의 순서는 application 마다 달라질 수 있다.
참조
Computer Networking _ A Top Down Approach, 7th, converted
https://web.archive.org/web/20080422072552/http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/socket_layer
'COMPUTER SCIENCE > Network' 카테고리의 다른 글
[Network] Transport Layer - Connectionless Transport: UDP (0) | 2022.12.08 |
---|---|
[Network] Transport Layer - Service and Multiplexing & Demultiplexing (0) | 2022.11.30 |
[Network] Application Layer - DNS (0) | 2022.11.23 |
[Network] Application Layer - Electronic Mail (0) | 2022.11.21 |
[Network] Application Layer - Web and HTTP (2) | 2022.11.15 |
댓글