Wouldnt that make it profitable to snipe other nodes out of the network? If I can somehow (DDoS, etc.) reduce the number of eligible nodes in the network I would increase my part of the reward. This could result in an arms race of nodes trying to get each other unreachable by the rest of the network. This would possible reduce the number of full nodes available as the become a target.
Does not the same concern exists for miners too ? Like one miner trying to knockout other miners ?
People do DDOS pools, all the time.
Id assume that DDoS among miners is somewhat normal, yes. But since a mining pool only needs a single connection to broadcast a new block its probably difficult to efficiently take a mining node out of the network for a long period of time. An uptime requirement of e.g. 24 hours would make it easy to take a node out of the network for said 24 hours. It would also be difficult to determine whether a node was actualy online over a certain period of time.
They would have to contain a full copy of the blockchain
How do you prove that? Node A and Node B could point to the same blockchain copy on a shared network resource.
Im not sure whether this is an issue, but it would certainly be possible to write custom node software that pretends to be a full node while its actually sharing a single copy of the blockchain with a high amount of other nodes. It might also be possible for a node to just relay block requests to other nodes in order to appear like a full node. This is certainly possible today, but since no one could benefit I doubt its a widespread problem.
---
Another thing that just came to me is: How would a mining node know which nodes to reward? Since the mining node is the one that creates the block it has to verify whether a certain node is eligible for a share of the reward.