Functional testing verifies each software function, whereas Non-Functional testing tests non-functional aspects like performance, usability, reliability, etc.
Functional testing is based on client requirements, whereas Non-Functional testing is based on customer expectations.
Source: https://q-pros.com