598년, 영양왕의 요서 선제 공격에 분노한 수 문제는 육군과 수군 30만 명을 동원해 첫 번째 원정에 나섰습니다. 하지만 전례 없는 이른 장마와 거센 폭풍우가 수나라의 보급선과 함대를 집어삼켰고, 병력의 태반을 질병과 굶주림으로 잃은 수나라는 비참하게 후퇴해야 했습니다. 당시 관련 사료가 거의 남아있지 않아 구체적으로 어떤 양상의 전투가 벌어졌는지는 아직 역사적 수수께끼로 남아있습니다.
진정한 대결은 612년 수 양제 때 일어났습니다. 그는 상상조차 하기 힘든 113만 명의 대군을 이끌고 고구려를 침공했습니다. 고구려의 요동성이 철옹성처럼 버티며 시간을 끌자, 초조해진 수 양제는 30만 명의 정예 별동대를 꾸려 곧장 수도 평양성으로 진격시키는 도박에 가까운 승부수를 띄웠습니다.
고구려의 장군 을지문덕은 직접 적진에 거짓 항복하며 들어가 수나라 군대의 식량이 턱없이 부족하다는 치명적인 약점을 파악해 냈습니다. 이후 고구려군은 하루에 7번을 싸워 7번 모두 일부러 져주는 척하며, 굶주림에 지친 수나라 군대를 평양성 인근까지 깊숙이 끌어들였습니다. 보급이 끊겨 한계에 달한 적장에게 을지문덕은 시(여수장우중문시)를 보내 철수를 권유했고, 마침내 수나라 군대가 다급히 퇴각하며 살수(청천강)를 반쯤 건널 때 뒤에서 일격을 가했습니다. 30만 명 중 살아 돌아간 사람이 고작 2,700명에 불과했던 '살수대첩'은 동아시아 전쟁사에서 손꼽히는 큰 승리로 기록되었습니다.
수 양제는 613년과 614년에도 고구려 원정을 강행했지만, 수나라 내부에서 일어난 양현감의 반란과 각지의 농민 봉기에 부딪혀 결국 실패하고 말았습니다. 무리한 대규모 원정으로 국력을 탕진한 수나라는 민심을 잃고 건국 37년 만에 멸망의 길을 걸었으며, 고구려는 동북아시아의 강력한 독자 세력으로서의 위치를 확고히 했습니다.