9.3. 케이블과 프레임¶
스택의 가장 아래 두 계층은 카메라에서 당연하게 여기기 가장 쉬운 부분입니다. 이 계층이 하는 모든 일은 칩 내부에서 일어나고, Python 코드가 전혀 관여하지 않은 채 카메라가 알아서 처리하기 때문입니다. 그래도 짧게 둘러볼 가치는 있습니다. 이 계층이 “로컬 네트워크”가 무엇을 의미하는지, 그리고 나머지 인프라와의 경계가 어디서 시작되는지를 설명해 주기 때문입니다.
9.3.1. 물리 계층¶
가장 아래 계층은 실제 신호 전달, 즉 두 장치 사이에서 비트를 실어 나르는 전선, 광섬유, 또는 전파입니다. 트위스티드 페어 케이블을 사용하는 이더넷은 각 비트를 고정된 속도의 전압 천이로 인코딩합니다. Wi-Fi는 같은 비트를 2.4 GHz 또는 5 GHz 대역의 무선 반송파에 변조합니다. 둘 다 두 하드웨어 사이에 이진 숫자의 스트림을 만들어 내며, 둘 다 소프트웨어가 신경 쓸 필요 없이 카메라의 실리콘이 처리하는 종류의 세부 사항입니다.
Python 스크립트의 관점에서 물리 계층은 “링크가 올라와 있음” 또는 “링크가 내려가 있음” 둘 중 하나입니다. network 모듈은 Wi-Fi 인터페이스에서는 isconnected() 메서드를 통해, 유선 이더넷 인터페이스에서는 링크 상태를 통해 그 상태를 보고합니다. 그 외에 이 계층이 하는 다른 모든 일은 숨겨져 있습니다.
9.3.2. 링크 계층¶
한 단계 위에는 링크 계층이 있습니다. 같은 물리 세그먼트를 공유하는 두 장치 사이에서 바이트 묶음(하나의 프레임)을 보내기 위한 규칙입니다. 링크 계층은 원시 신호 전달 위에 두 가지를 추가합니다:
하드웨어 주소 지정. 모든 네트워크 인터페이스에는 MAC 주소(Media Access Control)라고 불리는 고유한 48비트 식별자가 함께 제공됩니다. 이더넷에서는 칩에 새겨져 있고, Wi-Fi에서는 무선 모듈에 새겨진 같은 종류의 식별자입니다. MAC 주소는 스위치, 즉 인근 장치들이 꽂히는 여러 이더넷 포트가 달린 상자가 주어진 프레임을 어느 포트로 내보내야 할지 결정하는 데 사용하는 것입니다. Wi-Fi 액세스 포인트는 자신의 채널에 있는 무선 장치들에 대해 같은 역할을 합니다.
프레이밍. 상위 계층이 내려보낸 바이트는 작은 헤더와 페이로드, 그리고 끝에 붙는 체크섬으로 이루어진 프레임으로 포장됩니다. 헤더에는 출발지와 목적지 MAC 주소가 담기고, 체크섬은 전송 중에 바이트가 손상된 프레임을 수신자가 검출할 수 있게 해 줍니다. 검사를 통과하지 못한 프레임은 조용히 폐기되며, 신뢰성을 신경 쓰는 쪽은 그것을 상위 계층에서 다시 복구해야 합니다.
로컬 세그먼트란 서로의 프레임을 직접 볼 수 있는 장치들의 집합을 말합니다. 하나의 스위치에 연결된 유선 포트들, 하나의 Wi-Fi 액세스 포인트에 연결된 모든 장치들, 또는 서로 연결된 스위치들의 작은 메시 같은 것입니다. 링크 계층은 그 세그먼트 너머로는 도달할 수 없습니다. 목적지가 다른 세그먼트에 있는 순간, 그 메시지는 상위 계층으로 넘겨져야 합니다.
9.3.3. 카메라가 노출하는 것¶
카메라는 가지고 있는 각 네트워크 인터페이스마다 MAC 주소를 가지고 있습니다. 카메라에 무선 지원이 있으면 Wi-Fi용 하나, 보드에 해당 포트가 있으면 이더넷용 하나입니다. network 모듈은 주소를 읽어야 할 때, 애플리케이션이 사용 중인 인터페이스 객체에 대해 network_interface.config("mac")를 통해 이 주소에 접근할 수 있게 해 줍니다. 예를 들어 장치를 플릿 관리 시스템에 등록하기 위해 이를 필요로 하는 애플리케이션도 있습니다. 그 외에는 이것이 링크 계층이 Python에 넘겨주는 유일한 조작 수단입니다.
그 밖의 모든 것, 즉 프레이밍, 전선이나 공중에서의 실제 MAC 트래픽, 어떤 채널과 속도를 쓸지에 대한 카메라와 액세스 포인트 사이의 협상은 전부 무선 또는 이더넷 하드웨어 내부에서 일어납니다. 다음 페이지에서는 Python 스크립트가 링크 계층에 대해 발언권을 가지는 유일한 부분, 즉 카메라에게 어느 네트워크에 접속할지 알려 주는 것을 다룹니다.