본문 바로가기
네트워크

[네트워크] Chap 2.8 - Socket programming (UDP & TCP)

by 개발 고양이 2024. 11. 18.

Socket programming

socket : internet application 개발 시 Transport layer (4계층)이 제공하는 서비스를 이용할 수 있는 API

 

 

두가지 socket type이 있음!

 

UDP

unreliable datagram(다른 말로 best effort) : 

simple & fast

fire & forget : UDP는 보내면 잊어버린다

 

 

TCP

reliable (rdt → no-loss & in-order) : TCP는 Reliable Data Transfer (rdt)를 한다. (byte단위)

byte stream-oriented (TCP가 자기가 원하는 크기대로 잘라서 보냄)
=> TCP는 rdt를 하는데, byte 단위로 함. 즉 no-loss & in-order로 보냄. msg단위가 아닌 byte별로 전송


Socket programming with UDP

point-to-multipoint (multicasting)에 적합

"no connection" between client & server

● no handshaking before sending data

- 데이터를 보내기 전에 handshaking을 안한다.
=> UDP가 위에 msg를 넣어서 보낼 때 상대방이 어떠한 곳으로 가야할지 UDP는 모른다. 소켓에 그런 정보가 없다.

 

- sender explicitly attaches (receiver IP destination address & port number) to each packet

=> application이 추가로 상대방의 IP 주소와 port 번호를 UDP한테 알려줘야함

 

- receiver extracts (sender IP address & port number) from received packet

 

● transmitted data may be lost or received out-of-order

=> UDP는 unreliable하다. 데이터를 보낼때 order가 보장되지 않는다.

 


Client/server socket interaction: UDP

 

server socket은 계속 열어놔야한다. 이 소켓은 저 한명의 client를 위한 전유물이 아니다. connection-less의 장점이 바로 여기에 있다. server socket을 저 한 명의 client만 쓰는게 아니라 다른 client들도 사용할 수 있어, 또다른 UDP 연결이 동시에 가능하다 => multicast가 가능! (point-to-multipoint)

 

그 이후, client도 마찬가지로 socket을 만든 후, server로 데이터를 전송한다. 이때, 자신의 IP 주소와 port number가 아닌, server의 IP 주소와 port number를 넣어서 보낸다. (UDP는 connection-less이기 때문에 client가 어디로 보내야 하는지 모르는 상태이기 때문)

 

server는 소켓을 통해 들어온 데이터를 보고 client 정보를 확인하고, client에 응답을 보낸다.

 

- connection을 별도로 맺기 않으므로 connection set-up 과정이 필요 없음

- port number를 항상 가지고 있어야 함

- UDP server socket은 계속 open시켜놔야함! → 또다른 UDP 연결을 위해


Socket programming with TCP

point-to-point (unicast)에 적합

 

Client must contact server

connection set-up before sending application msg

=> TCP는 UDP와 달리 connection-oriented이다. 

 

welcoming socket (door socket)이 미리 떠있어야 함. 그 다음엔 client가 들어올 때마다 socket이 하나씩 생김
=> HTTP가 n개의 client를 동시에 서비스한다면? → socket은 (n+1)개 떠있어야함!

 

dedicated 된 socket을 생성하고 여는 과정 = TCP connection setup (UDP에는 없음)

connection이 끝나면 close

→ socket이 dedicated 되었기 때문에 end가 port 번호를 함께 전송할 필요가 없다.

 

TCP provides reliable, in-order byte-stream transfer (“pipe”) between client and server

 


Client / server socket interaction: TCP

server process는 반드시 먼저 동작하고 있어야한다. (welcoming socket은 항상 하나 대기하고 있어야함)

TCP client가 host IP 주소와 port number를 이용하여 clientSocket 생성. 이때 connection set up을 하고 data를 보낸다.

connectionSocket은 이 client 전용이다! (TCP가 point-to-point로 unicast만 지원하는 이유)

 

server는 connectionSocket에서 client의 요청을 읽은 후 응답을 보낸다.

그 다음, clientSocket 전용이었던 connectionSocket을 close시킨다.

단, welcomingSocket (위 예시에서는 serverSocket이라는 이름이다)은 close하면 안된다. welcoming socket은 항상 열려있어야 함을 잊지말자.


UDP vs TCP

UDP TCP
Connection-less protocol
(비 연결지향형 프로토콜)
Connection-oriented protocol
(연결지향형 프로토콜)
Connection by message stream
(메세지 스트림을 통한 연결)
Connection by byte stream
(바이트 스트림을 통한 연결)
NO Congestion / Flow control
(혼잡제어와 흐름제어 지원 X)
Congestion / Flow control
(혼잡제어, 흐름제어)
Not ordered, Higer speed
(순서 보장되지 않음, 상대적으로 빠름)
Ordered, Lower speed
(순서 보장, 상대적으로 느림)
Unreliable data transmission
(데이터 전송 보장 X)
Reliable data transmission
(신뢰성 있는 데이터 전송 - 안정적)
UDP packet : Datagram
(데이터그램 UDP 패킷)
TCP packet : Segment
(세그먼트 TCP 패킷)
DNS, Broadcasting
(도메인, 실시간 동영상 서비스에서 사용)
HTTP, Email, File transfer
에서 사용