[네트워크/통신] 소켓이란? TCP와 UDP, 소켓통신의 흐름
소켓(Socket)이란?
* 소켓 : 소프트웨어로 작성된 통신 접속점, 응용프로그램은 소켓을 통하여 통신망으로 데이터를 송수신하게 된다.
- TCP/IP를 이용하는 창구 역할
- 두 프로그램이 네트워크를 통해 서로 통신을 수행할 수 있도록 양쪽에 생성되는 링크의 단자
⇒ 서로 다른 프로세스끼리 데이터 전달이 가능하다 !
① 스트림 (TCP)
- 양방향으로 바이트 스트림을 전송, 연결 지향성
- 오류 수정, 정송처리, 흐름제어 보장
- 송신된 순서에 따라 중복되지 않게 데이터를 수신 → 오버헤드가 발생
- 소량의 데이터보다 대량의 데이터 전송에 적합 → TCP를 사용
② 데이터그램 (UDP)
- 비연결형소켓
- 데이터의 크기에 제한이 있음
- 확실하게 전달이 보장되지 않음, 데이터가 손실돼도 오류가 발생하지 않음
- 실시간 멀티미디어 정보를 처리하기 위해 주로 사용 ex) 전화
그렇다면, 소켓 통신을 할 때 서버와 클라이언트는 어떤 흐름을 가지고 돌아가게 될까?
* 소켓 통신의 Workflow
- 서버 (Server)
1) socket() 함수를 이용하여 소켓을 생성
2) bind() 함수로 ip와 port 번호를 설정하게 됩니다.
3) listen() 함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정
4) accept() 함수를 사용하여 클라이언트와의 연결을 기다림
- 클라이언트 (Client)
1) socket() 함수로 가장먼저 소켓을 엶.
2) connect() 함수를 이용하여 통신 할 서버의 설정된 ip와 port 번호에 통신을 시도
3) 통신을 시도 시, 서버가 accept() 함수를 이용하여 클라이언트의 socket descriptor를 반환
4) 이를 통해 클라이언트와 서버가 서로 read(), write() 를 하며 통신 (이 과정이 반복)