Socket

소켓 이란?

소켓은 애플리케이션이 네트워크를 통해 데이터를 주고받기 위해 사용하는 통신 인터페이스. 운영체제가 제공하는 네트워크 통신의 추상화된 엔드포인트.

애플리케이션은 TCP/IP를 다루지 않음. TCP헤더를 붙이고, 세그먼트를 만들고, 재전송을 관리하는 건 커널이 함.

애플리케이션은 단순히

write()
read()

만 호출함. 이때 애플리케이션과 커널의 TCP 스택 사이를 연결해주는 통로가 바로 소켓.


소켓이 왜 필요할까?

프로세스 간 통신이 아니라, 네트워크 상의 다른 호스트와 통신하기 위한 통신 엔드포인트.

  • 하나의 TCP 연결은 (Local IP, Local Port, Remote IP, Remote Port) 4개로 식별됨


소켓의 위치

Application

Socket (API)

Kernel TCP/IP Stack

Network

소켓은 애플리케이션 영역과 커널 영역 사이에 있는 인터페이스


소켓의 정보

TCP 소켓은 아래와 같은 정보를 가짐. 연결 상태를 가지는 객체


TCP 소켓의 동작 흐름

  • 서버측

  • 클라이언트측

  • 연결 수립 후

를 통해 데이터 송수신이 이루어짐.


→ 소켓은 파일처럼 동작함.

Linux / Unix에서는:

소켓은 파일 디스크립터(File Descriptor)임

즉, 파일처럼 read/write가 가능.


TCP 소켓과 UDP 소켓의 차이

TCP 소켓: 연결 지향, 신뢰성 보장, 순서 보장, 흐름제어, 혼잡 제어

UDP 소켓: 연결 없음, 신뢰성 없음, 대신 빠름, 패킷 단위 전송


소켓은 네트워크, 프로토콜이 아닌 “네트워크를 사용하는 인터페이스”.

사용자 영역에서 소켓이 동작하고, 실제 통신은 커널 영역에서 수행됨.

Last updated