배경:
저는 실제로 Arduino 초보자이며 이더넷을 통해 인터넷에 연결하는 법을 배우고 있습니다.
저는 Wiznet W5100 / W5200 칩을 기반으로하는보다 보편적으로 사용되는 이더넷 쉴드를 사용하지 않고 ENC28J60 칩을 사용합니다. 차이점은 TCP 처리 (?)가 소프트웨어로 수행되어야한다는 것입니다 반면 W5100 / W5200 칩에는 하드웨어가 내장되어 있습니다.
나는 코드로 불만을 처리하는 라이브러리를 사용하고있다. 나는 완전히 이해하지는 못했지만 Arduino를 웹 서버와 웹 클라이언트로 설정하는 데 이미 성공했습니다.
문제:
내 문제는 일관성입니다. 종종 Arduino + 이더넷 모듈은 라우터에 의해 감지되지 않으므로 IP 주소를 얻지 못하기 때문에 작동하지 않습니다. LAN 케이블 문제는 아닙니다. 내가 컴퓨터에 연결하면 라우터의 클라이언트 테이블에 나타나지만 이더넷 모듈을 통해 장치 (즉, Arduino)에 연결하면 나타나지 않습니다.
내 질문은 : 라우터가 컴퓨터 / 연결된 장치를 어떻게 감지합니까? Google에서 검색 한 결과 “컴퓨터가 라우터를 어떻게 감지합니까?”라는 결과가 나타났습니다. 나는 다른 방향으로 그것을 원한다.
나는 라우터가 탐지를하는지에 대한 일반적인 이해를 원한다. 왜냐하면 나는 연결 실패가 장치 측인지 아니면 라우터 측인지를 판단 할 수 없기 때문이다.
나는 네트워킹에 관한 기술에 대해 무지하지만 PING-ing 및 DHCP와 고정 IP 주소의 개념에 익숙합니다.이 모든 것이 실제 연결을 통해 배제됩니다. 이것이 저의 걸림돌입니다. 문제가 실제로 어디 있는지 알아 내려면 평신도 설명이나 적어도 몇 가지 문제 해결 팁을 부탁드립니다.
답변
모든 라우터에는 적어도 두 개의 네트워크 인터페이스가 있습니다. 이 답변을 위해 라우터에 WAN 이더넷 및 LAN + 무선 이더넷 (일반적으로 브리지로 연결되어 사실상 단일 인터페이스)의 두 가지 인터페이스 만있는 일반적인 가정 설치를 가정합니다.
라우터가 WAN 인터페이스에서 DHCP 요청을 발행하면 ISP의 DHCP 서버가 공개 IP 정보로 응답합니다. 그런 다음 라우터는이를 사용하여 WAN 인터페이스의 IP를 구성합니다.
라우터 자체는 대개 LAN을 통해 연결된 IP에 IP를 전달하는 자체 DHCP 서버를 실행합니다. WAN 인터페이스에 IP를 제공하지 않습니다.
대안으로 APIPA가 있습니다.이 장치는 APIPA 범위에서 임의의 IP를 선택하고 다른 사람이이 장치를 사용하고 있는지 확인하기 위해 ARP를 발급 한 다음 아무도 응답하지 않으면 장치를 사용하기 시작합니다. APIPA 서브넷이 아닌 다른 서브넷을 사용하려는 경우에는 좋지 않습니다.
IPv6 자동 구성도 비슷하게 작동합니다.
Arduino에 대한 많은 경험이 없지만 DHCP 클라이언트 기능이 필요합니다.
답변
라우터에는 거의 확실하게 DHCP 기능 (동적 IP 주소 할당)이 있습니다. DHCP 클라이언트는 주소가없는 브로드 캐스트와 IP 주소가 들어있는 보낸 사람에게 패킷을 반환하여 응답하는 로컬 네트워크의 DHCP 서버를 보냅니다. 이더넷은 각 장치에서 하드 코딩 된 MAC 주소를 로컬로 사용하기 때문에 가능합니다.
라우터에 MAC 주소에 대한 DHCP 할당을 보여주는 테이블이있을 것입니다. Arduino가 여기에 나타 납니까?
답변
라우터는 컴퓨터를 감지하지 못하며 컴퓨터가 라우터를 감지하지도 않습니다 (IPV6 컴퓨터는 라우터를 감지합니다).
라우터는 라우터 (기본 게이트웨이)로 트래픽을 보낼 때까지 네트워크상의 모든 컴퓨터를 인식하지 못합니다. 이제 라우터가 DHCP 서버로 설정된 경우 DHCP (기본값은 true)를 사용하도록 구성된 컴퓨터가 매번 DHCP 요청을 보냅니다. 이 요청은 라우터에서 수신하고 IP 주소가 컴퓨터에 제공됩니다. 이 상태에서 라우터는 컴퓨터를 인식합니다.
Arduino를 부팅 중이고 IP 주소를 얻지 못하고 라우터에 DHCP 클라이언트로 표시되지 않으면 Arduino 또는 네트워크 연결에 문제가있어 네트워크의 다른 모든 장치에 문제가 없다고 가정합니다 .
Arduino에 연결하고 IP 주소를 새로 고치려고 시도하는 것이 좋습니다. eth0 또는 eth1의 상태를보고 네트워크에 연결되어 있는지 여부를 알려줍니다.