gloryyam 님의 블로그

소켓 통신 : 송신/수신 통신 과정 본문

네트워크

소켓 통신 : 송신/수신 통신 과정

gloryyam 2025. 10. 22. 23:13

1) 소켓 통신(Socket Communication)

💡 소켓통신

- 소켓통신은 두 컴퓨터가 네트워크를 통해 '실시간 양방향 통신'을 제공하는 기술을 의미합니다. 좀 더 쉽게 설명하면 인터넷에서 컴퓨터들은 데이터(정보)를 주고 받아야 합니다. 예를들어 

  • 상대방이 카톡을 보낼 때 ⮕ 내 폰으로 도착해야 하고, 
  • 온라인 게임에서 내 캐릭터가 움직이면 ⮕ 서버가 그걸 알아야 합니다. 

이런 식으로 실시간으로 주고받는 통신을 가능하게 해주는 것이 '소켓통신'입니다.

 

※ 소켓은 운영체제의 네트워크 계층과, 전송 계층(TCP/UDP) 위에 동작하며, 응용 프로그램은 이 소켓을 통해 네트워크 자원에 접근할 수 있습니다.


 

2) 소켓의 구조

🧩 소켓은 다음 정보를 기반으로 통신 상대를 식별합니다.

구성 요소    설명
IP 주소 (Internet Protocol Address) 통신 상대 호스트(컴퓨터)의 위치
Port 번호 (Port Number) 해당 호스트 내에서 실행 중인 특정 프로세스를 구분하기 위한 번호
프로토콜 (Protocol) 통신 규칙 (일반적으로 TCP 또는 UDP)

 

즉, 소켓은 (IP 주소, Port 번호, 프로토콜)의 조합으로 식별 됩니다.

 


3) 일반적인 소켓통신 흐름

 

 

  • 클라이언트 소켓 ( 요청을 보내는 쪽 ) 
  • 서버 소켓 ( 요청을 기다리고 응답하는 쪽 )

1단계: socket() — 소켓 생성

구분 설명
Client / Server 모두 socket() 함수를 이용해 통신에 사용할 소켓을 생성합니다.

 

2단계: bind() (서버 전용)

구분 설명
Server bind() 함수는 소켓을 특정 IP와 포트 번호에 연결(바인딩)합니다. 이 과정을 통해 클라이언트가 해당 주소와 포트로 접속할 수 있는 네트워크 엔드 포인트가 설정 됩니다.

 

 3단계: listen() (서버 전용)

구분 설명
Server listen() 함수는 서버 소켓을 수신 대기 상태로 전환합니다. 이상태에서 서버는 클라이언트의 연결 요청을 큐에 저장하며, accept() 호출 시 큐에 있는 요청 중 하나를 처리합니다. 

 

4단계: connect() (클라이언트) ↔ accept() (서버)

구분 설명
Client connect() 함수는 지정된 IP와 포트의 서버로 연결 요청( Connection Request ) 을 전송합니다.
이 호출이 성공하면 TCP3way handshake 과정을 통해 연결이 수립됩니다.
Server accept() 함수는 대기 중인 연결 요청을 수락(Accept) 하며, 새로운 통신용 소켓을 반환합니다. 
이 소켓은 해당 클라이언트와의 전용 통신 채널로 사용됩니다.

 

5단계: send() / recv() — 데이터 송수신

구분 설명
Client & Server send() 함수는 연결된 소켓을 통해 데이터를 전송하고, recv() 함수는 데이터를 수신합니다. TCP의 경우 데이터는 스트림(Stream) 형태로 전달되며, 전송 순서와 무결성이 보장됩니다.

 

6단계: close() — 연결 종료

구분 설명
Client & Server close() 함수는 소켓을 닫고 연결을 종료합니다. TCP의 경우, FIN 패킷이 전송되어
연결 종료 과정(TCP 4-way handshake) 이 진행됩니다.

 

 

 


 

4) 소켓 종류

 

스트림 소켓 (Stream Socket)

개념

  • TCP 프로토콜을 사용하는 소켓입니다.
  • 즉, 연결형(Connect-oriented) 통신 방식
  • 데이터를 “흐름(Stream)” 형태로 주고받기 때문에 이름이 붙었습니다.

특징

항목 설명
프로토콜 TCP (Transmission Control Protocol)
통신 방식 연결형 (Connection-oriented)
데이터 전달 보장 있음 (순서·정확성 보장)
데이터 전송 단위 바이트 스트림 (데이터가 끊김 없이 연속적으로 전송됨)
예시 웹 브라우징(HTTP), 이메일(SMTP), 파일 전송(FTP)

💡 동작 원리

  1. 서버는 socket()으로 소켓 생성 → bind()로 IP/Port 설정 → listen()으로 연결 대기
  2. 클라이언트는 connect()로 서버에 연결 요청
  3. 서버가 accept()로 연결 수락
  4. 이후 send() / recv() 함수를 통해 데이터를 주고받음

➡ 즉, 전화 통화와 비슷해요.
전화를 걸고 연결된 뒤에야 서로 말을 주고받을 수 있고, 말이 순서대로 전달됨

 

데이터그램 소켓 (Datagram Socket)

 

개념

  • UDP 프로토콜을 사용하는 소켓입니다.
  • 비연결형(Connectionless) 통신 방식
  • 데이터를 “데이터그램(Datagram)” 단위로 주고받습니다.

특징

항목 설명
프로토콜 UDP (User Datagram Protocol)
통신 방식 비연결형 (Connectionless)
데이터 전달 보장 없음 (손실 가능, 순서 뒤바뀔 수 있음)
데이터 전송 단위 패킷(데이터그램) 단위
예시 영상 스트리밍, 게임, 화상통화, DNS 요청

💡 동작 원리

  1. 서버는 socket()으로 소켓 생성 후 bind()로 포트 설정
  2. 클라이언트는 sendto()로 목적지 IP/Port에 직접 데이터 전송
  3. 서버는 recvfrom()으로 클라이언트가 보낸 데이터 수신

HTTP 통신과 소켓 통신의 차이

(1) HTTP 통신

  • 클라이언트의 요청이 있을 때만 서버가 응답
  • JSON, HTML, Image 등 다양한 데이터를 주고 받을 수 있음
  • 서버가 응답한 후 연결을 바로 종료하는 단방향 통신이지만 Keep Alive 옵션을 주어 일정 시간동안 커넥션을 유지할 수 있다.
  • 실시간 연결이 아닌 데이터 전달이 필요한 경우에만 요청을 보내는 상황에 유리

 

(2) 소켓 통신

  • 클라이언트와 서버가 특정 포트를 통해 양방향 통신을 하는 방식
  • 데이터 전달 후 연결이 끊어지는 것이 아니라 계속해서 연결을 유지 → HTTP에 비해 더 많은 리소스 소모
  • 클라이언트와 서버가 실시간으로 계속하여 데이터를 주고받아야하는 경우에 유리
  • 실시간 동영상 스트리밍이나 온라인 게임 등에 사용

'네트워크' 카테고리의 다른 글

HTTP 프로토콜  (0) 2025.10.13
인터넷이란?  (0) 2024.08.28
응용계층 원리  (0) 2024.08.26