소켓(SOCKET)이란?

소켓

- BSD UNIX에서 개발한 Socket이 시초

💭 처음엔 UNIX에서만 썼지만 Windows에서도 socket을 써야겠다고 결심! 🤔

- Windows 95부터 소켓 API 지원
- Windows 98부터 IPv6, Bluetooth, IRda 등을 지원하기 시작



1. 소켓 통신을 하기 위해서 필요한 것은 무엇일까?

- OS, 소켓 API, 네트워크 통신망

 

OS: 서로 소통할 두 운영체제가 필요하다.(A 발전소 - B 가정)

소켓 API: 서로 어떻게 소통할지 수단을 정해야한다.(전봇대를 통해 전기 공급 결정)

네트워크 통신망: 선택한 소통 수단을 사용할 수 있도록 인프라를 만들어야한다.(전봇대 설치)

 

2. 소켓 API를 어떻게 이용해야 할까?

서버(전화를 받는 사람)

socket() 함수 호출
소켓 생성 휴대폰 개통 신청
bind() 함수 호출
IP주소/포트번호 할당 통신사에서 전화번호 발급
(🟰 휴대폰이 터지는 상태)
listen() 함수 호출
클라이언트의 연결 요청을 받을 수 있는 상태로 변환 전화가 울리면 받을 준비
accept() 함수 호출
클라이언트의 연결 요청 수락 전화가 오면 통화 버튼 클릭
read()/ write() 함수 호출
클라이언트와 서버 데이터 교환 휴대폰으로 통화
close() 함수 호출
소켓 종료 전화 종료

 

클라이언트(전화를 하는 사람)

socket() 함수 호출
소켓 생성 휴대폰 개통 신청
bind() 함수 호출 X
클라이언트는 bind() 함수 호출 X 통신사에서 전화번호 발급
(🟰 휴대폰이 터지는 상태) 
connect() 함수 호출
연결 요청 전화하기
read()/ write() 함수 호출
클라이언트와 서버 데이터 교환 휴대폰으로 통화
close() 함수 호출
소켓 종료 전화 종료

 

클라이언트가 bind() 함수 호출을 하지 않는 이유!

서버와 달리 운영체제에서 자동으로 주는 임시 포트를 사용하기 때문이다.

임시 포트를 사용하면 다른 서버와 연결을 할 때 재사용할 수 있다.

'Network > Socket' 카테고리의 다른 글

🔖IP 주소 변환 함수  (0) 2023.05.09
🔖SOCKADDR VS SOCKADDR_IN  (0) 2023.05.09
[Linux Socket] Server - bind() 함수[2]  (0) 2023.05.04
🔖 SOCK_STREAM VS SOCK_DGAM  (0) 2023.05.04
[Linux Socket] Server - socket() 함수[1]  (0) 2023.05.03