秦汉之际,当中原各路诸侯忙于征战时,北方的匈奴趁机强大起来。汉初,匈奴的杰出首领冒顿单于率领40万人马包围并占领了马邑,今山西朔州。随后又继续向南进攻,围住晋阳,今山西太原一带。
公元前200年冬天,面对危急的形势,刘邦亲率大军北上抵御匈奴。汉朝军队和匈奴兵几次交战,匈奴兵皆狼狈败走。在取得接连胜利后,汉军开始麻痹轻敌。
汉高祖刘邦进军到晋阳后,派兵士前去侦察,得知,冒顿的部下全是一些老弱残兵,连他们的战马都很瘦。有人建议,乘胜打过去,定能击溃匈奴。刘邦为确保万无一失,又派部将刘敬到匈奴营地去刺探。刘敬回来后称,看到的匈奴人马的确都是些老弱残兵,但他不建议刘邦乘胜追击,因为这很可能是匈奴的诱敌之策。汉高祖没有采纳这一建议,并率领骑兵先行至平城,在主力还未完全到达时,四下里突然涌出无数匈奴兵来,个个兵强马壮。汉高祖刘邦一路拼杀,退到平城东面的白登山。冒顿单于派出四十万精兵,把白登山围得水泄不通。
冒顿率领骑兵从四面进行围攻,企图将汉军冲散,结果未能如愿。刘邦也竭力组织突围,但经过几次激烈战斗,突围都失败了。最后双方损失都很大,一直相持不下。汉军内无粮草接济,外无援兵相救,再加上天气严寒,兵士冻伤不少。眼看着整整七天过去了,刘邦不得不想别的办法解围。他采纳谋士陈平的计策,用黄金、珠宝贿赂了冒顿的阏氏,即冒顿的王后,请她在单于面前说些好话。当天晚上,阏氏对冒顿说:“我们占领了汉朝的地方,终究没法长期住下来,再说,汉朝皇帝也有人会来救他。咱们不如早点撤兵回去。”冒顿单于与汉叛将王黄和赵利约定了会师的日期,但他们的军队没有按时前来,冒顿单于怀疑他们同汉军有勾结,就采纳了阏氏的建议,打开包围圈的一角,让汉军撤出。
白登之围后,汉高祖刘邦深知目前没有力量征服匈奴,只好回到长安。此后,西汉限于国力,不得不对匈奴实行“和亲”,以维持北方边境的和平。