9.6. 패킷과 라우팅¶
IP 주소는 메시지가 누구를 위한 것인지를 알려줍니다. 실제로 메시지를 전달하는 메커니즘은 라우팅이라고 불리며, 패킷이 송신자의 로컬 네트워크에서 어쩌면 아주 멀리 떨어진 수신자의 로컬 네트워크로 이동하는 홉 단위 과정입니다.
9.6.1. 패킷, 간략히¶
패킷은 IP 계층의 작업 단위로, 작은 헤더와 페이로드로 이루어진 바이트 덩어리입니다. 헤더에는 라우팅에 중요한 두 개의 필드가 있습니다:
출발지 IP 주소(패킷이 어디서 왔는지).
목적지 IP 주소(패킷이 어디로 가는지).
페이로드는 전송 계층이 네트워크 계층에 전달해 달라고 요청한 것이라면 무엇이든 됩니다. 패킷 헤더에는 생존 시간(time-to-live) 카운터, 헤더에 대한 체크섬, 그리고 몇 개의 제어 플래그도 포함됩니다. 이 중 어느 것도 카메라의 Python 코드가 직접 다루는 것은 아닙니다.
패킷은 “시도했다”는 것 이상은 아무것도 보장하지 않습니다. 패킷은 손실되거나, 중복되거나, 순서가 뒤바뀐 채 전달될 수 있습니다. 신뢰성과 순서는 그 위의 전송 계층이 해결하는 문제이며, 네트워크 계층은 단지 각 패킷을 목적지로 전달하기 위해 최선을 다할 뿐입니다.
9.6.2. 홉 단위로¶
패킷은 카메라를 떠나 카메라의 로컬 세그먼트에 있지 않은 첫 번째 장치, 즉 기본 게이트웨이에 도착합니다. (이전 페이지에서 네트워크가 올라올 때 DHCP가 카메라에 게이트웨이의 주소를 전달한다고 언급했습니다.) 그 장치는 라우터인데, 패킷을 받아 목적지를 살펴보고 더 멀리 전달하는 것이 임무인 박스입니다.
카메라에서 목적지로 가는 패킷은 라우터 사이를 건너뛰며 매번 한 걸음씩 가까워집니다.¶
라우터에는 라우팅 테이블이 있습니다. 즉 “이 패턴과 일치하는 목적지의 경우 이 인터페이스로 패킷을 내보내라”는 목록입니다. 카메라와 같은 네트워크에 있는 목적지의 경우, 항목은 “들어온 케이블로 다시 내보내라”고 합니다. 더 넓은 인터넷에 있는 목적지의 경우, 항목은 “상위 라우터로 보내라”고 합니다. 알려진 목적지 패턴(기업 VPN, 특정 비즈니스 파트너의 네트워크, 위성 링크)의 경우, 라우터는 기본값을 재정의하는 더 구체적인 항목을 가질 수 있습니다.
상위 라우터도 같은 일을 합니다. 그리고 그 다음 라우터도. 또 그 다음도. 각 홉은 모두 같은 형태입니다. 패킷을 받고, 테이블에서 목적지를 조회하고, 올바른 인터페이스로 내보냅니다. 결국 패킷은 목적지 IP와 같은 로컬 세그먼트에 있는 라우터에 도착합니다. 그 라우터가 마지막 홉을 전달하고, 목적지가 패킷을 받으면 여정이 끝납니다.
9.6.3. 종단점은 경로를 모른다¶
원격 서버로 패킷을 보내는 카메라는 패킷이 어떻게 그곳에 도달할지 모릅니다. 카메라는 목적지 IP와 자신의 기본 게이트웨이 주소만 알 뿐입니다. 그 사이의 모든 것, 즉 어떤 라우터, 어떤 광섬유, 어떤 해저 케이블을 거치는지는 경로상의 라우터들이 각자의 테이블을 바탕으로 진행하면서 결정합니다. 라우터들 자신도 직접적인 이웃과 일반적인 목적지의 대략적인 방향만 알 뿐이며, 인터넷상의 어떤 단일 장치도 전체 지도를 갖고 있지 않습니다.
그 탈중앙화 덕분에 개별 경로가 실패해도 네트워크가 계속 작동합니다. 중간 어딘가에서 케이블이 끊기면 그것은 몇몇 라우터에서의 재라우팅 이벤트가 되며, 종단점은 전혀 알아차리지 못합니다. 또한 그 덕분에 도쿄의 카메라에서 더블린의 서버로 가는 패킷이 양쪽 모두 그 사이에 어떤 나라들이 있는지 모른 채로도 성공할 수 있습니다.
9.6.4. 이것이 Python 스크립트에 의미하는 바¶
네트워크 계층에서 카메라의 임무는 다음으로 귀결됩니다:
IP 주소를 가질 것.
기본 게이트웨이의 주소를 알 것(DHCP가 이를 자동으로 채워 줍니다).
어느 IP로 향하든 외부로 나가는 패킷을 그 게이트웨이에 넘기고 나머지 경로를 신뢰할 것.
스크립트는 결코 경로를 고르지 않고, 중간 홉의 이름을 지정하지 않으며, 중간의 라우터를 보지 않습니다. 스크립트는 목적지 IP를 패킷에 써넣고, 그러면 네트워크 계층이 일을 넘겨받습니다. Python 스크립트의 관점에서 라우팅 전체는 단지 카메라가 합류한 네트워크의 한 속성일 뿐입니다. 즉 “게이트웨이가 나를 위해 패킷을 유용한 어딘가로 보내 준다”는 것이죠.
그 다음에 오는 전송 계층은 라우팅이 그냥 작동한다고 가정하고, 그 위에 신뢰성, 순서 보장, 프로그램 대 프로그램 주소 지정을 구축합니다.