高句丽与隋的战争发生在598年至614年。高句丽多次成功抵御隋军攻击,隋军损失惨重。最后高句丽婴阳王请降并将逃到高句丽的斛斯政遣返,隋世祖撤军,隋国内出现隋末民变后灭亡;隋的屡次空前大规模进攻也消耗了高句丽国力力。
平原王在位早期,高句丽与隋维持着紧张而和平的关系,继北朝之后,受隋高祖文皇帝册封为「高丽王」。由于此时百济与新罗联盟的早已瓦解,高句丽南部相对平静。586年,平原王将都城由平壤城迁至长安城(即今朝鲜平壤市区),直至高句骊灭亡。历时83年。
隋高祖开皇九年(589年)四月,隋灭南陈统一中国后,隋开始要求周边国家为其臣属。高句丽与隋的关系逐渐进入战争状态。590年,高句丽平原王「治兵积谷,为守拒之策」,随时准备迎战隋大军。高句丽曾多次小规模袭击隋北部边疆。对此隋高祖很不满并致书平原王高汤,「辽水之广,何如长江?高丽之人,多少陈国?朕若不存含育,责王前愆,命一将军,何待多力!」。高句丽婴阳王继位后的596年,隋的特使在突厥遇到高句丽在突厥的特使后,隋高祖传书高句丽要求高句丽终止与突厥的联盟,停止对隋边疆的连年的侵袭并对隋表示臣服。高句丽婴阳王虽然表面上接受了隋高祖的最后通牒,但第二年,597年,婴阳王联合粟末靺鞨先发制人攻击隋在冀州道的军事驻地。
隋高祖开皇十八年(598年),隋高祖文皇帝派汉王杨谅协高颎和大将周罗睺率30万海陆大军攻打高句丽。
杨谅的军队去时正赶高句丽的雨季。道路泥泞,粮草供应不上,军中疫病流行,虽勉强进至辽水,但已无力投入战斗;高句丽的频频袭击使杨谅的军队损失惨重。感到无法攻克高句丽,杨谅决定与周罗睺的海军会合。
周罗睺的海军同时也是困难重重。虽然隋的海军尽可能地靠着海岸前行,但在海上遇大风,船多沉没。隋的海军一抛锚休息,高句丽的先遣部队就会出现进行袭击。周罗睺与姜以式的5万高句丽海军在渤海交锋。由于周罗睺先前已损兵折将,元气大伤,败于高句丽。
据《隋书》记载,这次战役中,隋军损失90%。而与隋相比,高句丽军队伤亡很少。 杨谅别无办法,只好撤退。此次战役是隋文帝仅有的一次大败仗。为防止隋的再次入侵,婴阳王高元曾上表称「辽东粪土臣元」,隋文帝只好适时罢兵,待之如初。
604年,隋世祖登基后,建设隋唐大运河,将中国北部的政治中心与中原的洛阳和南方连接起来。这使得跨地区大规模运送军队成为可能。
隋世祖大业六年(610年),大运河建成后,隋世祖开始募集军队。募集的军队被集中在涿郡(位于今北京通州)。据《隋书》记载,此次募集耗时数年,规模前所未有。据《三国史记》的记录是此次出动了三十万的作战部队。负责后勤和运输的人员还要多于这个数字。整个军队的总数说法不一,估计在100万上下。隋世祖大业八年(612年),隋的大军开始出发。由于人数巨大,全部部队用了40天才出发完毕。行进的部队排成的队绵延400公里。
598年的战争,高句丽得到一些缓冲地域。由于这些地域不适于和隋这么大规模的军队进行面对面的交锋,高句丽婴阳王将军队撤到辽水一带。天时地利,那年,辽河水比往常提前好久就开始解冻了。当隋世祖到达的时候,辽河水已全部融化。隋世祖毫不气馁,下令在辽河上修建了3座桥梁。不过隋世祖所修的桥还没修到对岸,高句丽就对隋军发动了进攻,并有效地击退了隋世祖的第一次进攻。不过最终将桥修好,隋军过桥包围了辽东城。
开战前,隋世祖下令隋将不得擅自作出任何有关作战决定,必须先向他报告后再听从命令。这使得隋军在战场上很被动。隋将在做每个决定的时候都要先派人驰报远在后方的隋世祖,这就延误了军情。高句丽的军队也因此有充足的时间进行重整和反击。就这样5个月过去了,隋世祖没拿下辽东城。于是,隋世祖感到需要改变策略。
隋世祖的新战略是在同高句丽在辽东周旋的同时,派海陆军攻打高句丽的首都平壤。30多万陆军和20万海军构成的先遣队就这样出发了。
隋的海军先于陆军到达了大同江。发现隋的陆军没有到达,婴阳王派出了一小批军队与入侵的隋朝军队交战。简短的交锋后,高句丽的军队假装被击败并向城里撤退。隋朝军队将领以为立功的大好时机已到来,带领10万军队开始攻平壤。
当隋朝军队来到平壤的外围城堡时,发现大门敞开,墙上也无人把守。进入城堡后,发现地上放着钱财和武器。为了谨慎起见,隋朝军队将领下令禁止掠夺。当隋朝军队来到一个寺庙后,遭到了高句丽的伏击。不过高句丽的军队并没有取胜,然后就撤逃了。这次隋朝军队将领真的以为高句丽不行了,于是开始掠夺外围城堡。
正当隋朝军队掠夺之时,一支由几千人组成的高句丽先遣部队对隋朝军队进行了伏击。毫无防备的隋朝军队一时慌了手脚,不知所措,并开始向海边撤退。据说10万隋朝军队仅有几千人成功退出。第一次单独行动失败后,隋朝军队的将领决定还是等隋朝部队的陆军到达后再围攻平壤。
然而,隋世祖派出的陆军在路上也出了问题。在隋国内行军,隋军后勤很有保障。但一旦进入高句丽的国土,隋朝军队的后勤供应就会遭到高句丽的伏击。为了解决这个问题,隋世祖下令每个士兵都要自己携带食物。不过这大大加重了士兵的负担。许多士兵为了减负,扔下所带的食物。等隋朝军队到达鸭绿江后,物资已严重缺乏。
在鸭绿江和平壤之间有一条青川江,高句丽大将乙支文德下令在清川江的上游修筑堤坝蓄水。当隋朝军队到达清川江时,江水很浅。于是隋朝军队便涉水过江。正当隋朝军队过江之时,乙支文德下令开闸放水。数千隋朝军队被淹死。乙支文德随后率领高句丽军队向入侵的隋朝军队发动了猛烈的进攻。据说隋炀帝派出的30多万陆军仅有2700人返回。
隋大业九年(613年),隋世祖再次对高句丽发动进攻。这次又无功而返。在隋世祖亲征高句丽之时,杨素的儿子杨玄感在国内谋反。担心两面受敌,隋世祖被迫撤退回国镇压杨玄感的叛乱。
在镇压了杨玄感的叛乱后,隋世祖于大业十年(614年)又攻高句丽。虽然隋世祖冲破了高句丽的第一道防线,但由于高句丽的持续伏击和对隋朝军队供给线的切断,隋世祖始终不能拿下辽水这层防御线。婴阳王将在杨玄感造反后逃到高句丽的斛斯政遣返给隋世祖。隋世祖接受了婴阳王的请降并撤军。
隋世祖对高句丽发动战争,连续三年的征战使隋数十万人丧生,「九军并陷,将帅奔还亡者二千余骑」,引起隋国内人民对杨广的强烈不满。隋世祖第一次攻高句丽之前的隋世祖大业六年(610年),就爆发了雁门郡人尉文通的领导的造反的隋末民变,但在第三次攻高句丽(614年)失败之后,已无军力镇压隋末民变了。隋对高句丽的连年征战不仅使隋国力锐减,民不聊生,也使隋世祖丧失民心。不仅农民起义,而且隋的将领也相继叛变。隋都大兴城在617年11月为晋阳留守李渊所据。隋洛阳城在618年为宇文化及和后来的王世充占据,618年4月11日隋世祖杨广在广陵郡的江都被杀,王世充并在618年6月23日扶植隋皇泰主杨侗登上皇位;619年5月22日王世充得到隋皇泰主杨侗禅让后自立为帝,隋朝灭亡。不过隋对高句丽的连年征战也严重消耗了高句丽的国力。645年—668年八月,在唐朝的征伐,和最终联合新罗军队的征伐下,高句丽最终灭亡。