2025-08-11 21:37
Tags: 소프트웨어 공학
소켓
- 정해진 규격(소켓)에 연결하기만 하면 데이터 쉽게 주고받을 수 있게 하는 ‘추상화된 통신 연결점’
- 그 이전에 매번 통신을 위해 복잡한 프로토콜과의 사투 적어짐
- 개발자가 네트워크의 복잡한 구조 몰라도 전화번호처럼 IP 주소와 포트번호만 알면 ‘연결’과 ‘데이터 전송’가능
소켓의 구조
- 프로토콜: 통신 규약. 데이터 어떤 규칙으로 주고 받을지
- TCP(Transmission Control Protocol): 신뢰성 있는 연결 중시, 연결 지향형
- UDP(User Datagram Protocol): 속도를 중시, 비연결 지향형
- IP 주소(Internet Protocol Address): 네트워크 상의 집주소. 통신할 상대 특정하는 고유한 주소
- 포트번호(Port Number): 컴퓨터라는 건물 안의 ‘방 번호’. 컴퓨터 안에 여러 프로그램 실행할 수 있는데 그 중 어떤 방
- 결론: ‘어떤 방식(프로토콜)로 어떤 컴퓨터(IP주소)의 어떤 프로그램(포트번호)와 통신할 것인가’를 정의하는 정보 집합체
소켓 사용법: TCP 기준
단계 | 서버 (Server) | 클라이언트 (Client) | 비유 (만남 약속) |
---|---|---|---|
1. 소켓 생성 | socket() | socket() | 각자 통화할 전화기를 준비함 |
2. 주소 할당 | bind() | - | 서버가 자신의 가게(IP)에 특정 전화번호(Port)를 부여함 |
3. 연결 대기 | listen() | - | 서버가 손님(클라이언트)의 전화를 기다리기 시작함 |
4. 연결 요청 | - | connect() | 클라이언트가 서버의 전화번호로 전화를 걺 |
5. 연결 수락 | accept() | - | 서버가 걸려온 전화를 받고 새로운 통화 라인을 개설함 |
6. 데이터 송수신 | send() / recv() | send() / recv() | 전화기를 통해 서로 대화를 주고받음 |
7. 연결 종료 | close() | close() | 대화가 끝나면 각자 전화기를 끊음 |