The 25-year-old son of Canaries great Bryan played youth football at Norwich and spent the 2017-18 season on loan at Carrow Road from Manchester City.
He moved to Southampton for £13.5m in July 2018 but failed to establish himself, making just 30 appearances.
"He's at a perfect age and full of potential" said Norwich boss Daniel Farke.
"He's proved he can play at the top level and was fantastic for us three seasons ago.
"He played almost each and every second for us and of course he has a huge identification and connection with the football club through his father."
Gunn's career at St Mary's failed to recover after he played in Saints' 9-0 defeat by Leicester in October 2019.
He featured in just three FA Cup matches for Saints after that, spending time on loan at Stoke City in the Championship last season.
Gunn moves to a Norwich side where the Netherlands international Tim Krul is number one after he helped them earn an immediate return to the Premier League as Championship title winners.