589년 수나라가 300년 가까이 갈라져 있던 중국을 통일하자, 고구려는 긴장했다. 598년 고구려가 먼저 요서 지방을 공격하자 수 문제가 30만 대군을 보냈지만 장마와 전염병 등으로 실패했다.
612년 수 양제는 기록상 100만이 넘는 대군을 이끌고 다시 쳐들어왔다. 요동성이 끈질기게 버티자 양제는 30만여 명의 별동대를 평양으로 곧장 보냈다. 고구려의 을지문덕은 거짓으로 져 주며 적을 깊이 끌어들인 뒤, 지쳐서 돌아가는 수군을 살수(청천강)에서 크게 무찔렀다. 살아 돌아간 병사는 2,700명뿐이었다고 기록되어 있다.
수나라는 613년과 614년에도 쳐들어왔지만 모두 실패했다. 거듭된 원정으로 나라 안에서 반란이 잇따랐고, 수는 618년 멸망해 당나라로 바뀌었다. 고구려의 승리는 한반도 남쪽 나라들을 지키는 방파제 역할도 했다.