Socket programming with UDP and TCP
Socket programming

▶Two socket types for two transport services:
- UDP: unreliable datagram
--> 메시지를 하나의 UDP segment로 만들어서 delivery한다. - TCP: reliable, byte stream-oriented
--> Application layer에서 내려보낸 메시지 boundary 인식 x --> TCP buffer에 메시지 받아서, TCP segment를 만든다.
Socket programming with UDP
Client/Server interaction: UDP

- Server - client의 접속을 기다리고 있음
: Create socket, port = x (프로그램 상에서 프로그래머가 명시적으로 포트 번호를 지정함)
- serverSocket = socket(AF_INET, SOCK_DGRAM) -- UDP socket - Client
: Create socket
- clientSocket = socket(AF_INET, SOCK_DGRAM) -- UDP socket - Client
: Create datagram with server IP and port = x; Send via clientSocket; - Server
: Read datagram from serverSocket; Write reply to serverSocket spefifying client address, port number; - Client
: Read datagram from clientSocket; - Client
: Close client Socket;
Example app: UDP client

- Include Python's socket library.
- serverName = 'hostname'
- serverPort = 12000 - Create UDP socket for server.
- clientSocket = socket(AF_INET, SOCK_DGRAM) - Get user keyboard input.
- message = raw_input('Input lowercase sentence:') - Attatch server name, port to message; send into socket.
- clientSocket.sendto(message.encode(), serverName, serverPort)) - Read reply characters form socket into string.
- modifiedMessage, serverAddress = clientSocket.recvfrom(2048) -- server가 reply를 보낼 때, server의 주소를 포함한다. - Print out received string and close socket.
- print modifiedMessage.decode() clientSocket.close() -- clientSocket은 close, serverSocket은 close(x).
Example app: UDP server

- Include Python's socket library.
- serverPort = 12000 -- 프로그래머가 server socket을 지정한다. - Create UDP socket.
- serverSocket = socket(AF_INET, SOCK_DGRAM) - Bind socket to local port number 12000.
- serverSocket.bind((", serverPort)) - print("The server is ready to receive)
- Loop forever.
- while Ture: - Read from UDP socket into message, getting client's address (client IP and port).
- message, clientAddress = serverSocket.recfrom(2048) -- client가 보내는 메시지에는 client의 주소가 포함된다.
- modifiedMessage = message.decode().upper() - Send upper case string back to this client.
- serverSocket.sendto(modifiedMessage.encode(), clientAddress)
Socket programming with TCP
▶ Client must contact server
- Server: welcome socket
▶ Client contacts server by:
- Creating TCP socket, specifying IP address, port number of server process.
- When client create socket, client TCP establishes connection to server TCP. (welcome socket에 connect)
- When server is connected by client, server TCP create new socket for server process to communicate with that particular client.
--> 일단 TCP connection이 생기면, 그 다음부터는 목적지 주소가 필요하지 않다.
cf) UDP: 매 segment가 독립적으로 취급되기 때문에, 항상 목적지 주소가 필요하다.
--> server는 동시에 여러 client를 응대할 수 있다.
▶ Application viewpoint
: TCP provides reliable, in-order byte-stream transfer.
Client/Server socket interaction: TCP

- Server: running on hostname, wait for incoming connection request.
- Client: create socket, connect to hostname, port = x. -- Server의 주소로 접근한다.
- Server - welcome socket에서 받아들인다.
- connectionSocket = serverSocket.accept() - Clinet: send request using clientSocket.send()
- Server - 해당 client만을 전담하는 socket을 만든다.
- read request from connectionSocket.recv()
- write replay to connectionSocket.recv() - Client: read reply from clientSocket.recv()
- Client: close clientSocket.close() -- 여러 번 전송 후, client socket을 close한다.
- Server: close connectionSocket.close()
- connection socket: close (o)
- welcome socket: close (x)
Example app: TCP client

- Python socket library.
- server의 servername, port 주소를 포함한다. - Create TCP socket for server, remote port 12000.
- clientSocket = socket(AF_INET, SOCK_STREAM) -- TCP socket
- clientSocket.connect((serverName, serverPort)) -- 서버 정보를 포함한다. - No need to attach server name, port.
- clientSocket.send(sentence.encode()) -- 이제 서버 정보를 포함하지 않아도 된다. - Client socket close.
Example app: TCP server

- Python socket library.
- serverPort = 12000 -- 서버의 prt 번호를 프로그램 상에서 명시한다. - Create TCP welcoming socket.
- serverSocket = socket(AF_INET, SOCK_STREAM) -- TCP socket
- serverSocket.bind(('', serverPort) -- 서버 포트에 바인딩한다. - Loop forever
- Server wiats on accept() for incoming requests, new socket created on return.
- connectionSocekt, addr = serverSocket.accept() -- 특정 client의 address에 해당하는 serverSocket을 만든다. - Read bytes from socket (but not address).
- sentence = connectionSocket.recv(1024).decode() -- 전용 server에서 정보를 읽는다. 이때, 주소는 읽을 필요가 없다. - Close connection to this client (but not welcoming socket).
Socket programming with UDP vs. TCP
1) client 비교


- Python socket library.
- Create UDP/TCP socket for server.
- UDP: SOCK_DGRAM
- TCP: SOCK_STREAM
+ TCP에서는 client socket이 serverName, serverPort를 특정한다. (특정 client를 전담하는 server socket) - Get user keyboard input.
- Server name, port number attatch vs. non-attatch.
- UDP: Attatch server name, port number.
- TCP: No need to attatch server name, port number. - Print out received string; Close client socket.
2) server 비교


- Python socket library.
- Create UDP/TCP socket.
- UDP: SOCK_DGRAM
- TCP: SOCK_STREAM -- welcoming socket - Bind socket to local port number 12000.
- Request x vs. o
- UDP: request (x)
- TCP: server begins with listening for incoming TCP request. - Loop forever.
- Accept x vs. o
- UDP: acception (x)
- TCP: server waits for accept for incoming request, new socket created in return. -- 특정 client에 대한 전담 socket - Read message vs. byte stream, Message includes address vs. no-address
- UDP: read from UDP socket into message, getting client's address.
- TCP: read bytes from TCP socket, but not address in UDP - Socket no-close vs. close.
- UDP: close (x)
- TCP: close (o) but not welcoming socket.
Chapter 2: summary
▶ Application architectures
- client-server
- P2P
▶ Application server requirements (transport 계층에게의 요구)
: reliability, bandwidth, delay, security
- reliability: TCP
- bandwidth, delay, security: 지원(x)
▶ Internet transport service model
- TCP: connection-oriented, reliable
- UDP: unreliable, datagrams
▶ Specific protocols:
- HTTP, HTTP/2, HTTP/3
- SMTP, POP, OMAP
- DNS
▶ Performance comparison: client-server vs. P2P
▶ Video streaming, CDNs, DASH
▶ Socket programming: TCP, UDP sockets
'Computer Network > 컴퓨터네트워크' 카테고리의 다른 글
| [컴퓨터네트워크] 3. Transport Layer (2) (0) | 2023.10.21 |
|---|---|
| [컴퓨터네트워크] 3. Transport Layer (1) (0) | 2023.10.12 |
| [컴퓨터네트워크] 2. Application Layer (7) (0) | 2023.10.06 |
| [컴퓨터네트워크] 2. Application Layer (6) (1) | 2023.10.06 |
| [컴퓨터네트워크] 2. Application Layer (5) (1) | 2023.10.04 |