소켓 옵션 & 브로드캐스트
소켓 옵션
: 소켓 함수의 기본 동작을 변경
-> 소켓 코드와 프로토콜 구현 코드를 세부적으로 제어
소켓 옵션의 종류
(1) 소켓 코드가 처리하는 옵션(프로토콜에 독립적)
- 옵션을 설정하면 소켓 코드에서 해석하고 처리한다
(2) 프로토콜 구현 코드가 처리하는 옵션(프로토 콜에 의존적)
- 옵션을 설정하면 프로토콜 구현 코드에서 해석하고 처리한다
소켓 옵션 함수
// ===== Windows =====
#include<winsock2.h>
int setsockopt(
SOCKET sock,
int level,
int optname,
const char* optval,
int optlen
);
// 성공 : 0
// 실패 : SOCKET_ERROR
// ===== Linux =====
#include<sys/socket.h>
int setsockopt(
int sock,
int level,
int optname,
const void* optval,
socklen_t optlen
);
// 성공 : 0
// 실패 : -1
// ===== Windows =====
#include<winsock2.h>
int getsockopt(
SOCKET sock,
int level,
int optname,
const char* optval,
int optlen
);
// 성공 : 0
// 실패 : SOCKET_ERROR
// ===== Linux =====
#include<sys/socket.h>
int getsockopt(
int sock,
int level,
int optname,
const void* optval,
socklen_t *optlen
);
// 성공 : 0
// 실패 : -1
sock : 소켓 옵션을 설정할 소켓
level : 소켓 정보를 가져오거나 변경할 것인지 명시(보통 SOL_SOCKET, IPPROTO_TCP 사용)
optname : 소켓 설정을 위한 소켓 옵션의 번호
optval : 설정할 값을 저정하기 위한 버퍼의 포인터
optlen : optval 버퍼의 크기
소켓 옵션 종류
SO_BROADCAST 옵션 : 브로드캐스트 데이터 전송 기능 활성화
- TCP 소켓에는 사용할 수 없고 UDP 소켓에만 사용 가능
SO_KEEPALIVE 옵션 : TCP 프로토콜 수준에서 연결 여부를 확인
- 상대 TCP에 주기적으로 TCP 패킷을 보낸다
SO_LINGER 옵션 : closesocket() 함수의 동작 변경
- 소켓을 닫고 할당된 운영체제 자원을 반환
SO_SNDBUF & SO_RCVBUF 옵션 : 소켓의 송신 버퍼와 수신 버퍼 크기 변경
SO_SNDTIMEO & SO_RCVTIMEO 옵션 : 데이터 전송 함수가 작업 완료와 상관없이 일정 시간 후 리턴하게 한다
SO_REUSEADDR 옵션 : 현재 사용 중인 IP 주소와 포트 번호를 재사용
- 현재 사용 중인 IP 주소와 포트 번호를 이용해 bind() 함수를 호출할 수 있다
브로드캐스트
[1] 브로드캐스팅 : UDP 특징으로 브로드 캐스팅과 멀티 캐스팅을 지원(1:N 통신)
(1) 유니 캐스팅 : 한 개체가 다른 한 개체에 데이터를 보내는 모델
(2) 브로드 캐스팅 : 한 개체가 특정 네트워크에 속한 모든 개체에 데이터 를 보내는 모델(IPv4만)
(3) 멀티캐스팅 : 동일 그룹에 가입한 모든 개체에 데이터를 보내는 모델
(4) 애니 캐스팅 : 한 개체가 동일 그룹에 가입한 개체 중 가장 가까운 하나에만 데이터를 보내고
데이터를 받은 개체가 그 그룹에 속한 난 머지 개체에 데이터를 보내는 모델 (IPv6만)
[2] 브로드캐스팅 개념
송신자가 보낸 데이터 하나를 다수의 수신자가 받는 방식
- 데이터 복사본을 여러 개 만들어 보내는 것이 아니므로 송신자 관점 에서 보면 상당히 효율적이다
- 송신자가 보내는 메시지는 이더넷을 통해 모든 객체에 전달된다
- 각 개체는 메시지가 브로드 캐스트 주소로 보낸 것임을 확인하고 읽어 들인다
[3] 브로드캐스트 데이터를 보내기 위한 절차
(1) 브로드캐스팅을 활성화
// ===== Windows =====
DWORD bEnable = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (const char*)&bEnable, sizeof(bEnable));
// ===== Linux =====
int bEnable = 1;
retval = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &bEnable, sizeof(bEnable));
(2) 브로드캐스트 주소로 데이터 보낸다
IPv4 : 255.255.255.255
IPv6는 브로드캐스트 되신 멀티캐스트와 애니캐스트로 대체되었다
[4] 브로드 캐스팅 종류
네트워크 브로드캐스트 : 호스트 ID비트가 모드 1인 경우, 특정 네트 워크에 대한 브로드 캐스트
- 데이터가 라우터를 거쳐야 하므로 라우터 설정에 따라 브로드 캐스팅이 불가능할 수 도 있다
서브넷 브로드캐스트 : 서브넷 ID를 제외한 호스트 ID비트가 모두 1 인 경우,특정 서브넷에 대한 브로드 캐스트
- 라우터를 통과하지 못 할 수 있으므로, 외부 서브넷에 대한 브로드 캐스팅 목적으로 사용 하기 어렵다
지역 브로드 캐스트 : 송신자 자신이 속한 네트워크에 대한 브로드 캐스트를 의미
- 브로드 캐스트 데이터가 라우터 경계를 넘어가지 않는다
'개인 공부 > 네트워크' 카테고리의 다른 글
네트워크P-013 (UDP Server&Client) (0) | 2023.05.08 |
---|---|
네트워크P-012(스레드 동기화 - 이벤트) (1) | 2023.05.07 |
네트워크P-011(멀티 스레드 TCP 서버 & 임계영역) (0) | 2023.04.24 |
네트워크P-010(스레드 기다리기 & 재실행) (0) | 2023.04.21 |
네트워크P-009 (스레드 생성 & 종료) (0) | 2023.04.20 |