전공 공부/네트워크프로그래밍

Socket(소켓)의 다양한 옵션

튼튼발자 2024. 5. 2. 08:29
728x90

네트워크 통신에서 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()를 사용. 파라미터는 그대로.

송신버퍼크기 확인
수신버퍼 크기 확인


REUSEADDR을 사용하여 옵션값을 받아와서 출력
RESUE가 0으로 현재는 못하게 되어있음
option을 1로(true)로 설정후 다시 받아오면
1이 출력된다.


TCP Nagle알고리즘

보낼때마다 40의 공간을 차지하는데 Nagle을 사용하면 50에 여러개를, 사용안하면 50에 한개씩 사용하여 공간낭비가 심하다.


TTL(Time to Live) 

timeLive에 정수값을 주어 TTL값을 할당한다.


브로드캐스트

- 동일한 네트워크 내에 존재하는 호스트에게 데이터를 전송하는 방법이다.

- 멀티캐스트와 마찬가지로 UDP소켓을 기반으로 한다.

- IP에서 네트워크 주소를 제외한 호스트 주소를 모두 1로 해서 전송하면 해당 네트워크로 전송된다. 10.20.30.11111111
-> Directed 브로드캐스트

- 255.255.255.255 로 데이터를 전송하면 전송한 호스트가 속한 네트워크로 데이터가 전송된다. -> Local 브로드캐스트

 

728x90