元狩三年(公元前120年)秋,匈奴集合数万骑兵从东北面的右北平、正北面的定襄对汉朝发动进攻。
元狩四年(公元前119年),汉武帝召集将领商议反击匈奴的事宜。汉武帝与各位军事将领商议说:“翕侯赵信给匈奴单于出谋划策,认为汉兵不能够轻装穿过大沙漠,即使到了那里也呆不久,此次发动大军,一定要达到我们的目的。”于是征选了用粟米饲养的战马十万匹,命大将军卫青、骠骑将军霍去病各率骑兵五万人出征,跟随官兵驮运行装的马匹也有四万匹,跟在大军之后的步兵和运送辎重的人有几十万。那些敢于深入匈奴腹地,与敌人力战的勇猛将士都归霍去病指挥。开始,霍去病率部从定襄出塞,从正面攻击匈奴单于。后从俘虏口中得知单干在东边,于是汉武帝改命霍去病从代郡出塞,卫青从定襄出塞。郎中令李广屡次主动请求出征;汉武帝认为他年事已高,没有批准他的请求,过了很长时间才任命他为前将军。太仆公孙贺被任命为左将军,主爵都尉赵食其为右将军,平阳侯曹襄为后将军,都归大将军卫青统领。赵信为单于谋划说:“汉军横穿大沙漠后,人马必定疲惫,我们可以坐等他们,并将他们擒获。”于是将己方的辎重运到北方很远的地方,命精锐部队在沙漠以北等候汉军。卫青出塞后,从俘虏口中得知单于的住地,便亲自率精兵挺进,命前将军李广与右将军赵食其合兵一处,由东路进军。因为东路绕远,水草也不丰盛,李广于是请求卫青说:“我的部队是前将军的部队,但现在大将军却改命我部为东路军。我从少年时就开始与匈奴作战,今天才有机会正面对付单于,所以愿意作前锋,先去与单于决一死战。”出征前卫青受汉武帝的告诫说:“李广年纪已大,运气又不好,不要让他与单于正面作战,他怕是不能完成擒获单于的任务。”而公孙敖不久前失去侯爵,卫青也想让他与自己一同正面与单于作战立功,所以将前将军李广调到了东路。李广得知内情,坚持推辞卫青的调遣,遭到卫青拒绝。李广心中十分愤怒,未向卫青告辞就动身出发。
卫青率大军出塞一千多里,横穿大沙漠,见匈奴单于的军队正列阵以待,于是下令将兵车环绕一周结成阵营,派出五千骑兵攻击匈奴,匈奴也派出约一万骑兵迎战。那时太阳将落,忽然刮起狂风,卷起漫天黄沙,两军士卒相互不能分辨。卫青增派左右两翼的军队包抄单于。单于见汉军兵强马壮,估计自己打不过汉军,便乘坐六匹强健的骡子,在约几百名精壮骑兵的保护下直冲汉军防线,向西北方向飞奔而去。这时天已昏黑,汉军同匈奴的将士们仍在激烈地搏杀,双方兵力损失相差不多。汉军左翼校尉报告卫青说,他从抓到的俘虏那里得知,单于已在天未黑时离去。于是卫青派出轻骑兵连夜追击,自己率领大军紧跟在轻骑之后,匈奴兵四散逃走。将近天亮时,汉军已追出二百多里,仍没有抓到单于,但擒获和斩杀匈奴一万九千多人。于是到窴颜山赵信城,夺取匈奴的存粮以供养自己的军队。在该地停留一天之后,卫青下令将该城所余的粮食全部烧光,然后班师而回。
前将军李广与右将军赵食其率领的东路军因没有向导,在沙漠中迷失了方向,所以落到卫青的后面,失去了与单于一战的机会。直到卫青率领部下班师回京,经过沙漠南部时才遇到李、赵二位将军。卫青派长史责问二人迷路的情况,并命李广等马上到大将军处听候传讯。李广说道:“这不能怪罪校尉们。是我自己迷了路,我自己到大将军幕府去接受审问。”又对他的部下说:“我从少年时开始,与匈奴进行过大小七十多次战斗,这次好容易有机会跟着大将军出征同单干作战,而大将军却将我部调到东路,路途本就绕远,又迷失了方向,难道这不是天意吗?况且我六十多岁了,毕竟是无颜面对刀笔小吏!”于是拔刀自刎。李广为人清廉,得到了赏赐就分给部下,同士卒一起吃喝,做了四十多年二千石官,家中却没有多余的财产。他的手臂像猿臂般又长又灵活,擅长射箭,估计射不中目标,绝不发箭。他带领军队,在困境中找到水,只要还有一个士卒没喝过,李广就不沾水;有一个士卒没吃过,李广就不进食。士卒因此乐意听命于他。等到李广死去,全军都哭了。百姓听到死讯,认识他的和不认识他的,无论年老还是年轻,都为他流泪。右将军赵食其一人被交付审判,其罪当死,赎身后成为平民。
匈奴单于逃跑后,他们部下很多人混杂在汉军中追赶单于。单于长时间未能同他的部众会合。右谷蠡王认为单于已死,便自立为单于。十几天后,真单于重新与其部众会合,右谷蠡王便去掉了单于的称号。
骠骑将军霍去病率领的骑兵军车和辎重都与大将军卫青相同,但没有副将,于是,霍去病任命使将李敢等人为大校,充当副将,从代郡、右北平郡出塞二千多里,穿过大沙漠,与匈奴左部的军队相遇作战,擒获匈奴屯头王、韩王等三人,以及将军、相国、当户、都尉等八十三人。于是霍去病率军在狼居胥山祭祀天神,在姑衍山祭祀地神,又登山眺望翰海,共俘获匈奴七万零四百四十三人。汉武帝增封霍去病食邑五千八百户,又封其部将右北平太守路博德等四人为列侯,从骠侯赵破奴等二人增封食邑,封校尉李敢为关内侯,赐食邑。低级军官和兵卒升官、受赏的人非常多。而大将卫青却没有得增封食邑的奖赏,部下军吏士兵全都没被封侯。
卫青与霍去病两支部队出塞时,曾在边塞检阅,官私马匹加起来一共十四万匹,到班师回京聚在边塞时,马匹不到三万。
于是,汉武帝增设大司马一职,由卫青、霍去病共同担任,还规定霍去病的官级和俸禄与卫青一样。从此以后,卫青的权势日渐衰落,而霍去病却日益尊贵。卫青以前的很多朋友和门客都改去投靠霍去病,马上便得到了官职、爵位,只有任安不肯这样做。
霍去病为人寡言沉稳,敢做敢为。汉武帝曾想让他学习孙武、吴起兵法,但他说:“作战只看谋略如何罢了,用不着古代的兵法。”汉武帝为霍去病修建府第,让他前去观看,他说:“匈奴还没有消灭,要家干什么呢?”因此,汉武帝便更加看重霍去病。
这时,汉朝消灭匈奴共八九万人,汉军也阵亡了几万人。此后,匈奴迁往更远的地方,漠南再没有匈奴的王国驻地了。汉朝渡过黄河,从朔方以西到令居县,处处开通河渠,设置田官,派士卒五六万人驻扎开垦,逐渐兼并到匈奴旧地以北。但也因缺少马匹,不再大举出击匈奴了。
卫青、霍去病战胜匈奴,为汉朝北方边地开创了一个新局面。边郡和内地之间,邮亭驿站相望于道,联系大为加强。大量的移民和戍卒,在水草丰美的荒凉原野上开辟了大片的耕地,种植谷、麦、秫等作物。中原地区先进的生产工具、耕作技术、水利技术,通过屯田的农民在边郡传播开来。自令居(今甘肃文登)以西至敦煌,修起了屏蔽河西走廊的长城,敦煌以西至盐泽,也筑起了亭障。北方旧有的长城得到了大规模的修整,并建立起完整的边燧系统,自敦煌至辽东一万一千五百余里,众多的吏卒亭台、屯田区、城堡和烽燧系统,既是汉朝在北方边境的政治、军事据点,也是先进经济、技术、文化的传播站,对促进匈奴和相邻地区的社会发展和经济开发,产生了重大的影响。
汉武帝命卫青、霍去病连续不断地大规模出击匈奴,不但将文景时代的积蓄消耗一空,而且造成严重的财政经济危机。长期的战争使得大批青壮劳动力脱离社会生产,全国因此而民怨沸腾。为解决财政危机,汉武帝又实行一系列财经政策,从发行白金皮币、盐铁官营到算缗、告缗、均输平准,不一而足,大大激化了社会矛盾。