公元前124年,汉武帝又派卫青率骑兵三万,配合其他几路大军。卫青深入塞北六七百里,掩袭匈奴右贤王王庭。右贤王措手不及,吃了大败仗,仅带几百随从,仓惶北逃。此战俘获匈奴男女一万五千多人,裨王十多人,进一步打击了匈奴的军事力量。为了奖励卫青,汉武帝特派使者,执大将军印,前往边塞迎接卫青,于军中拜卫青为大将军。
在公元前121年与匈奴争夺河西地区的战役中,年轻将领霍去病,英勇善战立首功。霍去病为卫青外甥,十八岁即被武帝任命为侍中。他曾在卫青部下,率八百精骑,奔袭几百里,杀死匈奴单于叔祖父,活捉单于的叔叔和相国,深受汉武帝器重。此次进击匈奴,汉武帝提拔他为骠骑将军,委以统帅进军河西的重任。霍去病率精兵万骑,奔驰千余里,连连击败匈奴骑兵,杀伤俘获逾万,并得匈奴休屠王的祭天金人,这个金人价值连城。随后,他又指挥几路精兵“出陇西、北地二千里,过居延,攻祁连山”,夺得祁连山和河西走廊。匈奴人失去水草肥美的河西之地,经济损失惨重,他们编出歌谣,悲哀地唱着:“亡我祁连山,使我六畜不蕃息;失我焉支山,使我妇女无颜色。”河西地区为汉军控制,从此打开了汉朝通往西域的通道。
匈奴贵族在汉军的连续军事打击下,内部日益不稳。匈奴单于责罚丢失河西的浑邪王,浑邪王率兵投归汉朝。汉武帝令霍去病派兵接降,击杀不肯归顺的部分匈奴将卒,保护浑邪王到京都长安。
公元前119年,匈奴分两路以数万骑入寇右北平和定襄郡,掠去千余人。汉武帝派兵遣将,直指漠北,寻歼匈奴主力。他令卫青和霍去病各率五万骑兵,组织随军战马十四万匹,由定襄、代郡两路出击,其后又有输送粮草的步兵数十万。而匈奴单于听从降将赵信计谋,移师漠北,严阵以待,企图乘汉军远途疲惫,一举全歼。双方都摆出决战态势。
霍去病率东路汉军出代郡,北进二千多里。曾与李广交战的匈奴左贤王,这次也成了霍去病的对手。霍去病的骑兵力克左贤王精锐,俘其三个小王及其将军、相国、当户、都尉军等八十三人。左贤王和手下部分将官,败逃而去。霍去病率军尾追,一直追到翰海(今西北利亚贝加尔湖),才胜利班师。
由卫青所率西路汉军挥师出定襄,西进千余里相遇匈奴单于主力。卫青将战车“自环为营”,并指挥五千骑兵向匈奴阵营冲锋。匈奴一万多骑兵立即猛扑而来。双方鏖战到黄昏,顷刻间,狂风骤起,飞沙扑面,两军阵容杂错,彼此不分,搏杀更激烈。卫青一面指挥汉军奋力拼杀,一面派出两支轻骑,分左右两翼,迂回包抄匈奴单于。单于慌乱中率几百骑兵,冲出汉军包围阵,飞驰而逃。匈奴军群龙无首,全军溃散。卫青派轻骑连夜追赶单于,未及。卫青主力乘胜追杀匈奴残部,及至颜山(今蒙古纳拉特山)赵信城,勒马屯兵,烧毁匈奴储粮,凯旋而归。几次重大战役,特别是漠北之战,汉军打垮了匈奴主力,使他们元气大伤。自此,匈奴贵族再也不敢轻言牧马中原。汉朝抗击匈奴也付出了沉重代价,尤其是漠北之役,“汉军死伤士卒数万人,出征时的十四万匹马,复入塞者不满三万匹。”
汉、匈战争结束后,匈奴分裂为五部。其中呼韩邪单于投降汉朝,引众南徙于阴山一带,希望与汉和亲。竟宁元年(前33年),呼韩邪单于至长安,汉元帝以宫人王嫱(王昭君)嫁给他,恢复了和亲关系。这就是历史上所说的“昭君和亲”或“昭君出塞”。此后,汉、匈两族友好相处,四十多年没有发生战争,边境安宁,牛马遍野,双方互通关市,来往频繁。