Боюсь, вы ошиблись, IP не знает адреса MAC, это знает только уровень Ethernet. Вот почему вам нужен протокол ARP, чтобы определить, на какой MAC-адрес отправлять IP-пакет. Обычно вы знаете, к какой подсети вы принадлежите, если IP-адрес назначения локальный, вы ARP для MAC и отправляете его напрямую (хотя обычно это делается на более низком уровне). Если это не в вашей локальной подсети, вы ARP для IP-адреса шлюза и вместо этого отправьте его туда, который будет как-то переадресовать.
Единственным источником и назначением, присутствующим в заголовке IP, являются IP-адреса источника и назначения.
НТН.
EDIT:
В целях разъяснения. При отправке через шлюз IP-пакет обычно не затрагивается (за исключением TTL и, следовательно, контрольной суммы). Есть ситуации, когда IP-пакет должен быть фрагментирован, но это другая проблема. Дело в том, что адреса источника и назначения остаются неизменными, это только на уровне ниже, где мы на самом деле говорим, что его следует отправить через какой-то шлюз или маршрутизатор.