When you use Vue with Webpack (almost always), Vue-loader is used to compile your .vue files. When compiling <template> part of the file, it looks for some common tags like <img> and is able to transform content of the src tags into Webpack module requests
So your <img src="@/assets/logo.png" /> is at compile time transformed (essentially) into <img :src="require('@/assets/logo.png')" />
See the link above for tag/attribute combinations transformed by default. If the combination you need is not there (as in your case), you can either configure Vue-loader (transformAssetUrls) as many popular UI libraries do (for example Vuetify for it's v-img component) or you must do it by hand as @Boussadjra Brahim suggested (with missing quotes tho):
<router-link :src="require('@/assets/logo.png')" to="/" tag="img" />