# Lossless and High-Throughput Congestion Control in Satellite-Based Cloud Platforms +
## 3 Integrated System and Algorithm Design
### Data Forwarding Scheduling  
We propose a priority-based Data scheduling approach. The output queue of each interface in the router is monitored to ensure sufficient available space. Next, the most suitable Data packet is selected from the dispatch table and inserted into the output queue according to the scheduling algorithm. CCLF prioritizes the forwarding of critical, delay \begin{table}
\begin{tabular}{l l} \hline \hline
**Parameters** & **Definitions** \\ \hline \(p_{i}\), \(\forall i\) & The priority of Data \(i\) \\ \(n_{i}\), \(\forall i\) & The name prefix of Data \(i\) \\ \(q_{i}=Q(p_{i})\), \(\forall i\) & The queue with priority \(p_{i}\) in database \(Q\) \\ \(s_{i}=q_{i}(n_{i})\), \(\forall i\) & The sub-queue with name prefix \(n_{i}\) in the queue \(q_{i}\) \\ \(byte(s_{i})\) & Total byte length of the forwarded Data in sub-queue \(s_{i}\) \\ \hline \hline \end{tabular}
\end{table} 
Table 1: Parameters used in the dispatch table. Figure 6: The structure of the dispatch table. sensitive Data packets while allocating bandwidth to regular data flows based on metrics such as queuing time, packet reception rate, and packet size, as detailed in Section 3.4. The Data scheduling approach involves two key processes: (1) inserting Data information into the dispatch table, and (2) selecting Data for forwarding from the dispatch table. The priority of each data flow aids in Data scheduling, ensuring low forwarding delay for critical flows and maximizing network throughput. The Data scheduling process is illustrated in Figure 7 and described as follows. When a router receives a Data packet, it searches for the Pending Interest Table (PIT) entry with the same name as the Data. If no matching entry exists, the router discards the Data. Otherwise, the Data are stored in the CS and forwarded according to the interface recorded in the PIT. The next step involves inserting the Data pointer into the dispatch table. First, the forwarding database \(Q\) is determined based on the output interface. Then, the Data pointer is inserted into the appropriate sub-queue based on its name and priority. The detailed process is described as follows:  
1. Read the priority field \(p_{i}\) in Data \(i\) and determine the queue \(q_{i}=Q(p_{i})\) from the forwarding database \(Q\). 2. If the queue \(q_{i}\) with priority \(p_{i}\) does not exist, create a new queue \(q_{i}=Q(p_{i})\) in the forwarding database \(Q\). 3. Read the name \(n_{i}\) in Data \(i\) and select the sub-queue \(s_{i}=q_{i}(n_{i})\) from the queue \(q_{i}\). 4. If the sub-queue \(s_{i}\) is empty, it indicates that a new data flow with the name prefix \(n_{i}\) is being received. To ensure appropriate bandwidth allocation among flows with the same priority, reset the recorded sent byte count \(byte(s_{i})\) for all sub-queues \(s_{i}\) of equal priority to zero. 5. Insert the pointer of Data \(i\) into the sub-queue \(s_{i}\). At this point, the PIT entry can be erased as it has been satisfied. Specifically, a scheduling thread is configured for each interface. When a forwarding database \(Q\) is not empty, the scheduling thread serving the corresponding interface remains active. After one Data packet is sent out from the output queue, the next Data packet is selected from the forwarding database \(Q\) and inserted into the output queue. The scheduling thread continues to run until the database \(Q\) becomes empty. Furthermore, after each interval of \(\delta\), the queue is checked. If the output queue is empty and the associated forwarding database \(Q\) is not empty, the Data recorded in \(Q\) will be scheduled one by one. Specifically, high-priority Data can be forwarded preferentially. If multiple data flows have the same priority, factors such as average queuing time, packet reception speed, and packet size are considered. If these factors are also identical, then according to Equation (43), the parameters for these data flows are identical, i.e., \(S_{1}=S_{2}=\cdots=S_{n}\). Consequently, each data flow is assigned the same forwarding rate.