케이블이 이더넷 포트에 연결되면(동적 IP 주소 지정 가정) 정확히 어떤 일이 발생하는지 알고 싶습니다.
- 어떤 서비스가 실행되고 있으며 이를 트리거하는 방법은 무엇입니까?
- 연결을 설정하려면 어떤 API를 호출해야 합니까?
보너스 질문: 케이블을 연결할 때 신호를 정확하게 감지하는 방법은 무엇입니까(이 질문은 이 SE 사이트에 완전히 적합하지 않을 수 있다는 것을 알고 있습니다)?
답변1
저는 "추가 질문"에만 답변할 수 있습니다. "케이블 연결 시 신호를 감지하는 방법". 따라서 10*/Base-T를 가정하면 장치는 반송파 신호를 감지하고 해당 정보를 장치 드라이버에 제공합니다. 장치 드라이버는 일반적으로 커널 로거를 통해 "ETHX: LINK DETECTED" 메시지를 보냅니다. 이 정보는 /sys 계층 구조(비교적 새로운 Linux 버전)에서도 사용할 수 있습니다. 바라보다https://stackoverflow.com/a/808599/3849157.
장치 상태가 변경되면 작업을 트리거하도록 udev 규칙을 구성할 수 있다고 생각합니다. 하지만 여기서도 그럴지는 잘 모르겠습니다.
dhclient/pump 프로세스가 실행 중이고 해당 작업을 수행하는 경우 프로세스는 DHCP 주소를 요청하고, DHCP 서버에서 주소를 얻으면 일반적으로 운영 체제 네트워크를 실제로 구성하는 하나 이상의 도우미 스크립트를 호출합니다. 그러나 이는 이를 수행하는 특정 프로그램에 따라 다릅니다.
답변2
커널에는 포트가 있는 모든 버스(PCI, USB, PCMCIA - 실제로 후자가 더 복잡하고 더 이상 사용하지 않으므로 PCMCIA는 잊어버리십시오)에 대한 드라이버가 있습니다. 드라이버는 이 버스의 레지스터(CPU 레지스터와 달리)를 메모리에 매핑하고 이를 모니터링합니다.
케이블이 연결되면 이더넷 하드웨어는 레지스터를 변경하고 버스에 알립니다. 버스 ID를 적절한 드라이버에 매핑하는 버스 메시지 udev(이는 커널에서도 발생할 수 있으며 설정 방법에 따라 다름). Udev는 dbus를 통해 Pump 또는 NetworkManager와 같은 사용자 영역 프로세스를 깨울 수도 있지만 이는 "설정 방법에 따라" 영역에 들어가게 됩니다.
일반적으로 udev는 포트 "eth1" 등의 기호 이름과 사용하는 드라이버 등의 매핑을 설정하고 해당 정보를 나머지 사용자 공간(경우에 따라 커널)이 사용할 수 있도록 합니다. . 이는 USB 스틱이 자동으로 마운트되는 방식과 유사하게 버스의 장치 변경 사항에 대해 커널의 버스 소프트웨어를 수신합니다. 버스는 사용자 공간과 통신하는 udev와 통신합니다.
간단히 말해서:이더넷 포트의 하드웨어는 버스(PCI 또는 USB 등)와 통신한 다음 나머지 사용자 공간과 통신하는 udev와 통신합니다.