为了防御匈奴人的进攻,汉高帝刘邦便把韩王信封于代地。汉高帝六年(公元前201年),匈奴大举进攻马邑,韩王信不敌,于是索性投降匈奴。
当楚汉战争正在如火如荼地进行之际,开始日益强大起来的北方游牧部落匈奴在冒顿单于的带领下,东破东胡,西攻月氏,北征丁零、坚昆等部,南灭楼烦、白羊,并重新占领了河套地区。待到西汉王朝建立时,强盛的匈奴部已拥有"控弦之士"近40万,他们正虎视眈眈地对着中原,声势逼人。显然,他们不久将要成为西汉王朝的一支劲敌。
高帝六年(前201年),冒顿单于发兵围攻马邑(今山西朔县)。是年九月,早就同匈奴关系暧昧的韩王信放弃了抵抗,开始与匈奴勾结。次年,韩王信又与匈奴联合进攻晋阳(今山西太原)。
高帝七年(前200年)十月,刘邦亲率大军30万进剿韩王信,于铜鞮大破叛军。韩王信公开逃往匈奴,与匈奴人及部下残军继续同汉王朝为敌。匈奴左右贤王率万余骑兵在广武、晋阳一带不断与汉军周旋。时值天寒大雪,汉军士卒多被冻伤,其中被冻掉了手指的人就占到了十分之二三。然而,冒顿单于为迷惑汉军,故意隐匿其精兵,反将一千老弱士卒暴露在外。
刘邦被骗,于是亲率汉军主力向匈奴大肆进攻。当汉军越过句注山时,奉春君刘敬觉察到敌军有异常,他劝阻刘邦道:"如今两国相斗,应该首先把自己的优势展现出来以令敌军产生畏惧心理。现在,我却只看见敌方老弱病残的士兵,想来这一定是他们引诱我们的法子。所以,我认为匈奴是不可以轻易攻打的!"然而,刘邦非但不听劝阻,反而指责刘敬惑乱军心,以至将其关押问罪。
刘邦率汉军至平城,在步兵主力尚未集结之时,冒顿单于突然率领着自己的30多万精锐部队杀出,一鼓作气便将刘邦所部围困于平城东南之白登山(今山西大同市东北)。汉军顿时被截为内外不能呼应的两部,刘邦及被围困于白登山上的汉军将士七日七夜不得突围,内外汉军彼此不能相救,情况万分危急。
就在此时,刘邦手下的重要谋士陈平献计:派人贿赂单于的阏氏(相当于汉朝的皇后),并晓之以利害。阏氏在接受了贿赂后,果然劝说冒顿令其解围。恰值叛投匈奴的降将王黄、赵利等人也未按单于规定的时间赶来会师,此事引起了冒顿的怀疑。冒顿消灭刘邦的决心开始动摇,于是他便命令围开一角,陈平等人则趁隙保护着刘邦突围而出。到达平城时,汉军主力已至,匈奴人见战机已失,不得不撤兵而去。刘邦知匈奴撤兵,也不敢恋战,在派出樊哙收复代地后,自己则率兵退回了广武。不久,他回到了长安。
平城之战后,白登被围使得汉高帝刘邦认识到了西汉王朝暂时还无力与匈奴较量,从此他便改变了对匈奴的强硬对策。此时,刘敬趁机献上了"和亲"之策,以暂时笼络住贪婪的匈奴人。汉匈和亲以后,双方还"约为兄弟",西汉政府最终用财物换得了边境暂时的安宁。尽管此后匈奴仍不时骚扰,但大规模的军事行动在汉初并未出现。直到汉武帝时期,汉方才一改屈辱的妥协政策,转而对匈奴人展开了大规模的反击。