A method operable by a satellite of a Non-Geostationary Satellite Orbit, NGSO, system, the method comprising: receiving a plurality of backbone route tables from a ground controller, wherein each of the backbone route tables defines a snapshot of a time-varying backbone topology of the NGSO system; receiving one or more user route tables from the ground controller, wherein the user route tables identify connectivity of users to satellites in the NGSO system; receiving a data packet for routing in the NGSO system; determining, based on the user route tables, if the data packet is destined for a first user directly connected to another satellite in the NGSO system; responsive to determining that the data packet is destined for the first user, performing the steps of: identifying the other satellite based on the user route tables; identifying an active backbone route table from the plurality of backbone route tables; and forwarding the data packet to the other satellite over an inter-orbit link or an intra-orbit link based on the active backbone route table; and determining, based on the user route tables, if the data packet is destined for a second user directly connected to the satellite; and responsive to determining that the data packet is destined for the second user, transmitting the data packet to the second user over a user-link maintained by the satellite. receiving a plurality of backbone route tables from a ground controller, wherein each of the backbone route tables defines a snapshot of a time-varying backbone topology of the NGSO system; receiving one or more user route tables from the ground controller, wherein the user route tables identify connectivity of users to satellites in the NGSO system; receiving a data packet for routing in the NGSO system; determining, based on the user route tables, if the data packet is destined for a first user directly connected to another satellite in the NGSO system; responsive to determining that the data packet is destined for the first user, performing the steps of: identifying the other satellite based on the user route tables; identifying an active backbone route table from the plurality of backbone route tables; and forwarding the data packet to the other satellite over an inter-orbit link or an intra-orbit link based on the active backbone route table; and determining, based on the user route tables, if the data packet is destined for a second user directly connected to the satellite; and responsive to determining that the data packet is destined for the second user, transmitting the data packet to the second user over a user-link maintained by the satellite. identifying the other satellite based on the user route tables; identifying an active backbone route table from the plurality of backbone route tables; and forwarding the data packet to the other satellite over an inter-orbit link or an intra-orbit link based on the active backbone route table; and determining, based on the user route tables, if the data packet is destined for a second user directly connected to the satellite; and responsive to determining that the data packet is destined for the second user, transmitting the data packet to the second user over a user-link maintained by the satellite.