네트워크 통신에서 Server(서버)와 Client(클라이언트)가 정보를 주고 받기 위한 공간을 Socket(소켓)이라 합니다.
소켓에는 다양한 옵션들이 있습니다.
- SOL_SOCKET 레벨 : 소켓에 대한 가장 일반적인 옵션들로 생각하면 됩니다.
- IPPROTO_IP 레벨 : IP프로토콜에 관련된 사항들입니다.
- IPPROTO_TCP 레벨 : TCP프로토콜에 관련된 사항들입니다.
SOL_SOCKET 레벨
- SO_SNDBUF : 송신 버퍼의 크기를 설정합니다. 네트워크에 전송되기 위한 데이터가 일시적으로 저장되는 버퍼입니다. 송신버퍼의 크기를 큰 값으로 설정할 경우, 더 많은 데이터를 *버퍼링할 수 있지만 메모리 사용량이 늘어나고 전송지연이 발생할 수 있습니다. *버퍼링이란 데이터가 한 곳에서 다른 곳으로 이동하는 동안 일시적으로 멈춰서 기다리는 공간을 뜻합니다.
- SO_RCVBUF : 수신 버퍼의 크기를 설정합니다. 이 버퍼는 네트워크로부터 받은 데이터가 응용 프로그램으로 전달되기 전에 일시적으로 저장되는 공간입니다. 큰 값을 설정하면 더 많은 데이터를 받을 수 있지만 메모리 사용량이 늘어납니다.
- SO_REUSEADDR : 주소 재사용을 허락합니다. 이 옵션 설정시 같은 소켓주소(IP주소, Port번호)를 사용하던 소켓을 즉시 재사용할 수 있습니다. 주로 서버쪽에서 사용됩니다.
- SO_KEEPALIVE : TCP연결의 유효성을 유지하기 위한 *keep_alive기능을 활성화합니다. 이 옵션을 설정하면 연결 양쪽 끝에서 서로 존재 여부를 확인하는 메시지를 주기적으로 주고받습니다. *서로 연결을 잘 유지하고 있는지 확인하는 기능. "잘 있죠?" "네"
- SO_BROADCAST : *브로드캐스트 메시지를 전송할 수 있도록 허용합니다. 브로드캐스트 메시지는 특정호스트가 아니라 같은 네트워크 상의 모든 호스트에게 전달됩니다. *네트워크에 연결된 '모든' 호스트에게 데이터를 전송
- SO_DONTROUTE : 데이터 패킷 전송 경로 최적화를 우회합니다. 일반적으로 네트워크 장비는 데이터 패킷(데이터를 전송하기 위해 묶어서 만든 정보 단위)을 가장 효율적인 경로로 전송하도록 최적화한지만, 이 옵션을 사용하게 되면 기본 게이트웨이를 거치지 않고 직접 연결된 네트워크로 패킷을 전송하도록 합니다.
- SO_OOBINLINE : 우선 데이터(Out_Of_Band_Data)를 일반 데이터처럼 inline으로 읽을 수 있도록 합니다. 우선 데이터는 일반 데이터 스트림과 별개로 전송되는 특별한 데이터이다. *우선데이터는 일반데이터보다 먼저 사용되는 데이터이다.
- SO_ERROR : 소켓에 발생한 오류 코드를 확인할 수 있습니다.
IPPROTO_IP 레벨
- IP_TOS : 서비스 종류(Type Of Service) 값을 설정합니다. 이 값은 네트워크 패킷 전송 우선순위를 결정하는데 사용됩니다.
- IP_TTL : Time To Live 값을 설정합니다. 이 값은 데이터 패킷이 네트워크를 얼마나 오랫동안 이동할 수 있는지 제한하는 값입니다.
*멀티캐스트 관련 옵션으로 멀티캐스트 그룹에 가입할 때 사용됩니다. *멀티캐스트는 한 번의 데이터 전송으로 여러 대의 수신자(가입된 호스트)에게 동시에 데이터를 전송하는 네트워크 기술
- IP_MULTICAST _TTL : 멀티캐스트 데이터그램이 네트워크를 얼마나 멀리 전달될 수 있는지 제한하는 (Time To Live)값을 설정합니다.
- IP_MULTICAST_LOOP : 멀티캐스트 데이터그램을 송신 호스트 자신에게 *루프백할지 여부를 결정합니다. *루프백은 데이터를 한 장치에서 같은 장치로 다시 전송하는 기술을 의미한다.
- IP_MULTICAST_IF : 멀티캐스트 데이터그램을 발신할 인터페이스를 지정합니다.
IPPROTO_TCP 레벨
- TCP_NODELAY : Nagle알고리즘 사용을 비활성화합니다. Nagle알고리즘은 작은 데이터를 여러 개 모아서 한꺼번에 전송하는 효율성을 개선하는 알고리즘입니다. 이 옵션을 설정하면 작은 데이터 패킷도 즉시 전송됩니다.
- TCP_MAXSEG : TCP 세그먼트의 최대 크기를 설정합니다. TCP세그먼트는 TCP프로토콜에서 데이터를 전송하는 단위입니다.
소켓의 옵션을 확인하는 방법.
소켓 정보를 가져오는
첫 번째 파라미터에 소켓 이름이 들어가고,
두 번째 파라미터에 소켓레벨이 들어간다. SOL_SOCKET
세 번째 파라미터에 소켓 타입을 확인하고 싶다. SO_TYPE,
네 번째 파라미터에 소켓 타입 정보를 ~에 담아서 달라. (char*)&sockType *앞에서 int로 선언하고 받을때는 캐릭터
다섯 번째에 크기를 정해야 한다. &len
소켓의 버퍼의 크기를 확인하고 설정하는 방법.
SO_SNDBUF를 정하고 원하는 사이즈를 뒤에 사이즈로 지정할 수 있다.
SO_RCVBUF또한 마찬가지이다.
버퍼의 내용을 확인하기 위해서는 getsockopt()를 사용. 파라미터는 그대로.
TCP Nagle알고리즘
TTL(Time to Live)
timeLive에 정수값을 주어 TTL값을 할당한다.
브로드캐스트
- 동일한 네트워크 내에 존재하는 호스트에게 데이터를 전송하는 방법이다.
- 멀티캐스트와 마찬가지로 UDP소켓을 기반으로 한다.
- IP에서 네트워크 주소를 제외한 호스트 주소를 모두 1로 해서 전송하면 해당 네트워크로 전송된다. 10.20.30.11111111
-> Directed 브로드캐스트
- 255.255.255.255 로 데이터를 전송하면 전송한 호스트가 속한 네트워크로 데이터가 전송된다. -> Local 브로드캐스트
'전공 공부 > 네트워크프로그래밍' 카테고리의 다른 글
커널 오브젝트의 두 가지 상 (1) | 2024.05.16 |
---|---|
윈도우에서의 쓰레드 생성방법 (0) | 2024.05.11 |