실습 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 범위의 사용을 강조하고 최대 구성원 수 초과와 같은 잠재적인 문제를 해결합니다.
lec12. Socket Options
학습 목표
TCP/IP 응용프로그램에 적용 가능한 소켓 옵션을 이해하고 활용한다.
멀티캐스팅의 개념과 동작원리를 파악하고 UDP를 이용하여 구현한다.
소켓 옵션의 조합을 적용하여 데이터 통신의 기능 및 효율성을 향상시킵니다.
소켓 옵션 개요
소켓 옵션 및 기능 유형
'SOL_SOCKET' 레벨 옵션
이 옵션은 지정된 간격 동안 연결이 유휴 상태인 후 주기적으로 Keepalive 메시지를 보내 연결이 여전히 활성 상태인지 확인합니다. 원격 시스템이 응답하지 않으면 연결이 끊어진 것으로 간주되고 로컬 소켓이 닫힙니다. 이 메커니즘은 TCP 연결에서 데드 피어를 감지하는 데 도움이 됩니다.
아래 코드들에서 주석을 지우고 무슨 의미의 코드인지 주석을 작성하시오! 하는 문제 유형 나올수도
소켓에서 브로드캐스트 메시지 전송을 활성화합니다. 이 옵션은 UDP 소켓과 함께 사용되어 네트워크 서브넷의 모든 호스트에 대한 패킷 전송을 허용합니다. TCP 소켓은 브로드캐스팅을 지원하지 않으므로 이 옵션을 사용할 수 없습니다.
소켓이 이미 다른 소켓에서 사용 중이거나 최근에 사용된 로컬 주소 및 포트에 바인딩될 수 있도록 합니다. 이는 "주소가 이미 사용 중" 오류를 방지하기 위해 운영 체제에서 연결이 여전히 활성 상태로 간주되는 동안 다시 시작해야 할 수 있는 서버에 특히 유용합니다.
이 옵션은 각각 나가는 데이터와 들어오는 데이터의 최대 버퍼 크기를 설정합니다. 이러한 버퍼 크기를 조정하면 데이터 전송의 처리량과 대기 시간에 영향을 미칠 수 있습니다. 버퍼 크기를 늘리는 것은 대기 시간이 길거나 처리량이 많은 연결에 도움이 될 수 있는 반면, 메모리가 제한된 시스템이나 낮은 대기 시간이 필요한 애플리케이션에는 더 작은 버퍼가 더 적합할 수 있습니다.
TCP 서버 종료 후 재실행 시 bind( ) 함수에서 오류가 발생하는 일을 방지
여러 IP 주소를 보유한 호스트에서 같은 기능의 서버를 IP 주소별로 따로 운용할 수 있게 함
멀티캐스팅 응용 프로그램이 같은 포트 번호를 사용할 수 있게 함
'SOL_SOCKET' 수준 옵션을 사용하면 개발자가 성능, 안정성 및 리소스 활용을 위해 네트워크 애플리케이션을 최적화할 수 있습니다. 예를 들어, 서버 애플리케이션은 SO_REUSEADDR을 사용하여 빠르게 다시 시작하고 동일한 포트에 바인딩하거나 SO_KEEPALIVE를 사용하여 클라이언트에 대한 끊어진 연결을 감지할 수 있습니다. 'SO_SNDBUF' 및 'SO_RCVBUF'를 조정하면 특정 네트워크 조건이나 애플리케이션 요구 사항에 맞게 데이터 흐름을 최적화할 수 있습니다.
IPPROTO_IP 및 IPPROTO_IPV6 수준 옵션
IPPROTO_TCP 수준 옵션
키 소켓 옵션 살펴보기
SO_KEEPALIVE: 연결 유지 메시지를 보내 연결을 주기적으로 확인합니다.
SO_BROADCAST: UDP를 통한 브로드캐스트 메시지 전송을 활성화합니다.
멀티캐스팅
=> 거절되면 누가 이미 사용중이라는 뜻. 그래서 해당 IP 는 가입 x
멀티캐스팅에 대해 자세히 알아보고 단일 데이터 패킷을 여러 대상에 효율적으로 전달할 수 있는 기능을 강조합니다. IPv4 및 IPv6 멀티캐스트 주소와 멀티캐스트 그룹에 가입하거나 탈퇴하는 방법에 대해 설명합니다.
TCP 의 디폴트 Nagle 알고리즘
데이터가 충분히 쌓일 때까지 또는 ACK가 도달할 때까지 대기하는 시간 때문에 응용프로그램의 반응 시간이 길어질 수 있음 -> 이를 피하기 위해서는 TCP_NODELAY 옵션을 enable 해야 함.
optval =1 은 알고리즘 중지.
실제 애플리케이션 및 코드 예제
여기에는 소켓 옵션을 설정 및 검색하고, 애플리케이션에서 멀티캐스팅을 처리하고, 소켓 동작을 수정하여 네트워크 통신의 성능과 효율성을 향상시키는 방법을 보여주는 실제 애플리케이션과 코드 조각이 포함되어 있습니다.
결론 및 참고자료
이 문서는 TCP/IP 소켓 프로그래밍에 대한 추가 정보를 제공하는 주요 교과서 및 온라인 리소스에 대한 참조로 마무리됩니다.