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

강준호·2024년 4월 2일
0

IOT

목록 보기
4/13

1. Echo 클라이언트의 완벽한 구현 (05-1장)

Echo 클라이언트 관련 문제

  • TCP에는 본질적으로 데이터 경계 정의가 없기 때문에 Echo 클라이언트는 데이터 경계를 기술해야 합니다. 이로 인해 데이터 경계를 구분하지 못하는 TCP의 기존 읽기 및 쓰기 기능에 문제가 발생합니다.

해결책

  • 쓰기 함수 호출로 전송된 정확한 양의 데이터를 읽는 루프를 구현하십시오. 이는 TCP 기반 통신에서 데이터를 올바르게 분리하기 위한 추가 요구 사항입니다.

2. Echo 클라이언트 및 서버의 향상된 기능

에코 클라이언트(echo_client2)

개행 문자가 나타날 때까지 문자열을 읽습니다. 이는 완전한 문장을 읽는다는 의미입니다. 그러나 한 번에 전체 문장을 읽지 못할 수 있으므로 반복 시도를 위해 while 루프가 필요합니다.

에코 서버

클라이언트로부터 문장 단위의 데이터를 수신함에도 불구하고, 서버가 데이터를 조각조각 나누어 읽을 수 있습니다. 연속 작업을 위해 while 루프를 사용하여 읽는 대로 데이터를 다시 보냅니다.

3. 계산기 프로그램 구현(응용 프로토콜)

기능

  • 서버는 클라이언트로부터 여러 숫자와 연산자를 수신하고 요청된 연산(덧셈, 뺄셈, 곱셈)을 수행하고 결과를 다시 보냅니다. 이 데이터 교환의 사양은 프로토콜을 정의합니다.

실행

  • 예: 클라이언트-서버 통신이 데이터 전송 및 작업 실행을 위해 정의된 프로토콜을 따르는 방법을 보여줍니다.

4. TCP의 이론적 측면(05-2장)

TCP 소켓의 입력/출력 버퍼

  • 각 TCP 소켓에는 소켓 초기화 시 생성되는 자체 I/O 버퍼가 있습니다. 이러한 버퍼는 슬라이딩 윈도우 프로토콜 적용으로 인해 데이터 오버플로 상황이 발생하지 않도록 합니다.

슬라이딩 윈도우 프로토콜 및 데이터 전송 유형

  • TCP가 데이터 흐름 및 정체 제어를 관리하여 소켓 간의 안정적인 데이터 전송을 촉진하는 방법을 보여줍니다.

5. TCP의 내부 작동 원리

연결 설정(3-Way Handshake)

  • 소켓 간의 연결을 설정하고, 패킷에 시퀀스 번호를 할당하고, 안정적인 통신을 보장하는 프로세스를 간략하게 설명합니다.

데이터 전송

  • ACK 는 다음에 내가 받고싶은것. seq+ 전송된 바이트 크기 +1
  • 손실된 데이터에 대한 재전송 전략과 함께 데이터 전송 및 무결성을 확인하기 위해 ACK 값을 증가시키는 것의 중요성을 설명합니다.

연결 종료(4-Way Handshake)

  • 데이터 손실은 주로 아직 전송 중이거나 네트워킹 스택의 버퍼에 있는 데이터의 잠재적인 손실
  • 갑작스러운 종료로 인한 데이터 손실을 방지하고 연결을 안전하게 종료하는 4단계 프로세스를 설명합니다.

6. Windows에서의 구현

Windows 기반 구현

  • 제공된 예제, 즉 'op_server.c' 및 'op_client.c'는 추가 세부 지침 없이 Windows 플랫폼에 맞게 조정되었음을 언급합니다.
  • 이 문서는 이론적 지식과 실제 응용 사례에 초점을 맞춘 고급 TCP/IP 소켓 프로그래밍 기술에 대한 5장의 논의가 끝났음을 나타내는 질문으로 마무리됩니다.

UDP 에 대한 이해(06-1장)

UDP 소켓의 특성 및 작동 원리

  • TCP와 달리 UDP는 메시지 전달을 위해 SEQ 및 ACK를 활용하지 않으며(흐름 제어 부족) 연결 설정 및 종료를 요구하지 않습니다. 이로 인해 데이터가 손실될 수 있지만 더 빠른 데이터 전송이 가능합니다. 안정성보다 성능이 우선시되는 경우에는 UDP가 선호됩니다.

2. UDP 기반 서버/클라이언트 구현하기(06-2장)

UDP 데이터 전송

  • UDP는 1대1 연결에 대한 TCP의 요구 사항과 달리 연결 개념을 포함하지 않습니다. 이러한 부재로 인해 별도의 서버 및 클라이언트 소켓이 필요 없이 단일 소켓을 사용하여 여러 도메인에 걸쳐 데이터를 전송할 수 있습니다.

3. UDP의 데이터 입출력 기능

데이터 송수신

  • UDP를 통해 데이터를 보낼 때마다 연결 개념이 없기 때문에 대상 정보를 제공해야 합니다.

  • 데이터에는 여러 목적지가 있을 수 있으므로 데이터 수신 후 보낸 사람을 확인해야 합니다.

Q. UDP에서는 데이터의 경계가 존재하므로 5초간의 delay를 삽입해도 총 3개의 메시지를 3번의 recvfrom 함수 호출을 통해서 수신한다.만일 TCP 통신이었더라도(recvfrom은 recv로, sendto는 send로 대체) 3번 수신했을까요 ??

UDP

  • UDP 패킷은 수신자의 recvfrom() 함수에 대한 정확히 한 번의 호출에 해당합니다. 발신자가 3개의 메시지를 보내는 경우 수신자는 메시지 전송 사이의 지연에 관계없이 해당 메시지를 수신하기 위해 3개의 'recvfrom()' 호출이 필요합니다.

TCP

  • TCP는 전송되는 데이터의 경계를 유지하지 않습니다. 이는 연속적인 바이트 스트림으로 간주됩니다. 따라서 데이터가 패킷으로 분할되어 네트워크를 통해 전송되는 방식은 보낸 사람이 데이터를 청크한 방식과 일치하지 않을 수 있습니다.

  • TCP는 전송되는 데이터의 경계를 유지하지 않습니다.

#4. UDP 기반 에코 서버 및 클라이언트

UDP 에코 서버

  • 발신자 정보를 참조하여 데이터 에코에 주의하세요.

UDP 에코 클라이언트

  • UDP에 데이터 경계가 있으므로 recvfrom에 대한 단일 호출로 전체 메시지를 읽을 수 있으며 일반적으로 주소 할당 프로세스가 불필요하므로 클라이언트 측 프로그래밍이 단순화됩니다.

클라이언트 쪽 UDP 경우 OS 가 sendto 함수호출 시 클라이언트의 IP와 PORT번호가 자동으로 할당해준다. => 주소 할당 필요 X

  • UDP는 데이터의 경계가 존재하기 때문에 한번의 recvfrom 함수호출을 통해서 하나의 메시지를 완전히 읽어 들인다.

  • 데이터의 전송에 있어서 TCP와의 유일한 차이점은 사용하는 함수가 다르고 전달할 목적지 정보를 매 호출 시마다 지정한다는 점이다.

5. UDP의 데이터 전송 특성과 connect 기능(06-3장)

  • 기존 TCP 에서는 서버와 클라이언트가 진짜 connection 을 맺었음.
    근데 UDP 에서 connection 함수는 IP, 포트번호만 연결하는 기능만 수행함!

UDP의 데이터 경계

  • 송신측에서 sendto()가 세 번 호출되면 수신측에서는 그에 따라 recvfrom()을 세 번 호출해야 하며 이는 UDP의 데이터 경계 보존을 보여줍니다.

  • TCP 의 경우에는 한번만 recv해도 돼. TCP의 설계는 데이터 경계 보존보다 데이터 무결성, 순서 및 신뢰성을 우선시합니다. 흐름 제어, 오류 감지 및 수정과 같은 메커니즘이 결합된 스트림 지향 접근 방식은 웹 탐색이나 파일 전송과 같이 안정적인 통신이 필요한 애플리케이션에 적합합니다.

connected vs. unconnected UDP 소켓

  • 연결된 UDP 소켓은 TCP 의미의 연결을 의미하지 않지만 대상 정보를 등록하여 데이터 전송을 위한 읽기 및 쓰기 기능을 사용할 수 있습니다.

6. UDP의 멀티캐스트 및 브로드캐스트 통신

UDP 사용할 경우 multicast 통신 (출발지 1개, 목적지는 여러 개) 및 broadcast 통신 (출발지 1개, 목적지는 전부(예:subnet 전체)) 가능.

멀티캐스트

  • 동시에 여러 대상(멀티캐스트 그룹)으로 데이터를 보낼 수 있으므로 각 호스트에 개별적으로 TCP 또는 UDP를 전송하는 것보다 적은 트래픽이 필요합니다.

  • 연결의 개념이 존재하지 않는다. 따라서 UDP 소켓을 기반으로 전송

  • 멀티캐스트 그룹을 대상으로 하는 데이터의 수신을 위해서는 가입의 절차를 걸쳐야 한다. =>

라우팅과 TTL

  • 패킷을 얼마나 멀리 보낼것인가를 결정
  • TTL은 정수로 표현되며, 라우터를 하나 거칠 때마다 1씩 감소.

그룹으로의 가입방법

  • 멀티캐스트 IP 주소 세팅.
  • 멀티캐스트 그룹의 가입은 소켓의 옵션정보 변경을 통해서 이뤄진다.
    그룹의 가입에 사용되는 프로토콜 레벨은 IPPROTO_IP이고, 프로토콜의 이름은 IP_ADD_MEMBERSHIP이다.
    그리고 그룹의 정보는 ip_mreq 구조체 변수를 이용해서 표현한다.

  • 이 데이터는 라이오 방송과 마찬가지로 receiver가 그룹에 가입을 하는순간부터 수신을 시작한다.

  • receiver가 멀티캐스트 그룹에 가입을하는 순간부터 데이터를 수신하게 된다.
    따라서 가입 이전에 sender가 전 한 데이터는 수신할 수 없다.

브로드캐스트

  • UDP 소켓을 활용하여 direct 모드(외부 서브넷의 경우)
  • 로컬 모드(동일한 네트워크 내)에서 서브넷의 모든 호스트에 데이터를 보낼 수 있습니다.

브로드 캐스트 Sender

  • 255.255.255.255 가 브로드 캐스트 주소. 9190 이 포트주소

7. Windows에서의 구현

Windows 기반 sendto 및 recvfrom 함수

  • 이 함수는 Linux 대응 기능과 유사하게 작동하며 큰 차이점은 없습니다.

Windows의 connected UDP 소켓

  • 연결된 UDP 소켓의 생성 및 데이터 전송/수신 프로세스는 Linux와 동일하므로 원활한 크로스 플랫폼 UDP 프로그래밍이 가능합니다.

이 문서는 질문을 유도하고 UDP 기반 서버 및 클라이언트 구현에 대한 강의를 마무리하며 데이터 신뢰성보다 속도와 효율성이 더 중요한 특정 애플리케이션 요구 사항에 UDP를 사용하는 이점을 강조하면서 마무리됩니다.


실습

  • client 를 server보다 먼저 수행하면 오류가 나오는데 왜그럴까??
  • 현재 iterative echo server 는 다른 서비스가 종료될 때까지 한개밖에 안되는데,

과제 2

  • 클라이언트 쪽에서 파일 오픈한다음에 패킷형태로 서버로 보내고, 서버에서는 이걸 받아서 오픈하고 패킷을 그 파일로 저장하는.

0개의 댓글

관련 채용 정보