🌱 오늘의 주제 : TCP와 UDP
🌱 소켓(socket) 프로그래밍
- 소켓 프로그래밍은 소켓을 이용한 통신 프로그래밍이다.
- 소켓이란 프로세스간의 통신에 사용되는 양쪽 끝단(socket)을 의미한다.
- 자바에서는 java.net패키지를 통해 소켓 프로그래밍을 지원하는데, 소켓통신에 사용되는 프로토콜에 따른 다른 종류의 소켓을 구현하여 제공한다.
- TCP와 UDP를 이용한 소켓프로그래밍이 있다.
🌱 TCP와 UDP
- TCP/IP 프로토콜은 이기종 시스템간의 통신을 위한 표준 프로토콜로 프로토콜의 집합이다.
- TCP와 UDP 모두 TCP/IP 프로토콜에 포함되어 있으며, OSI 7계층의 전송계층에 해당하는 프로토콜이다.
🌱 TCP 소켓 프로그래밍
- TCP 소켓 프로그래밍은 클라이언트와 서버간의 일대일 통신이다.
- 전화시스템과 유사해서, 서버소켓은 전화교환기에, 소켓은 전화기에 비유할 수 있다. 전화교환기(서버소켓)은 외부전화기(원격 소켓)로부터 걸려온 전화를 내부의 전화기(소켓)로 연결해주고 실제 통화는 전화기(소켓) 대 전화기(원격 소켓)로 이루어진다.
- 서버소켓은 포트를 독점한다.
- 포트(port)는 호스트(컴퓨터)가 외부와 통신을 하기 위한 통로이다.
1. 서버 프로그램에서는 서버소켓을 사용해서 서버 컴퓨터의 특정 포트에서 클라이언트의 연결요청을 처리할 준비를 한다.
2. 클라이언트 프로그램은 접속할 서버의 IP주소와 포트 정보를 가지고 소켓을 생성해서 서버에 연결을 요청한다.
3. 서버소켓은 클라이언트의 연결요청을 받으면 서버에 새로운 소켓을 생성해서 클라이언트의 소켓과 연결되도록 한다.
4. 클라이언트의 소켓과 새로 생성된 서버의 소켓은 서버소켓과 관계없이 일대일 통신을 한다.
🌱 Socket과 ServerSocket
- 서버소켓은 소켓간의 연결만 처리하고, 실제 데이터는 소켓들끼리 서로 주고 받는다.
- 소켓들이 데이터를 주고받는 연결통로는 입출력스트림이다.
- 소켓은 두 개의 스트림, 입력스트림과 출력스트림을 가지고 있다.
- Socket - 프로세스간의 통신을 담당하며, InputStream과 OutputStream을 가지고 있다. 이 두 스트림을 통해 프로세스간의 통신(입출력)이 이루어진다.
- ServerSocket - 포트와 연결이 되어 외부의 연결요청을 기다리다 연결요청이 들어오면, Socket을 생성해서 소켓과 소켓간의 통신이 이루어지도록 한다. 한 포트에 하나의 ServerSocekt만 연결할 수 있다. (프로토콜이 다르면 같은 포트를 공유할 수 있다.)
🌱 UDP 소켓 프로그래밍 - Client
- UDP소켓 프로그래밍에서는 DatagramSocket과 DatagramPacket을 사용한다.
- UDP는 연결지향적인 프로토콜이 아니기 때문에, ServerSocket을 필요로 하지 않는다.
- 사용하는 소켓은 DatagramSocket이며 데이터를 DatagramPacket에 담아서 전송한다.
- DatagramPacket은 헤더와 데이터로 구성되어 있으며, 헤더에는 DatagramPacket을 수신할 호스트의 정보가 저장되어 있다.
'Java' 카테고리의 다른 글
Java - 연산자 (0) | 2023.04.20 |
---|---|
Java - 변수 (variable) (0) | 2023.04.16 |
Java - 네트워킹, URL(Uniform Resource Locator) (0) | 2023.04.12 |
Java - 직렬화(serialization) (0) | 2023.04.12 |
Java - BufferedReader와 BufferedWriter, InputStreamReader와 OutputStreamWriter, File (0) | 2023.04.11 |