중국이 분열되어 있을 때, 중국은 고구려나 북방민족에게 신경을 쓸 여유가 없었다. 중국 안에서의 다툼 때문이었다. 고구려는 이를 적절히 활용하여 국익을 취하였다.
그러나 서기 589년, 수나라 문제에 의해서 중국은 통일되게 된다. 통일된 중국의 힘은 무서웠다. 순식간에 남북으로 이민족들을 몰아붙였다. 고구려의 최대 동맹이었던 돌궐도 패배하게 된다. 수나라에게 남은 세력은 고구려가 유일했다.
두 나라의 대치가 팽팽해지자 먼저 칼을 뽑아 든 것은 고구려였다. 598년, 고구려 영양왕이 먼저 요하를 건너 수나라를 공격하였다. 수나라는 이를 빌미로 삼아 598년 30만 대군을 이끌고 쳐들어왔으나 여러 문제 때문에 제대로 공격하지도 못하고 대패하였다.
수나라 문제의 뒤를 이어 수나라 양제가 황위에 올랐다. 그는 수 문제 보다 더 호전적인 인물이었다. 611년~612년에 걸쳐 113만 3600 대군을 이끌고 고구려로 쳐들어갔다. 보급부대까지 합치면 근 200만 대군이었다. 40개 군단으로 군대를 편성하였다. 탁군(북경)에서 출발하는데 40일이 걸렸다. 그러나 요하를 건너는 것에서부터 쉽지 않았다. 수만 명의 희생 끝에 요하를 건널 수 있었다. 그리고 포위한 성이 요동성. 요동성은 산성이 아닌 평지성이었지만, 결코 호락호락 점령당할 성이 아니었다. 수없이 공격하였으나 요동성은 무너지지 않았다. 조바심이 난 수 양제는 우문술에게 30만 대군을 이끌고 평양성을 공격하라고 명한다. 그리고 해군 5만 대군도 고구려를 공격한다. 그러나 해군은 대동강 인근에서 전멸을 당했다. 우문술의 30만 대군은 고구려군과 싸우는 족족 승리를 거두면서 평양성으로 진격했다. 그러나 이는 을지문덕이 수나라 군대를 끌어들이기 위한 전술이었다. 고구려는 모든 식량과 가축을 후방으로 빼돌렸다. 남아있는 곡식은 불을 질렀다. 수나라 군대에게 쌀 한 톨 주지 않겠다는 의도였다. 이를 청야전술이라고 한다. 심지어는 백성들마저 모두 철수시켰다. 수나라 군대는 포로도 얻을 수 없으며, 식량도 빼앗아 먹을 수 없었다. 그래도 수나라 군대는 수군을 믿었다. 평양성에 도착했지만, 수군은 이미 전멸당한 뒤였다. 수군은 보급을 가져오기로 약속을 했었다. 수나라 군대는 식량이 다 떨어졌다. 하지만 돌아갈 길은 멀었다. 고구려 영토 한복판에 그들은 있었던 것이다.
퇴각은 느리고 힘들었다. 고구려군은 사방에서 게릴라전을 펼치면서 수나라 군대를 조금씩 붕괴시켰다. 그리고 청천강 인근에서 고구려군은 총공격을 하였다. 당시 고구려군은 30만이었고, 신라와 백제 방어군을 제외하면 20만 대군이었다. 고구려의 총공격에 수나라 30만 군대는 몰살했다.
여기서 우리가 착각하는 것이 하나 있다. 을지문덕이 살수에서 물을 가둬서 보를 터뜨려 수나라 군대를 몰살시켰다는 것이다. 하지만 역사책 어디에도 물로 공격했다는 말은 없다. 설사 물로 공격한다고 하더라도 그 많은 군대를 수장시킬 수 없었다. 단지 수 백 명이 물에 떠내려가고, 전열이 흩어지는 정도에 불과했을 것이다. 누군가의 상상력이 만들어낸 허구였다.
대패를 당한 뒤에 수 양제는 미련을 버리지 못하고 계속 고구려로 쳐들어왔다. 그 때마다 고구려는 수나라 군대를 격퇴시켰고, 수나라도 양현감의 반란 같은 것으로 인해서 일찍 군대를 철수시켰다.
수 년 동안 100만이 넘는 엄청난 군대를 계속 일으키자, 수나라 국력은 마침내 바닥을 보이고 말았다. 618년 수나라는 허무하게 무너지고 말았다. 7년 전, 611년부터 시작된 고구려 침공만 없었더라면 수나라는 역사 속에 좀 더 오래 볼 수 있었을 것이다.
고구려의 국력손실도 막심했다. 을지문덕의 청야전술은 국력에 큰 손실을 입혔다. 많은 지역에서 논과 밭이 사라지고, 민가는 폐허로 변했으며, 유랑하는 백성들이 늘어났다. 수나라 군대에게 곡식이나 노동력을 주지 않으려고 수나라 진격로에 위치한 지역들을 완전히 파괴한 것이다. 덕분에 수나라 군대는 곡식을 한 톨도 얻지 못하고, 포로도 잡을 수 없어서 지쳐갔지만, 동시에 고구려의 국력을 갉아먹는 행위였다.