Blog

  • tshark

    Pico에서 제대로 데이터를 전송하는지 알기 위해서는 Pi에서 제대로 들어오는지 확인해야 한다. 보통 wireshark를 이용하는데 CLI 환경에서는 tshark를 이용할 수 있다.

    Pico는 10.10.10.11를 지정하고, 5001 포트를 이용해서 10.10.10.174를 이용하는 Pi에 7070 포트로 UDP를 전송한다. 이를 tshark로 확인하려면 다음과 같이 한다.

    들어 오는지 확인할 경우. 10개를 확인하고 종료하기 위해서 -c 10 추가함.

    sudo tshark -i any -n -f "udp port 7070" -c 10

    데이터를 직접 확인하고 싶을 경우 -x 추가함.

    sudo tshark -i any -n -f "udp port 7070" -c 1 -x

    상세 내역을 보려면 -V 추가함

    sudo tshark -i any -n -f "udp port 7070" -c 1 -x -V

    가장 아래에 보면 데이터가 의도한 대로 잘 들어오고 있는 것을 알 수 있다.

    기본적으로 validation은 시행하지 않는다. 그래서 아래와 같은 내용이 포함된 것을 볼 수 있다.

    Header Checksum: 0xf8bd [validation disabled]
    [Header checksum status: Unverified]

    IP 헤더와 UDP 헤더의 checksum이 제대로 되었는지 확인하려면 다음과 같이 한다. -o 에서 해당 항목을 추가해 주어야 한다. correct와 Good를 볼 수 있다.

    sudo tshark -i any -n -f "udp and src host 10.10.10.168 and dst port 7070" -c 10 -V -x -o ip.check_checksum:true -o udp.check_checksum:true
  • UDP 패킷 구조

    UDP 는 header 와 data 로 구성되어 있다. 구성은 다음과 같다. 3번째 length는 header를 포함한 길이라고 한다.

    그런데 checksum 계산을 할 때에는 앞에 덧붙는 값들이 있다. pseudo header 이다. udp에 해당하는 protocol 값은 17이다. udp length라는 항목이 새롭게 있는데 udp header의 length와 같은 값이다.

    전체 구조는 다음과 같다.

    다시 처음으로 돌아간다. RFC 0768에 checksum은 다음과 같이 정의한다.

    Checksum is the 16-bit one's complement of the one's complement sum of a
    pseudo header of information from the IP header, the UDP header, and the
    data,  padded  with zero octets  at the end (if  necessary)  to  make  a
    multiple of two octets.

    일단 checksum을 구하기 위해서 pseudoheader를 포함한 전체 값이 있어야 한다. 초기 값에 대한 설명이 없는데, 0x0000으로 두고 계산한 다음 해당하는 위치에 그 값을 넣어준다고 한다.

    마지막으로 checksum을 0x0000으로 하면 무시하도록 되어 있다.

    If the computed  checksum  is zero,  it is transmitted  as all ones (the
    equivalent  in one's complement  arithmetic).   An all zero  transmitted
    checksum  value means that the transmitter  generated  no checksum  (for
    debugging or for higher level protocols that don't care).
  • Pico W + ENC28J60

    Pico W로 작업을 하긴 했는데 Pico를 사용했어도 결과는 같았을 것이다. WIFI를 사용할 수 없는 환경에서 Pico의 결과를 전송하고 싶었다. 그래서 ENC28J60을 주문했다.

    아마 Pico 의 문제인데 TCP/IP로 데이터를 전송할 수 없다. C를 배워서 하라고 한다. 이게 단 기간에 문제를 찾고 해결할 수 없다고 생각했다. 몇 가지 사항을 무시하면서 진행했고, 결국 전송하는데 성공했다. Pico 단독으로는 안되고 데이터를 전송해 줄 수 있는 Pi를 이용했다. DHT22 – Pico – Pi 이런 과정을 거쳐서 데이터를 다른 서버로 전달할 수 있었다.

    코파일럿 없었으면 진행할 수 없었다. Pi를 이용해서 데이터를 전송한다는 핵심 생각을 떠 올린 건 나였다. 🙂

    하루 정도 테스트 해보면서 문제 해결 과정을 올려보겠다.

  • CLRW

    코파일럿의 대답은 아래와 같다.


    💧 **CLRW (Clinical Laboratory Reagent Water)**는 임상 실험실에서 사용하는 고순도 정제수를 의미합니다. 이는 **CLSI(Clinical and Laboratory Standards Institute)**에서 정의한 기준에 따라 제조되며, 다양한 생화학적 검사와 분석 장비에 사용됩니다.

    🔬 주요 특징

    • 저균수: 박테리아 수가 10 CFU/mL 이하
    • 고저항성: 전기저항 > 10 MΩ·cm (이온 불순물 최소화)
    • 총 유기탄소(TOC): 500 ppb 이하
    • 입자 제거: 0.2μm 필터 또는 그 이상으로 여과

    🧪 사용 목적

    • 일반적인 생화학 검사
    • 전해질, 단백질, 효소 분석
    • 면역검사 및 독성학 검사
    • 분자생물학적 기술 (PCR 등)