-
강의노트 - 네트워크 프로그래밍개발/서버 네트워크 2023. 8. 3. 16:53
소켓 프로그래밍
TCP 통신 때 커널의 Send/Recv 버퍼를 사용
버퍼 내의 데이터는 구별되지 않는다.
클라이언트가 100바이트 10 개를 보내면 서버가 한 번에 받을 때 1000바이트 한 개로 인식할 수 있다
버퍼 크기가 초과되거나, 여러 데이터가 합쳐지지 않도록 하는 처리가 필요하다.
TCP
- 연결형
- 연결을 위해 할당되는 논리적인 경로가 있다
- 전송 순서가 보장된다
- 경계(Boundary)의 개념이 없다
- Hello World = He lloW orld
- 데이터가 어떻게 분리되거나, 합쳐질 지 알 수 없음
- 신뢰성 높음
- 분실 시 재전송
- 속도 느림(상대적)
UDP
- 비연결형
- 연결이라는 개념이 없다
- 전송 순서가 보장되지 않는다
- 경계(Boundary)의 개념이 있다
- 속도를 제외한 UDP의 장점!
- 데이터가 분리되거나 합쳐지지 않음
- 신뢰성 낮음
- 분실 책임 없음
- 속도 빠름
블로킹 소켓
지금까지 쓰던 것
- accept → 접속 클라 존재
- connect → 서버 접속 성공
- send → 요청 데이터를 송신 버퍼에 복사
- recv → 수신 버퍼에 데이터 도착, 유저레벨 버퍼에 복사
- 중간 중간 실행이 멈춘다
논-블로킹 소켓
- GetLastError로 매 순간 오류를 확인한다
- 블로킹 방식보다 비효율적
소켓 입출력 모델
[소켓] select 모델
[select 모델?] 기존의 우리가 사용하던 send(), recv()함수의 문제점은 뭘까요? 바로 블로킹...
blog.naver.com
Select 모델
가장 대표적. select 함수가 핵심이 된다
소켓 함수 호출이 성공할 시점을 미리 알 수 있다
문제상황
- 수신버퍼에 데이터가 없는데 read
- 송신버퍼가 가득 찼는데 write
- 블로킹 소켓: 조건이 만족되지 않아 블로킹
- 논블로킹 소켓: 조건이 만족되지 않아 불필요한 반복 체크
- Socket Set :읽기/쓰기/예외(OOB) 관찰 대상 등록. Out Of Band는 쓸 일 없다
- select(readSet, writeSet, exceptSet); → 관찰 시작
- 적어도 하나의 소켓이 준비되면 리턴 → 낙오시 알아서 제거된다
WSAEventSelect 모델
WSA = Windows Socket Async
입출력 함수를 안전하게 호출할 수 있는 시점을 알려 준다. 입출력은 동기
이벤트 객체를 통해 소켓 관련 네트워크 이벤트를 감지한다
- 이벤트 객체 생성과 제거: WSACreateEvent(), WSACloseEvent()
- 소켓과 이벤트 객체 짝짓기: WSAEventSelect()
- 네트워크 이벤트 상수값
- FD_ACCEPT: 클라이언트가 접속하면 윈도우 메시지를 발생시킨다.
- FD_READ: 데이터 수신이 가능하면 윈도우 메시지를 발생시킨다.
- FD_WRITE: 데이터 송신이 가능하면 윈도우 메시지를 발생시킨다.
- FD_CLOSE: 상대가 접속을 종료하면 윈도우 메시지를 발생시킨다.
- FD_CONNECT: 접속이 완료되면 윈도우 메시지를 발생시킨다.
- FD_OOB: OOB 데이터가 도착하면 윈도우 메시지를 발생시킨다.
- WSAEventSelect() 함수를 호출하면 해당 소켓은 자동으로 넌블로킹 모드로 전환된다.
- 이벤트 객체의 신호 상태 감지하기: WSAWaitForMultipleEvents()
- 여러 이벤트를 한번에 받을 수 있다.
- 구체적인 네트워크 이벤트 알아내기: WSAEnumNetworkEvents()
Overlapped 모델
블로킹/논블로킹: 함수 호출 시 대기 or 바로 완료
동기비동기: 호출-반환 or 호출-Callback
https://secmem.tistory.com/671
[7기 대구 유용수] IO Completion Port 3장. 서버모델과 IOCP개념
앞장에서 네트워크,TCP/IP,winsock까지 알아보았습니다. 이제는 IOCP를 본격적으로 알아볼텐데요, 그 전에 먼저 알아야 할 용어들과 내용들이 있습니다. 이 개념을 숙지 하고 난 후에 IOCP를 제대로 작
secmem.tistory.com
'개발 > 서버 네트워크' 카테고리의 다른 글
강의노트 - 메모리 관리 (0) 2023.08.03 강의노트 - 멀티스레드 프로그래밍 (0) 2023.08.03 5. I/O Completion Ports (IOCP) (0) 2023.08.03 4. OverLapped I/O (0) 2023.08.03 3. 동기, 비동기 통신 (0) 2023.08.03 - 연결형