# 이더넷 패킷 전송 사건

> Clean Markdown view of GeekNews topic #17705. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17705](https://news.hada.io/topic?id=17705)
- GeekNews Markdown: [https://news.hada.io/topic/17705.md](https://news.hada.io/topic/17705.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-11-12T09:46:32+09:00
- Updated: 2024-11-12T09:46:32+09:00
- Original source: [github.com/francisrstokes](https://github.com/francisrstokes/githublog/blob/main/2024%2F11%2F1%2Fsending-an-ethernet-packet.md)
- Points: 2
- Comments: 1

## Topic Body

- # 이더넷 패킷 전송
  - 저자는 "Networking from scratch"라는 시리즈를 만들고자 했으며, 마이크로컨트롤러에서 TCP/IP 스택을 구축하는 프로젝트를 시작했음.
  - 이 블로그 글은 첫 이더넷 패킷을 성공적으로 전송한 이야기와 프로젝트에서의 버그 및 디버깅에 대한 경험을 공유함.

- # 마이크로컨트롤러
  - 사용된 마이크로컨트롤러는 STM32F401이며, ARM Cortex-M4 기반으로 최대 84MHz로 동작함.
  - 96KiB의 RAM을 가지고 있어 여러 패킷을 처리할 수 있는 충분한 용량을 제공함.

- # 이더넷
  - 이더넷은 다양한 기술과 표준을 포함하는 개념으로, 물리적 수준의 하드웨어, 신호 형식, 버스 충돌 처리 전략, 프레임 레이아웃 등을 포함함.
  - 이 프로젝트에서는 Wiznet의 W5100 칩을 사용하며, 이 칩은 하드웨어 TCP/IP 스택을 내장하고 있음.

- # 문제 1: 공허 속에서 외치기
  - W5100 칩과의 통신을 위한 드라이버를 작성했으나, SPI 신호가 잘못 연결되어 통신이 이루어지지 않았음.
  - Arduino 쉴드의 ICSP 헤더가 SPI 신호를 잘못 연결하여 문제가 발생했으며, 이를 수정하기 위해 보드를 재작업함.

- # 문제 2: 코미디의 본질
  - SPI 신호가 올바르게 연결된 후에도, 이더넷 패킷 전송이 제대로 이루어지지 않았음.
  - 논리 분석기를 사용하여 디지털 신호를 분석하고, 칩 선택 신호의 타이밍 문제를 해결하여 통신을 성공적으로 수행함.

- # 문제 3: 알 수 없는 패킷
  - Wireshark에서 전송한 패킷이 아닌 잘못된 패킷이 나타났음.
  - Arduino 라이브러리를 참고하여 문제를 분석하고, 잘못된 메모리 주소에 데이터를 기록하는 버그를 수정하여 문제를 해결함.

- # 이야기의 교훈
  - 이더넷 패킷 전송은 작은 성과일 수 있지만, 프로젝트에서의 버그와 디버깅 경험은 가치가 있음.
  - 디버깅과 도구 작성은 개발 과정에서 중요한 부분이며, 탐구와 실험을 통해 시스템을 이해하는 것이 중요함.
  - 프로젝트는 더 높은 추상화 수준의 문제와 버그를 다루며 진행 중임.

## Comments



### Comment 31160

- Author: neo
- Created: 2024-11-12T09:46:32+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42105190) 
- 도구를 작성하고 디버깅을 탐색하는 것은 항상 가치가 있음. 그러나 많은 사람들이 이를 이해하지 못하고, 특히 JIRA와 같은 개발 프로세스에서 탐색의 가치를 보지 못하는 경우가 많음.

- 작은 도구를 만드는 능력은 10배 생산성을 가진 프로그래머의 핵심이며, 이는 종종 그림자 속에서 실천되는 예술임.

- TCP/IP와 Ethernet 프레임 스택을 마이크로컨트롤러에서 처음부터 구축하는 시리즈의 시작임. W5100 칩을 사용하여 TCP/IP를 처리하고, 사전 구축된 Ethernet 프레임을 지원함.

- FPGA 엔지니어링으로 경력을 전환하여 Ethernet에 집중하고 있으며, 네트워킹의 추상화를 이해하는 것이 매우 가치가 있었음.

- STM32F401과 W5100 Ethernet 쉴드를 사용하는 대신 STM32F407 보드와 저렴한 Ethernet PHY 보드를 사용하는 것이 더 나을 것이라는 의견이 있음.

- Ethernet 기능은 일반적으로 마이크로컨트롤러 내에 내장된 주변 장치로 포함되어 있음.

- MOSI/MISO의 새로운 명칭인 main out/subordinate in을 처음 봤으며, COPI/CIPO 대안은 잘 이해되지 않음.

- Linux에서 네트워크 스택을 작성하려면 `socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))`를 사용할 수 있음.

- STM32 Nucleo 보드에는 100Mbps Ethernet이 내장되어 있으며, STM32Cube 소프트웨어는 혼합된 평가를 받지만 작동하는 예제를 제공함.

- Ethernet은 프레임을 다루며, 패킷은 IP 개념임.

- ENC28J60 'Stand-Alone Ethernet Controller with SPI Interface'를 고려할 수 있으며, 하드웨어 TCP/IP 스택이 없어 소프트웨어 구현이 필요함.
