소켓
- 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 |