Long de 1 200 kilomètres, le Song Hong prend sa source à Talifou, sur les hauts plateaux du Yunnan (province sud de la Chine). Il jaillit à 2 500 mètres d’altitude et pénètre en territoire vietnamien à Lao Cal, alors qu’il n’a parcouru que 80 kilomètres mais a déjà perdu 1 700 mètres d’altitude. Il est aussi connu sous le nom de «fleuve rouge», traduction littérale de Song Hong. Sa vallée est droite et encaissée jusqu’à Yen Bai. Il reçoit ensuite ses principaux affluents : le Song Da (qui signifie rivière noire) et le Song Lo (rivière claire). Ces 2 rivières prennent également leurs sources en Chine méridionale. Dès lors, son cours change de nature et s’étire en de larges méandres dans sa partie terminale. À 220 kilomètres de son embouchure, il n’est plus qu’à 10 mètres d’altitude. Son débit habituel est de 3 900 m3/s (soit 5 fois celui de la Seine, mais 40 fois moindre que celui de l’Amazone) quoique la période des crues l’augmente considérablement. Faute de dénivelé, la partie finale de son parcours est changeante, aussi a-t-on érigé des digues pour stabiliser son itinéraire. Le golfe par lequel il se jette dans la mer est fertile en raison de sa soudure avec le delta de Song Thaï Ninh. À hauteur de la ville d’Hanoi, qui se situe sur sa rive droite, son niveau est en moyenne de 2,20 mètres, mais il lui arrive d’atteindre 12 mètres comme pendant la crue de 1945. À cette époque, le débit du Song Hong était monté à 30 000 m3/s, et les rues proches de son lit avaient été couvertes par 6 mètres d’eau.