Transaction fees are paid to the miner that includes that transaction in their block. Nodes do not earn transaction fees (or any other fees) for validating transactions.
You can reduce fees by using segwit inputs, and by waiting for periods when the mempool is relatively empty.
You generally would not be able to receive a single satoshi.
The Bitcoin Protocol defines something known as a "dust limit".
The exact value of this limit varies based on the receiving address type, but it is defined as the minimum amount of BTC required to spend an input for a given address type.
It is calculated by using a basic 1 input 1 output ...
Transactions fees goes to miner along with the mining rewards. Fee is a function of how much transactions are in mempool and several other things.
Using cli of bitcoin node, you can get an estimate fee as per number of blocks time you want for confirmation.
Ex - Let's say I am ok with my transaction getting confirmed after approx n blocks are formed
I have found this article https://bitcointechtalk.com/an-introduction-to-bitcoin-core-fee-estimation-27920880ad0 which give you a pretty good summary of this bitcoin function.
Notice that estimatesmartfee return is based on the data of what happened in the past in the blockchain, it is not trying to predict what will happen in the future but what should ...