IOT - 5주차 TCP 기반 서버/클라이언트 2

강준호·2024년 4월 4일
0

IOT

목록 보기
5/13

실습 2 목표

UDP 기반의 에코 서버와 클라이언트를 실습하여 이들 프로그램의 구조와 동작을 이해합니다.
연결된 UDP 기반 에코 시스템의 동작을 파악합니다.
UDP 기반의 멀티캐스트 채팅 프로그램을 이해하고 구현한다.

실습 2-1: uecho 서버 및 클라이언트

이 연습에는 두 개의 터미널(서버용 터미널과 클라이언트용 터미널)을 사용하여 Ubuntu에서 에코 서버와 클라이언트를 설정하고 실행하는 작업이 포함됩니다.
참가자들에게는 'Lab2' 디렉터리를 생성한 후 'uecho_server.c', 'uecho_client.c' 파일을 생성, 컴파일, 실행하도록 지시합니다.
프로세스에는 먼저 서버 코드를 실행한 다음 클라이언트 코드를 실행하여 메시지를 보내고 에코를 받는 과정이 포함됩니다. 세션은 "Q" 입력으로 클라이언트를 종료하고 Ctrl-C를 사용하여 서버를 강제로 중지하여 종료됩니다.

실습 2-2: uecho 서버와 클라이언트 연결

이 부분에서는 "연결된" UDP 에코 시스템을 보여주기 위해 원본 클라이언트 코드 대신 uecho_con_client.c를 사용하여 이전 연습을 수정합니다.
참가자들은 echo_client.c(랩 1-1), uecho_client.c(랩 2-1), uecho_con_client.c(랩 2-2)를 비교하여 차이점을 확인합니다. 클라이언트는 sendto() 및 recvfrom() 대신 connect(), write() 및 read()를 사용합니다.

실습 2-3: 멀티캐스트 채팅 프로그램

세 번째 연습에서는 참가자에게 멀티캐스트 채팅 프로그램 설정을 안내합니다.
'Lab2' 디렉토리를 생성하고 'multicast.c'를 컴파일한 후 참가자는 추가 터미널을 열어 채팅 기능을 테스트하고 한 터미널에 입력된 메시지가 다른 터미널에 나타나는지 확인합니다.
이 부분에서는 특정 멀티캐스트 IP 범위의 사용을 강조하고 최대 구성원 수 초과와 같은 잠재적인 문제를 해결합니다.

  • 송신용 소켓, 수신용 소켓을 따로 만들었어.
  • fork 로 child 띄워서 원래 child 는 수신, 담당 parent 는 송신 담당.

lec12. Socket Options

학습 목표

TCP/IP 응용프로그램에 적용 가능한 소켓 옵션을 이해하고 활용한다.
멀티캐스팅의 개념과 동작원리를 파악하고 UDP를 이용하여 구현한다.
소켓 옵션의 조합을 적용하여 데이터 통신의 기능 및 효율성을 향상시킵니다.

소켓 옵션 개요

소켓 프로그래밍 모델

  • TCP, UDP, IrDA, Bluetooth 및 IP와 같은 애플리케이션 프로토콜이 작동하는 계층과 소켓 기능 및 프로토콜 코드 동작을 미세 조정하는 데 있어 소켓 옵션의 역할을 강조하는 소켓 프로그래밍 모델을 소개합니다. .

소켓 옵션 및 기능 유형

'SOL_SOCKET' 레벨 옵션

  • 일정 기간 동안 활동이 없으면 패킷을 전송하여 연결 상태를 확인하는 'SO_KEEPALIVE'와 같은 소켓 코드에서 처리되는 옵션에 중점을 둡니다.

SO_KEEPALIVE

이 옵션은 지정된 간격 동안 연결이 유휴 상태인 후 주기적으로 Keepalive 메시지를 보내 연결이 여전히 활성 상태인지 확인합니다. 원격 시스템이 응답하지 않으면 연결이 끊어진 것으로 간주되고 로컬 소켓이 닫힙니다. 이 메커니즘은 TCP 연결에서 데드 피어를 감지하는 데 도움이 됩니다.

SO_BROADCAST

아래 코드들에서 주석을 지우고 무슨 의미의 코드인지 주석을 작성하시오! 하는 문제 유형 나올수도

소켓에서 브로드캐스트 메시지 전송을 활성화합니다. 이 옵션은 UDP 소켓과 함께 사용되어 네트워크 서브넷의 모든 호스트에 대한 패킷 전송을 허용합니다. TCP 소켓은 브로드캐스팅을 지원하지 않으므로 이 옵션을 사용할 수 없습니다.

SO_REUSEADDR

소켓이 이미 다른 소켓에서 사용 중이거나 최근에 사용된 로컬 주소 및 포트에 바인딩될 수 있도록 합니다. 이는 "주소가 이미 사용 중" 오류를 방지하기 위해 운영 체제에서 연결이 여전히 활성 상태로 간주되는 동안 다시 시작해야 할 수 있는 서버에 특히 유용합니다.

SO_LINGER

  • 사용할꺼냐 안할꺼냐 or 사용할꺼면 시간을 얼마나 줄거냐?
  • 만약 Linger 옵션에 5초 시간을 줬다 => 5초동안 딜레이하고, close 함수한테 가서 return close 또는 shutdown 함수를 사용하여 소켓이 닫힐 때 소켓의 동작을 구성합니다.
  • 시스템이 전송되지 않은 데이터를 처리하는 방법과 나머지 데이터를 피어에 전송하려고 시도하는지 여부를 결정합니다.
  • 활성화되면 소켓은 지정된 시간 동안 유지되어 보류 중인 데이터의 전송을 허용하거나 원격 호스트가 모든 데이터를 수신했는지 확인합니다.

SO_SNDBUF 및 SO_RCVBUF

이 옵션은 각각 나가는 데이터와 들어오는 데이터의 최대 버퍼 크기를 설정합니다. 이러한 버퍼 크기를 조정하면 데이터 전송의 처리량과 대기 시간에 영향을 미칠 수 있습니다. 버퍼 크기를 늘리는 것은 대기 시간이 길거나 처리량이 많은 연결에 도움이 될 수 있는 반면, 메모리가 제한된 시스템이나 낮은 대기 시간이 필요한 애플리케이션에는 더 작은 버퍼가 더 적합할 수 있습니다.

SO_SNDTIMEO, SO_RCVTIMEO 옵션

용도

  • 현재 사용 중인 IP 주소와 포트 번호를 재사용
    • 현재 사용 중인 IP 주소와 포트 번호를 이용해 bind() 함수를 (성공적으로) 호출할 수 있음
  • 목적

목적

 TCP 서버 종료 후 재실행 시 bind( ) 함수에서 오류가 발생하는 일을 방지
 여러 IP 주소를 보유한 호스트에서 같은 기능의 서버를 IP 주소별로 따로 운용할 수 있게 함
 멀티캐스팅 응용 프로그램이 같은 포트 번호를 사용할 수 있게 함

실제 용도

'SOL_SOCKET' 수준 옵션을 사용하면 개발자가 성능, 안정성 및 리소스 활용을 위해 네트워크 애플리케이션을 최적화할 수 있습니다. 예를 들어, 서버 애플리케이션은 SO_REUSEADDR을 사용하여 빠르게 다시 시작하고 동일한 포트에 바인딩하거나 SO_KEEPALIVE를 사용하여 클라이언트에 대한 끊어진 연결을 감지할 수 있습니다. 'SO_SNDBUF' 및 'SO_RCVBUF'를 조정하면 특정 네트워크 조건이나 애플리케이션 요구 사항에 맞게 데이터 흐름을 최적화할 수 있습니다.

IPPROTO_IP 및 IPPROTO_IPV6 수준 옵션

  • 프로세스가 그룹 내 다른 발신자로부터 멀티캐스트 메시지를 수신할 수 있도록 허용하는 IP_MULTICAST_LOOP와 같은 멀티캐스트 옵션 및 동작을 자세히 설명합니다.

IPPROTO_TCP 수준 옵션

  • Nagle 알고리즘(한번에 모아서 패킷을 보내서 트래픽을 줄이는 알고리즘)의 작동을 제어하여 잠재적으로 데이터 전송 지연을 줄이는 TCP_NODELAY 옵션을 포함한 TCP 수준 옵션을 검사합니다.

키 소켓 옵션 살펴보기

SO_KEEPALIVE: 연결 유지 메시지를 보내 연결을 주기적으로 확인합니다.
SO_BROADCAST: UDP를 통한 브로드캐스트 메시지 전송을 활성화합니다.

SO_LINGER

  • 소켓 폐쇄 동작을 제어하여 데이터 전송 완료를 보장하기 위해 지연된 종료를 허용합니다.

SO_SNDBUF 및 SO_RCVBUF

  • 소켓의 송신 및 수신 버퍼 크기를 조정합니다.

SO_REUSEADDR

  • 소켓이 TIME_WAIT 상태로 남아 있는 포트에 바인딩되도록 허용합니다.

SO_SNDBUF 및 SO_RCVBUF

  • 소켓의 송신 및 수신 버퍼 크기를 구성합니다.

TCP_NODELAY

  • TCP 연결의 대기 시간과 처리량에 영향을 줄 수 있는 Nagle 알고리즘을 비활성화하거나 활성화합니다.

멀티캐스팅

특징

  • 그룹 가입과 탈퇴가 자유롭고 그룹 구성원 모두가 평등
    -멀티캐스트 데이터를 받으려면 그룹에 가입해야 함
    -멀티캐스트 데이터를 보내려고 그룹에 가입할 필요 없음

=> 거절되면 누가 이미 사용중이라는 뜻. 그래서 해당 IP 는 가입 x

멀티캐스팅에 대해 자세히 알아보고 단일 데이터 패킷을 여러 대상에 효율적으로 전달할 수 있는 기능을 강조합니다. IPv4 및 IPv6 멀티캐스트 주소와 멀티캐스트 그룹에 가입하거나 탈퇴하는 방법에 대해 설명합니다.

TCP 의 디폴트 Nagle 알고리즘

장점

  • 작은 패킷이 불필요하게 많이 생성되는 일을 방지해 네트워크 트래픽을 감소시킴

단점

  • 데이터가 충분히 쌓일 때까지 또는 ACK가 도달할 때까지 대기하는 시간 때문에 응용프로그램의 반응 시간이 길어질 수 있음 -> 이를 피하기 위해서는 TCP_NODELAY 옵션을 enable 해야 함.

  • optval =1 은 알고리즘 중지.

실제 애플리케이션 및 코드 예제

여기에는 소켓 옵션을 설정 및 검색하고, 애플리케이션에서 멀티캐스팅을 처리하고, 소켓 동작을 수정하여 네트워크 통신의 성능과 효율성을 향상시키는 방법을 보여주는 실제 애플리케이션과 코드 조각이 포함되어 있습니다.

결론 및 참고자료

이 문서는 TCP/IP 소켓 프로그래밍에 대한 추가 정보를 제공하는 주요 교과서 및 온라인 리소스에 대한 참조로 마무리됩니다.

0개의 댓글

관련 채용 정보