네트워크 내부에 있는 컴퓨터의 IP 및 Mac 주소가 있고 그에게 UDP 메시지를 보내고 싶다고 가정해 보겠습니다. 보낸 메시지의 mac 및 ip 주소를 주어진 값으로 초기화함으로써 네트워크 라우터가 메시지를 수신하면 동일한 mac 주소를 가진 컴퓨터에 메시지를 전달해야 합니다. 맞죠?
제가 작성한 프로그램이 이 제한 사항을 처리하는 것 같아서 묻고 싶습니다. 동일한 네트워크에 있을 때는 잘 작동하지만 그렇지 않으면...nada.
감사해요
답변1
UDP 소켓을 열고 특정 대상으로 트래픽을 보내는 앱을 만드는 경우 걱정해야 할 유일한 것은 IP 주소입니다. 수신기가 계층 2에서 작동하는 경우, 즉 두 시스템이 모두 동일한 서브넷에 있는 경우 네트워크가 올바르게 설정된 경우 계층 3으로 이동할 때 정확히 동일한 방식으로 작동해야 합니다. 실패하면 작동하는 것으로 알고 있는 것을 테스트해 보십시오. 시중에는 수많은 진단 앱이 있지만 가장 쉬운 앱은 아마도넷캣, 설치하고 다음을 시도해 보세요.
대상 시스템에서:
nc -l -u -p 1234
소스 시스템에서
nc -u -p 1234
포트 번호를 앱에 사용 중인 포트 번호로 변경하고, 레이어 3 네트워크가 올바르게 설정되어 있고 UDP를 통해 UDP를 차단하지 않는 경우 소스에 입력하는 모든 내용이 대상 콘솔에 표시되어야 하는 경우 표시됩니다. 그 항구.
페이로드에 MAC 주소를 포함하는 경우에는 이더넷 프레임에 포함된 소스(및 대상) MAC 주소가 라우터에 의해 변경되므로 이것이 작동하는 방식입니다. 앱이 대화의 양쪽 끝에서 동일하게 유지되기를 기대한다면 실패할 것입니다. 그러나 일반적으로 네트워크 스택을 깊이 파고들어서는 안 됩니다. 이것을 만드는 데 무엇을 사용하고 있습니까?
답변2
두 가지 경우가 있습니다.
1- 동일한 서브넷 내의 호스트로 패킷을 보내는 경우 대상 시스템의 MAC 및 IP 주소를 사용하여 패킷이 직접 전송됩니다.
2- 다른 서브넷의 호스트로 보내는 경우 라우터로 보내야 합니다. 따라서 대상 MAC은 라우터 중 하나가 되고 대상 IP는 최종 대상 중 하나가 됩니다.
IP와 서브넷 마스크를 검사하여 귀하의 경우가 무엇인지 알 수 있습니다.
답변3
컴퓨터가 동일한 서브넷에 있으면 통신하는 데 라우터가 필요하지 않습니다. 라우터로 실행한 경우 라우터는 소스 MAC 주소를 라우터 MAC 주소로 변경합니다. 라우터가 패킷을 수신하면 내부 MAC으로 다시 변경됩니다.