# TCP/IP 소켓 프로그래밍 정리
1. 소켓 이란?
- 네트워크 환경에 연결할 수 있게 만들어진 연결부를 의미.
OSI 7계층 중 4계층인 TCP 상에서 동작하는 소켓을 주로 사용, 이를 TCP 소켓 이라고 부른다.
2. TCP/IP 소켓 프로그래밍 설명
클라이언트 소켓과 서버 소켓의 역할이 서로 다르다.
데이터를 주고 받기 위해서는 소켓의 연결 과정이 선행 되어야 한다.
연결 요청과 수신은 각각 클라이언트 소켓과 서버 소켓의 역할이다.
연결 과정 : 클라이언트 소켓이 IP 주소와 Port번호를 통해 소켓에게 연결을 시도, 서버 소켓은 어떤 연결 요청 (포트 번호 식별)을 받을지 미리 시스템에 등록하여 요청이 수신 되었을때 해당 요청을 처리한다.
소켓 연결 과정 : 소켓 연결이 완료된 후 클라이언트 소켓과 서버 소켓이 직접 데이터를 주고 받는다고 생각 하겠지만, 서버는 클라이언트의 소켓 연결 요청을 받아들이는 역할만 수행한다.
직접적인 데이터 송 수신은 서버 소켓의 연결 요청 수락 후 신규로 생성되는 새로운 소켓을 통해서 처리 된다.
3. TCP/IP 소켓 프로그래밍 흐름
4. 소켓 프로그래밍(Client) 설명
- socket() : 소켓을 생성한다.
- connect() : Server가 Listen 하고있는 ip:port로 연결 요청을 보낸다. 즉, Client → Server
- send() & receive : 데이터 송 수신
- close() : 소켓 닫기
5. 소켓 프로그래밍(Server) 설명
- socket() : 서버 소켓을 생성한다.
- bind() : bind() api의 사용되는 인자는 IP주소와 Port 번호 이다. bind()는 소켓과 포트번호를 결합 후 서버에게 요청하여 해당 IP 주소와 Port를 사용하도록 한다.
예를들어 서로 다른 소켓이 같은 포트 번호를 중복으로 사용하는 일이 생길 수 있기 때문에
운영체제는 내부적으로 포트 번호와 소켓 연결 정보를 관리한다.
bind() API는 해당 소켓이 지정된 포트 번호를 사용할 것이라는 것을 운영체제에 요청하는 역할을 한다.
만약 지정된 포트 번호를 다른 소켓이 사용하고 있다면 bind() API는 에러를 발생시킨다.
서버 소켓은 고정된 포트 번호를 사용하고 그 포트 번호로 클라이언트의 연결 요청을 받아들인다.
그리고 운영체제가 특정 포트 번호를 서버 소켓이 사용하도록 만들기 위해 소켓과 포트 번호를
결합(bind)한다. 이 때 사용하는 API가 바로 bind()인 것이다.
- listen() : 클라이언트 연결 요청을 대기한다.
- accept() : 클라이언트 연결을 수립, 클라이언트와 최종 연결 요청을 받아들이는 역할을 수행한다.
- send() & receive : 데이터 송 수신
- close() : 소켓 닫기
- 끝 -
'네트워크 > TCP IP' 카테고리의 다른 글
TCP/IP 4계층 모델 (0) | 2024.09.02 |
---|