-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
68 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
## 1️⃣ 소켓이란? | ||
|
||
소켓은 네트워크 통신에서 데이터를 주고받는 **인터페이스**입니다. 데이터를 송수신하기 위해 반드시 소켓을 거쳐 전송 계층으로 데이터를 전달해야 한다. | ||
즉, 클라이언트와 서버가 **소켓**을 통해 데이터를 교환한다. | ||
|
||
--- | ||
|
||
## 2️⃣ 소켓의 종류 | ||
|
||
### TCP **(스트림 소켓)** | ||
|
||
- 연결 지향적(Connection-oriented). | ||
- 데이터의 신뢰성을 보장 (데이터 손실, 순서 뒤바뀜 방지). | ||
- 연결을 먼저 설정(3-way handshake) 후 데이터 송수신. | ||
- 데이터를 스트림(stream) 형태로 전송. | ||
|
||
### UDP **(데이터그램 소켓)** | ||
|
||
- 비연결 지향적(Connectionless). | ||
- 데이터 신뢰성이 보장되지 않음. | ||
- 빠른 데이터 전송이 필요할 때 사용. | ||
|
||
--- | ||
|
||
## 3️⃣ 소켓 통신의 흐름 | ||
|
||
소켓 통신은 클라이언트-서버 모델로 작동한다. | ||
|
||
![Socket.png](https://velog.velcdn.com/images/newdana01/post/817b8ba8-4428-4e66-8128-7c01b554f8ff/image.png) | ||
|
||
### **서버 측 동작** | ||
|
||
1. **소켓 생성**: `socket()` | ||
2. **IP/포트 바인딩**: `bind()` | ||
3. **연결 대기**: `listen()` | ||
4. **클라이언트 요청 수락**: `accept()` | ||
5. **데이터 송수신**: `send()/recv()` | ||
6. **소켓 종료**: `close()` | ||
|
||
### **클라이언트 측 동작** | ||
|
||
1. **소켓 생성**: `socket()` | ||
2. **서버 연결 요청**: `connect()` | ||
3. **데이터 송수신**: `send()/recv()` | ||
4. **소켓 종료**: `close()` | ||
|
||
--- | ||
|
||
## 🔄 HTTP 통신 VS 소켓 통신 | ||
|
||
| **항목** | **HTTP 통신** | **소켓 통신** | | ||
| ------------- | -------------------------- | ----------------------------- | | ||
| **연결 방식** | 요청-응답마다 연결 | 연결이 지속됨 | | ||
| **통신 방향** | 단방향 (클라이언트 → 서버) | 양방향 (클라이언트 ↔ 서버) | | ||
| **사용 사례** | 웹 브라우징, REST API | 실시간 채팅, 온라인 게임, IoT | | ||
|
||
- **HTTP 통신**: 실시간 연결이 필요하지 않고, 요청-응답으로 데이터만 전달하면 충분한 경우. | ||
- **소켓 통신**: 클라이언트와 서버가 실시간으로 계속 데이터를 주고받아야 하는 경우. | ||
|
||
--- | ||
|
||
## ⚠️ 소켓 통신의 문제점 | ||
|
||
1. **포트 충돌**: 이미 사용 중인 포트를 사용할 경우 오류 발생. | ||
2. **방화벽**: 방화벽 설정으로 인해 연결이 차단될 수 있음. | ||
3. **타임아웃**: 클라이언트-서버 간 응답 시간이 너무 길 경우 연결이 끊길 수 있음. | ||
|
||
[참고자료](https://helloworld-88.tistory.com/215) |