[TCP 서버 소켓 함수 호출 순서]
1. socket() 함수로 소켓을 생성함으로써 사용할 프로토콜 결정
2. bind() 함수로 소켓의 지역 IP 주소와 지역 포트 번호를 결정
3. listen() 함수로 소켓의 TCP 상태를 LISTENING으로 변경
4. accept() 함수로 클라이언트 접속을 수용하고, 접속한 클라이언트와 통신할 수 있는 새로운 소켓을 생성. 이때 원격 IP 주소와 원격 포트 번호가 결정됨.
5. send() 함수와 recv() 함수 등의 데이터 전송 함수로 클라이언트와 통신을 수행한 후 closesocket() 함수로 소켓을 닫음.
6. 새로운 클라이언트 접속이 들어올 때마다 4~5의 과정을 반복.
[TCP 클라이언트 소켓 함수 호출 순서]
1. socket() 함수로 소켓을 생성함으로써 사용할 프로토콜을 결정
2. connect() 함수로 서버에 접속. 이때 원격 IP 주소와 원격 포트 번호는 물론, 지역 IP 주소와 지역 포트 번호도 결정됨
3. send() 함수, recv() 함수 등의 데이터 전송 함수로 서버와 통신한 후 closesocket() 함수로 소켓을 닫음.
송신 버퍼(Send Buffer)
- 데이터를 전송하기 전 임시로 저장해두는 영역.
수신 버퍼(Receive Buffer)
- 받은 데이터를 응용 프로그램이 읽어가기 전까지 임시로 저장해두는 영역.
소켓 버퍼(Socket Buffer)
- 송신 버퍼와 수신 버퍼를 통틀어 말함.
[TCP 데이터 전송 함수]
1. send(): 응용 프로그램 데이터를 운영체제의 송신 버퍼에 복사하여 데이터 전송.
2. recv(): 운영체제의 수신 버퍼에 도착한 데이터를 응용 프로그램 버퍼에 복사.
[recv() 함수의 Flag 옵션]
- MSG_PEEK: 데이터를 읽은 후에도 소켓 수신 버퍼에서 삭제하지 않고 그대로 유지
- MSG_WAITALL: len 크기만큼 데이터를 응용 프로그램 버퍼에 전부 복사할 때까지 대기
'서버 > TCP IP 소켓 프로그래밍' 카테고리의 다른 글
Nagle 알고리즘 (1) | 2022.08.16 |
---|---|
실시간 채팅 프로그램 ( 스레드 사용) (1) | 2022.08.05 |
소켓 옵션 표 (0) | 2022.08.05 |
바이트 정렬(Byte Order) (0) | 2022.08.05 |
TCP/IP 프로토콜 구조 (0) | 2022.08.05 |